USING THE AVX INSTRUCTIONS

The first CPU in the studio to support AVX was the i3-2100 which is Sandy Bridge. The lower cost Celeron and Pentium processors still do not have that supported in their microprogramming. Windows 7 SP1 or above is required to support the AVX registers. Support with Visual Studio 2010 and above with intrinsics or the /arch:avx which changes the compiler code generation.

The 128-bit SIMD registers have been expanded to 256 bits. Intel AVX is designed to support 512 or 1024 bits in the future.

Originally SSE started of with new registers XMM00 through XMM15. The registers are 128-bit wide and operations can be done in parallel.

SSE2 expanded the original registers with some new ones, called YMM00 through YMM16. These are expanded versions of the original XMM registers to increase the operands to 256-bit width.

AVX added ZMM and widened the registers to 512-bit width. The set of registers is expanded to ZMM31 which gives the CPU a significant amount of processing capabilities.

These AVX instructions are in addition to the ones that are 256-bit extensions of the legacy 128-bit SSE instructions; most are usable on both 128-bit and 256-bit operands.

Three-operand, nondestructive operations have been added. Previous two-operand instructions performed operations such as A = A + B, which overwrites a source operand; the new operands can perform operations like A = B + C, leaving the original source operands unchanged.

There are so many things that can be done with the AVX registers that compared to the core CPU logic, it is clear that new registers and instructions have revolutionized software development.

The logic on a GPU is good but it is far too specialized compared to a CPU which is designed for general purpose computation.