i'm pasting cmake code i use for sse checks. it checks for both sse1 and sse2, although similar checks can be used for sse3-5, there's also a check for msvc # check for SSE extensions include(CheckCXXSourceRuns) if( CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX ) set(SSE_FLAGS) set(CMAKE_REQUIRED_FLAGS "-msse2") check_cxx_source_runs(" #include int main() { __m128d a, b; double vals[2] = {0}; a = _mm_loadu_pd(vals); b = _mm_add_pd(a,a); _mm_storeu_pd(vals,b); return 0; }" HAS_SSE2_EXTENSIONS) set(CMAKE_REQUIRED_FLAGS "-msse") check_cxx_source_runs(" #include int main() { __m128 a, b; float vals[4] = {0}; a = _mm_loadu_ps(vals); b = a; b = _mm_add_ps(a,b); _mm_storeu_ps(vals,b); return 0; }" HAS_SSE_EXTENSIONS) set(CMAKE_REQUIRED_FLAGS) if(HAS_SSE2_EXTENSIONS) message(STATUS "Using SSE2 extensions") set(SSE_FLAGS "-msse2 -mfpmath=sse") elseif(HAS_SSE_EXTENSIONS) message(STATUS "Using SSE extensions") set(SSE_FLAGS "-msse -mfpmath=sse") endif() add_definitions(${SSE_FLAGS}) elseif(MSVC) check_cxx_source_runs(" #include int main() { __m128d a, b; double vals[2] = {0}; a = _mm_loadu_pd(vals); b = _mm_add_pd(a,a); _mm_storeu_pd(vals,b); return 0; }" HAS_SSE2_EXTENSIONS) if( HAS_SSE2_EXTENSIONS ) message(STATUS "Using SSE2 extensions") add_definitions( "/arch:SSE2 /fp:fast -D__SSE__ -D__SSE2__" ) endif() endif() 2010/3/24 Jose Gonzalez : > Thanks for the comments? > > What about  check_cxx_compiler_flag("-msse2" COMPILER_SUPPORT_SSE2)? > Have you ever tried it? > > On Tue, Mar 23, 2010 at 12:16 PM, Radu Bogdan Rusu > wrote: >> Depending on what compiler and cpu you use, some of these flags might be already turned on by default. You can check >> that using: >> >> $ gcc -Q -O3 --help=target >> >> for example. >> >> Other than that, we don't have a proper way to enable/disable different SSE optimizations for now. Most ROS packages >> cram a add_definitions ("-msse... etc") in their CMakeLists.txt. >> >> Patches to make this more standard across multiple platforms and enable/disable SSE1-5 automatically would be great! >> >> Cheers, >> Radu. >> >> Jose Gonzalez wrote: >>> Hi, >>> >>> Doing some experiments in the past with OpenCV (linux/g++) I realized >>> that there is a significant performance difference between the >>> versions compiled with autoconf and cmake. Digging in the compilation >>> scripts I came to the conclusion that the only extra flags that were >>> added by the autoconf scripts were the SSE optimizations (and openMP). >>> >>> Talking about the SSE optimizations, I can see how ROS sets the flags >>> in a similar way. When the detected platform is i686, all the SSE >>> optimizations are disabled by default (there is a comment "SSE/SSE2 >>> might probably be not available for some old AMD or VIA processors"). >>> Before finding out a solution by myself I'd like to ask the list if >>> somebody knows a standard way of testing for SSE optimizations in >>> cmake. >>> >>> Thanks, >>> Jose >>> >>> ------------------------------------------------------------------------------ >>> Download Intel® Parallel Studio Eval >>> Try the new software tools for yourself. Speed compiling, find bugs >>> proactively, and fine-tune applications for parallel performance. >>> See why Intel Parallel Studio got high marks during beta. >>> http://p.sf.net/sfu/intel-sw-dev >>> _______________________________________________ >>> ros-users mailing list >>> ros-users@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/ros-users >>> _______________________________________________ >>> ros-users mailing list >>> ros-users@code.ros.org >>> https://code.ros.org/mailman/listinfo/ros-users >> >> -- >> | Radu Bogdan Rusu | http://rbrusu.com/ >> _______________________________________________ >> ros-users mailing list >> ros-users@code.ros.org >> https://code.ros.org/mailman/listinfo/ros-users >> > _______________________________________________ > ros-users mailing list > ros-users@code.ros.org > https://code.ros.org/mailman/listinfo/ros-users >