MKL 7.2.1 crashes on pre-SSE Intel CPUs

MKL 7.2.1 crashes on pre-SSE Intel CPUs

The DLL version of MKL 7.2.1 for IA-32 systems crashes when it runs on a pre-Pentium-III system. This is because the initial startup code for the MKL_C_DLL.LIB library contains an SSE instruction, which executes before the CPU type has even been detected and a CPU-specific library selected.

If you haven't tested your MKL-linked application on an older system you should probably check it before you ship.

The STMXCSR instruction occurs55 bytes from the start of __MKL_serv_load_dll in MKL_C_DLL.LIB. Looking at the surrounding assembly code makes the trouble clear:

Code:

6593E0A9 push        edi  
6593E0AA mov         dword ptr [esp],0 
6593E0B1 call        _mkl_cfg_file (6593D35Ah) 
6593E0B6 pop         ecx  
6593E0B7 stmxcsr     dword ptr [ebp-10h] 
6593E0BB wait             
6593E0BC fnstcw      word ptr [ebp-0Ch] 
6593E0BF call        __MKL_SERV_cpu_detect (65940124h) 

Note that the SSE instruction occurs before the call to cpu_detect, so this is obviously wrong.

I hope a patch will be forthcoming soon, otherwise we'll have to regress to a previous version of MKL. We can't insist on a P3 for everyone.

5 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

David,

This problem arose as a result of our solvging a different problem, namely, controlling the rounding mode in the DLLs. We did not differentiate between pre-Pentium III and later processors. Consequently we tried to access a FP status register that does not exist on these earlier processors. We have no pre-Pentium III processors in our validation processor suite currently.

Here is what we plan to do to resolve this for you:

1. We will notify you via this forum within the next few days when we will have a new DLL. We are in the midst of releasing MKL 8.0 beta which is tying up a lot of our resources at the moment, but we do want to resolve this quickly.
2. We will ask you to submit an issue via http://premier.intel.com and will supply the updated DLL via this medium.
3. Other customers who also may be using MS DLLs and run on non-SSE hardware will also be able to get an update by this method.

I hope this resolution is satisfactory to you.

Best regards -- Bruce

Thank you, Bruce. The Premier Service issue number is 302920.

I hope you can get a patch for the mkl_c_dll.lib static library out to us. I'll be looking forward to it. It would be great to not have to regress to an earlier version of MKL.

Unfortunately all the world has not yet upgraded to SSE-capable Intel processors. (If you don't have pre-P3 test machines, though, how do you test the that "mkl_def.dll" dynamic library?)

David,

I understand that there are still some PentiumII and maybe even Pentium or Pentium Pro processors out there still although it is hard to imagine. Having said that, my desktop system has an old Celeron processor but I never run it so perhaps that does not count.

We do have non-SSE machines in our development group but not in the validation group, which is a service provided to MKL. I think this rather innocuous change in the code and the consequences of it will make us look at the validation requirements anew.

Bruce

In an earlier posting I indicated that we would notify through this forum when we had new dlls that would not cause failure on pre-Pentium III processors. That code is now available and anyone who has need of this code can obtain it through http://premier.intel.com.

Bruce

Leave a Comment

Please sign in to add a comment. Not a member? Join today