1

环境细节:

机器:在 VMware 播放器的虚拟机中运行 Centos 64 位的 Core i5 M540 处理器。GCC:4.8.2 从源代码 tar 构建。

问题: 我正在尝试更多地了解 C/C++ 中的 SIMD 函数,为此我创建了以下 helloworld 程序。

#include <iostream>
#include <pmmintrin.h>

int main(void){
    __m128i a, b, c;
    a = _mm_set_epi32(1, 1, 1, 1);
    b = _mm_set_epi32(2, 3, 4, 5);
    c = _mm_add_epi32(a,b);
    std::cout << "Value of first int: " << c[0];
}

当我使用以下命令查看它的程序集输出时,我没有看到 SIMD 指令。

g++ -S -I/usr/local/include/c++/4.8.2 -msse3 -O3 hello.cpp

生成的程序集示例:

movl    $.LC2, %esi
movl    $_ZSt4cout, %edi
call    _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
movabsq $21474836486, %rsi
movq    %rax, %rdi
call    _ZNSo9_M_insertIxEERSoT_
xorl    %eax, %eax

请告知编写或编译 SIMD 代码的正确方法。

谢谢!!

4

1 回答 1

2

看起来您的编译器正在优化对 的调用_mm_foo_epi32,因为所有值都是已知的。尝试从用户那里获取所有相关输入,看看会发生什么。

-O0或者,使用而不是编译,-O3看看会发生什么。

于 2013-10-24T04:55:38.613 回答