[Insight-developers] numerics code optimization issue

Lorensen, William E (Research) lorensen at crd.ge.com
Mon Aug 22 16:02:13 EDT 2005


Simon,

I checked in the pragma changes.

Bill

-----Original Message-----
From: insight-developers-bounces+lorensen=crd.ge.com at itk.org
[mailto:insight-developers-bounces+lorensen=crd.ge.com at itk.org]On Behalf
Of Simon Warfield
Sent: Friday, August 12, 2005 7:23 PM
To: Miller, James V (Research)
Cc: Insight-developers (E-mail)
Subject: Re: [Insight-developers] numerics code optimization issue


Miller, James V (Research) wrote:

>Simon, 
>
>Problems in netlib with respect to optimization has been a long standing 
>issue.  I tracked down one of these issues a while back and turned 
>off optimization for the Microsoft compiler in slamch.c with a pragma
>
>#if defined(_MSC_VER)
># pragma optimize("", off)
>#endif
>
>I did not do this is dlamch.c (probably an oversight on my part on what the 
>the netlib naming conventions are).  This probably points to a bigger issue of a 
>lack of tests.
>
>Which intel compiler were you using? Linux of Windows?
>
>I think CMake may have the capability to specify compile flags on a per
>file basis.  I think the vxl guys wanted such a capability. I would lean to 
>putting in pragmas to turn off optimization for the offending compilers in 
>those files if possible.
>
>To do it in CMake, it looks like we would need to do something like:
>
>IF(CMAKE_COMPILER_IS_GNUCC)
>  SET_SOURCE_FILES_PROPERTIES(gpfa5f.c PROPERTIES COMPILE_FLAGS -O0)
>  SET_SOURCE_FILES_PROPERTIES(dgpfa5f.c PROPERTIES COMPILE_FLAGS -O0)
>  SET_SOURCE_FILES_PROPERTIES(zlarfx.c PROPERTIES COMPILE_FLAGS -Os)
>  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w")
>ENDIF(CMAKE_COMPILER_IS_GNUCC)
>
>So we'd need to switch on each compiler and specify the COMPILE_FLAGS for each
>suspect file.  Not sure this is any easier than using pragmas.  But it may be
>necessary if we cannot turn off optimization from within the source file.
>
>Are slamch.c and dlamch.c the only ones that need to be compiled non-optimized?
>Or does slarfg.c also need it?
>
>Jim
>
>  
>
I was using the Intel compiler on linux.

I found setting file specific properties in CMakeLists.txt such as :
SET_SOURCE_FILES_PROPERTIES(slamch.c PROPERTIES COMPILE_FLAGS -O0)
SET_SOURCE_FILES_PROPERTIES(dlamch.c PROPERTIES COMPILE_FLAGS -O0)

  wasn't effective because these flags precede the flags associated with 
the build type rather than replace any other specified flags.

What was effective was using a pragma:
#if defined(__INTEL_COMPILER)
# pragma optimize("", off)
#endif

This turns of optimization until the end of the current source file or 
the next occurrence of
# pragma optimize("", on)

Keeping optimization off in the slamch.c and dlamch.c file solves the 
issue.  slarfg.c was failing only because the results from slamch.c were 
wrong, and it doesn't need fixing.
Attached are two fixed files, but the solution is basically to add the 
three above lines near the top of each of the files.

It would be great if the fix made it into the CVS repository.
--
Simon


More information about the Insight-developers mailing list