ISSUE_NAME: AVX Finder
DESCRIPTION: AVX (Advanced Vector Extensions) is an extension to the x86 instruction set architectures for microprocessors from Intel and AMD. These are first supported by Intel with the Sandy Bridge processor and also by AMD with the Bulldozer processor (I’m not sure if you should talk about AMD). With AVX, the width of the SIMD register file is increased from 128 bits to 256 bits and renamed from XMM0-XMM15 to YMM0-YMM15. The legacy SSE instructions now operate on the lower 128 bits of the YMM registers. AVX also introduces a three operand SIMD instruction format where the destination register is distinct from the two source operands. The alignment of SIMD memory operands is relaxed as well.
RELEVANCE: As a 256-bit instruction set extension to SSE, AVX is designed for applications that are floating point intensive. While going from Scalar to SSE can provide up to 4x faster performance, the ability to work with 256-bit vectors enables operating on 8 float elements per iteration instead of a single element and you can see up to 8x faster performance with AVX (I would say processing 4x and 8x data in single instruction). In addition to the 256-bit extensions of the legacy 128-bit SSE instructions, AVX instructions include: VBROADCASTSS, VBROADCASTSD, VBROADCASEF128, VINSERTF128, VEXTRACTF128, VMASKMOVPS, VMASKMOVPD, VPERMILPS, VPERMILPD, VPERM2F128, VZEROALL and VZEROUPPER.
The AVX Finder in XIF will identify which instructions in your app are AVX instructions and let you know if the app has already been parallelized.