From: http://hi.baidu.com/adongwang/blog/item/a4f89c3e5654ad0bbaa167b2.html
I386 and i686
Now all Intel 32-bit systems (including AMD and other compatible CPUs) are called i386 systems, including P4. I686 still belongs to the i386 system, but it optimizes the CPU (relative to 386) features. GNU/Linux is divided into Alpha, PowerPC, sun and other different versions, all from the Intel386-P4 with i386 version, but i386 version has several kernels (i386, i386, i586, i686 ), the installer automatically installs the corresponding kernel for you after detecting your CPU level during installation.
It is related to the CPU instruction set. I indicates that it is compatible with Intel's instruction set, and the following number indicates the CPU classification.
Because Intel's CPU has been continuously updated after such a long period of development, from 8086,8088, 80286,80386, 80486, Pentium (586), Pentium second generation (686 ), pentium three generations (686 )... some new instruction sets are added for each generation of CPU, but they are backward compatible (that is to say, the subsequent CPU can fully use the previous CPU instruction set ). In order to make good use of all the CPU performance, the software package adds commands corresponding to the CPU. Therefore, different software packages are generated. Therefore, the i686 software package can be executed on the CPU above the Pentium second generation, but basically cannot be executed on the first CPU such as 486. The i386 software package can be executed either on the i386 computer or on all the later CPUs (for example, Ben San and Ben Si, but cannot play the best performance of the CPU .)
I686 refers to Pentium Pro and later intel ia32 CPU, which we usually call the P6 series processor.
Not to mention i386, generally after 80386.
If IA32 divides subsets: 386 and 486 are one, Pentium itself is one, Pentium Pro, Pentium II, and Pentium III are P6 series, and Pentium IV is one of them. Pentium 4 is based on the NetBurst architecture, which is somewhat different from the P6 series.
I686 is the pentiumpro and later generic arch, while i386 is the generic arch of all x86 systems. i386 does not include 386, 486, 586 (pentium), pentium-mmx
No one is still using 586 or the previous cpu, or even pentiumpro. While rpm is a package for i386, and the running efficiency will be much lower.
The compatibility is probably
I386:
I386:
Iworkflow:
Winchip-c6: MMX 3 dNOW!
Winchip2: MMX 3 dNOW!
I586 (pentium ):
Pentium-mmx: MMX
I686:
Pentiumpro:
Pentium2: MMX
Pentium3 (m): MMX SSE
Pentium-m: mmx sse SSE2
Pentium4 (m): mmx sse SSE2
Prescott: mmx sse SSE2 SSE3
Nocona: mmx sse SSE2 SSE3 (64bit)
C3: MMX 3 dNOW!
C3-2: mmx sse.
K6: MMX
K6-2, k6-3: MMX 3 dNow!
Althon, althon-tbird: MMX 3 dNow! SSE (prefetch only)
Athlon-4, athlon-xp, athlon-mp: MMX 3 dNOW! 3 dNOW (enhanced) SSE (full)
K8, opteron, athlon64, athlon-fx: MMX 3 dNOW! 3 dNOW (enhanced) SSE SSE2 (64bit)
It can be seen that i686 includes all the x86 instances currently in use. Therefore, it is no problem to change the archive of rpm to i686. Instead, it can be optimized in command scheduling to fill up the pipeline, make the program run faster.
In addition to pentiumpro, all i686-compatible x86 systems have MMX and most of them have SSE. It is very important to use the extended instruction base for large-scale computing. For example, if we added-mmmx-march = i686 to the GIMP package, we found that some processing (such as mosaic filter) was faster than 5 times.
In addition, if-mfpmath = sse-msse is used for floating-point operations, the speed of floating-point division is improved by nearly times. This encoding is very important for floating-point operations such as audio and video decoding.
Of course, for compatibility purposes, you can package two versions, with and without sse.
I hope developers can consider changing buildtranslator xxx: i386 in/usr/lib/rpm/rpmrc to xxx: i686 and adding-mmmx to optflag i686.