- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I've encountered a "nice" problem where the binary dll created with ivf 11.0 (all versions) crashes on two Athlon XP (Processor x86 Family 6 Model 10 Stepping 0 AuthenticAMD ~1913 Mhz) computers, either during LoadLibrary (there is some minimal processing in DllMain) or during the first subsequent call. It either produces EXCEPTION_ACCESS_VIOLATION or EXCEPTION_ILLEGAL_INSTRUCTION.
The problem seems to be restricted to those AMD Athlon computers (95% of the company computers are Intel-based), and occurs in both Release and Debug configurations (default optimization levels, "Use Intel extensions" set to "None"). Run-time library is statically linked, but both debug multithreaded and multithreaded exhibit the same behavior.
To me, it seems that either compiler does SSE2 by default, or at least some functions in the run-time library in 11.0 are built with SSE2 instructions, which are apparently not supported by Athlon XP. However, a small test exe runs without problems. The dll crashes on quite trivial places (either DllMain or a small function that sets one global variable), not during anything special.
Does it light a bulb for someone?
The problem seems to be restricted to those AMD Athlon computers (95% of the company computers are Intel-based), and occurs in both Release and Debug configurations (default optimization levels, "Use Intel extensions" set to "None"). Run-time library is statically linked, but both debug multithreaded and multithreaded exhibit the same behavior.
To me, it seems that either compiler does SSE2 by default, or at least some functions in the run-time library in 11.0 are built with SSE2 instructions, which are apparently not supported by Athlon XP. However, a small test exe runs without problems. The dll crashes on quite trivial places (either DllMain or a small function that sets one global variable), not during anything special.
Does it light a bulb for someone?
Link Copied
6 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Quoting - Jugoslav Dujic
Does it light a bulb for someone?
RTFM, page 7 of Release notes:
Note: In version 11, the IA-32 architecture default for code generation has changed to assume that Intel Streaming SIMD Extensions 2 (Intel SSE2) instructions are supported by the processor on which the application is run.
I guess that answers my own question...
--
Edit: P.S. Do I earn status points by answering my own questions? :-P
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Quoting - Jugoslav Dujic
Edit: P.S. Do I earn status points by answering my own questions? :-P
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Is there a good way to check if the processor running a code compiled with SSE2 can handle the instruction set? We don't want someone using our code on an old processor to get a run-time exception.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
You can write a small C routine that uses the CPUID instruction intrinsic to retrieve the information.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Quoting - Steve Lionel (Intel)
You can write a small C routine that uses the CPUID instruction intrinsic to retrieve the information.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I suppose one could also write a small Fortran program that used some SSE2 instructions and run it - if it dies, then report the error to the user.
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page