Menasoft Menasoft Menasoft Menasoft Menasoft
Menasoft
Menasoft

April 16, 2006

What processors support what versions of SIMD ?

Among the hundreds of options in MS Visual studio for C++ code generation is an option to select generation of native mode SIMD or SIMD2. How safe is this to use? I’ve had some trouble finding good descriptions of exactly what these do and what CPU’s are supported.
Back in the old days we only had to worry if the CPU had a x87 co-processor or not. For a while this issue went away. Intel pulled all the x87 functionality into the 486DX, Pentium and above processors. Now it seems the problem is back.

Here’s what I found:

The P55C Pentium version (January 1997) is the first Intel CPU to include MMX instructions, followed by the AMD K6, and Pentium II. Cyrix also added these instructions in its M2 CPU (6x86MX, June 1997), as well as IDT with its C6.

If a SIMD instruction is used on a machine that does not support it, an ‘Illegal instruction’ exception is thrown. (0C000001D). Code can be written to try to use these instructions only if they are supported by the processor. The documented way to do this is with the CPUID instruction. The Windows API also provides a call in KERNEL32.dll to access this information called IsProcessorFeaturePresent. It returns a number of flags indicating which sub-set of instructions can safely be used.

Links:

http://en.wikipedia.org/wiki/MMX
http://www.virtualdub.org/blog/pivot/entry.php?id=30

Intel : MMX
if it supports Socket 7 or 2.8V core voltage
– SIMD1

AMD : 3DNOW
http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/22007.pdf

CPUID SSE detection is flawed on Athlon processors because the motherboard can disable SSE support.

K6 – introduced 3DNOW
Athlon XP 800MHz – says it supports SSE1 but fails some basic tests!

Cyrix
MediaGX – Has some MMX support

For instance: the DirectX D3DXVec4Normalize() function uses SIMD instructions in the case where they are supported. the function pointer is changed from SIMD to non-SIMD at start up. On a side note I have noticed a very obscure bug from Feb 2006 to April 2006 DX SDK in the case where you are normalizing 0,0,0,0. how fun.

Filed under: Research — admin @ 2:53 pm

No Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment

Time limit is exhausted. Please reload CAPTCHA.

Menasoft