ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

According to http://www.cpu-world.com/CPUs/K10/AMD-Turion%20II%20Dual-Core%20Mobile%20P540%20-%20TMP540SGR23GM.html and Wikipedia, your CPU should support SSE3. I'm not sure why it isn't showing up in cpuinfo. I do see sse4a in that output, and as far as I know, all CPUs that support SSE4a support SSE3.

To verify your machine's instructions, try to compile and execute some of the code snippets in http://svn.pointclouds.org/pcl/trunk/cmake/pcl_find_sse.cmake . If the chunk for checking SSE3 flags compiles (with the -msse3 flag) and runs on that machine, then missing SSE3 instructions are not the problem.

Could you launch the tracker in gdb and see if you can get any indication of the exact error?

According to http://www.cpu-world.com/CPUs/K10/AMD-Turion%20II%20Dual-Core%20Mobile%20P540%20-%20TMP540SGR23GM.html and Wikipedia, your CPU should support SSE3. I'm not sure why it isn't showing up in cpuinfo. I do see sse4a in that output, and as far as I know, all CPUs that support SSE4a support SSE3.

To verify your machine's instructions, try to compile and execute some of the code snippets in http://svn.pointclouds.org/pcl/trunk/cmake/pcl_find_sse.cmake . If the chunk for checking SSE3 flags compiles (with the -msse3 flag) and runs on that machine, then missing SSE3 instructions are not the problem.

Could you launch the tracker in gdb and see if you can get any indication of the exact error?

Update with some more directions on using the SSE samples:

What you want to do is basically try to run each of the different C++ snippets in the "check_cxx_source_runs" commands for the different SSE levels you want to examine after compiling them with the correct flags. I'll run through the block for SSE3 detection in that CMake file.

if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)
    set(CMAKE_REQUIRED_FLAGS "-msse3")
endif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)

check_cxx_source_runs("
    #include <pmmintrin.h>
    int main ()
    {
        __m128d a, b;
        double vals[2] = {0};
        a = _mm_loadu_pd (vals);
        b = _mm_hadd_pd (a,a);
        _mm_storeu_pd (vals, b);
        return (0);
    }"
    HAVE_SSE3_EXTENSIONS)

You should copy-paste the C++ code there (everything between #include and }) into a file (e.g. /tmp/sse3_test.cpp). You would then compile that with a command such as g++ -msse3 /tmp/sse3_test.cpp -o sse3_test to generate the file to run. The -msse3 flag was picked because it was the flag set in the block just before this check_cxx_source_runs command. If you can then successfully run ./sse3_test , then you should be fairly certain that your CPU supports SSE3. I don't have a computer without SSE3 extensions to test it on, but that should emulate exactly what those checks in that CMake script are doing.

According to http://www.cpu-world.com/CPUs/K10/AMD-Turion%20II%20Dual-Core%20Mobile%20P540%20-%20TMP540SGR23GM.html and Wikipedia, your CPU should support SSE3. I'm not sure why it isn't showing up in cpuinfo. I do see sse4a in that output, and as far as I know, all CPUs that support SSE4a support SSE3.

To verify your machine's instructions, try to compile and execute some of the code snippets in http://svn.pointclouds.org/pcl/trunk/cmake/pcl_find_sse.cmake . If the chunk for checking SSE3 flags compiles (with the -msse3 flag) and runs on that machine, then missing SSE3 instructions are not the problem.

Could you launch the tracker in gdb and see if you can get any indication of the exact error?

Update with some more directions on using the SSE samples:

What you want to do is basically try to run each of the different C++ snippets in the "check_cxx_source_runs" commands for the different SSE levels you want to examine after compiling them with the correct flags. I'll run through the block for SSE3 detection in that CMake file.

if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)
    set(CMAKE_REQUIRED_FLAGS "-msse3")
endif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)

check_cxx_source_runs("
    #include <pmmintrin.h>
    int main ()
    {
        __m128d a, b;
        double vals[2] = {0};
        a = _mm_loadu_pd (vals);
        b = _mm_hadd_pd (a,a);
        _mm_storeu_pd (vals, b);
        return (0);
    }"
    HAVE_SSE3_EXTENSIONS)

You should copy-paste the C++ code there (everything between #include and }) into a file (e.g. /tmp/sse3_test.cpp). You would then compile that with a command such as g++ -msse3 /tmp/sse3_test.cpp -o sse3_test to generate the file to run. The -msse3 flag was picked because it was the flag set in the block just before this check_cxx_source_runs command. If you can then successfully run ./sse3_test , then you should be fairly certain that your CPU supports SSE3. I don't have a computer without SSE3 extensions to test it on, but that should emulate exactly what those checks in that CMake script are doing.

Update It looks like the answer to the other question linked pointed out that NITE (a binary dependency of the tracker) was using SSSE3, not simply SSE3. As far as I can tell, your CPU doesn't support SSSE3, only SSE3. I don't know a good way of checking, but I can say that, on my Intel machines, ssse3 shows up in the /proc/cpuinfo output.

According to http://www.cpu-world.com/CPUs/K10/AMD-Turion%20II%20Dual-Core%20Mobile%20P540%20-%20TMP540SGR23GM.html and Wikipedia, your CPU should support SSE3. I'm not sure why it isn't showing up in cpuinfo. I do see sse4a in that output, and as far as I know, all CPUs that support SSE4a support SSE3.

To verify your machine's instructions, try to compile and execute some of the code snippets in http://svn.pointclouds.org/pcl/trunk/cmake/pcl_find_sse.cmake . If the chunk for checking SSE3 flags compiles (with the -msse3 flag) and runs on that machine, then missing SSE3 instructions are not the problem.

Could you launch the tracker in gdb and see if you can get any indication of the exact error?

Update with some more directions on using the SSE samples:

What you want to do is basically try to run each of the different C++ snippets in the "check_cxx_source_runs" commands for the different SSE levels you want to examine after compiling them with the correct flags. I'll run through the block for SSE3 detection in that CMake file.

if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)
    set(CMAKE_REQUIRED_FLAGS "-msse3")
endif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)

check_cxx_source_runs("
    #include <pmmintrin.h>
    int main ()
    {
        __m128d a, b;
        double vals[2] = {0};
        a = _mm_loadu_pd (vals);
        b = _mm_hadd_pd (a,a);
        _mm_storeu_pd (vals, b);
        return (0);
    }"
    HAVE_SSE3_EXTENSIONS)

You should copy-paste the C++ code there (everything between #include and }) into a file (e.g. /tmp/sse3_test.cpp). You would then compile that with a command such as g++ -msse3 /tmp/sse3_test.cpp -o sse3_test to generate the file to run. The -msse3 flag was picked because it was the flag set in the block just before this check_cxx_source_runs command. If you can then successfully run ./sse3_test , then you should be fairly certain that your CPU supports SSE3. I don't have a computer without SSE3 extensions to test it on, but that should emulate exactly what those checks in that CMake script are doing.

Update

It looks like the answer to the other question linked pointed out that NITE (a binary dependency of the tracker) was using SSSE3, not simply SSE3. As far as I can tell, your CPU doesn't support SSSE3, only SSE3. I don't know a good way of checking, but I can say that, on my Intel machines, ssse3 shows up in the /proc/cpuinfo output.