> I'll try it. My only fear with check_cxx_compiler_flag was that I > guess having the flag available in the compiler doesn't necessarily > means your processor supports it. exactly, that's why you have to check support for SSE by running a test program rosen, 2010/3/24 Jose Gonzalez : > Thanks for the feedback again! > > I'll try it. My only fear with check_cxx_compiler_flag was that I > guess having the flag available in the compiler doesn't necessarily > means your processor supports it. > > > On Tue, Mar 23, 2010 at 12:56 PM, Rosen Diankov wrote: >> 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 >>> >> _______________________________________________ >> 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 >