2014-09-26 54 views
-1

我想在我的C编程中使用SIMD指令。我使用的代码块中写如何在CodeBlocks C中使用SIMD指令?

我试过下面这个教程:https://www.kernel.org/pub/linux/kernel/people/geoff/cell/ps3-linux-docs/CellProgrammingTutorial/BasicsOfSIMDProgramming.html

我试图做的整数和浮点SIMD加法,减法等

然而,代码解释该页面在CodeBlocks/C中不起作用。我如何在这里使用SIMD?

#include <stdio.h> 
typedef int v4sf __attribute__ ((mode(V4SF))); // vector of four single floats 

union f4vector 
{ 
    v4sf v; 
    float f[4]; 
}; 
int main() 
{ 
    union f4vector a, b, c; 

    a.f[0] = 1; a.f[1] = 2; a.f[2] = 3; a.f[3] = 4; 
    b.f[0] = 5; b.f[1] = 6; b.f[2] = 7; b.f[3] = 8; 

    c.v = a.v + b.v; 

    printf("%f, %f, %f, %f\n", c.f[0], c.f[1], c.f[2], c.f[3]); 
} 

C:\观光\新文本Document.c | 2 |警告:指定矢量类型与属性((模式))已被弃用[-Wattributes] | C:\ Things \ New Text Document.c | 2 |警告:使用属性((vector_size))代替[-Wattributes] | C:\ Things \ New Text Document.c | 2 | error:模式'V4SF'适用于不适当的类型| || ===构建失败:1个错误,2个警告(0分钟,0秒)=== |

+0

CodeBlocks与您用来键入代码的键盘品牌相关。什么是相关的?代码。显示你的代码,以及你得到的任何错误。 – 2014-09-26 18:37:45

+0

我正在使用教程中的代码。具体而言, “溶液计划(2-1)” 我正的误差是马上该 “__vector符号int VA =(__vector符号的int){1,2,3,4};” 未被识别为试图定义任何变量。 – elemein 2014-09-26 18:42:13

+0

寻求调试帮助的问题(“为什么不是这个代码工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身中重现问题所需的最短代码。 – 2014-09-26 18:43:33

回答

1

您试图使用的教程是针对单元CPU(即Playstation 3)的SIMD编程。它不适用于x86编程。

使用适用于您正在使用的编译器(GCC,Clang或Visual C++)的教程。

+0

你是对的,我没有注意到。 于是我就抬起头来对GCC的教程(如代码块使用GCC)在使用本教程:http://ds9a.nl/gcc-simd/example.html 我只是简单的复制和粘贴正是他做了什么的前两个代码块的顺序正确,然后得到以下错误: (已添加到主操作) – elemein 2014-09-26 19:15:05

0

在编译和/或执行之前,您需要确保您的CPU支持要使用的向量类型内在函数和向量指令。

我猜你的CPU是x86,但Windows应该有办法来验证。有了Linux,你可以运行一些类似于grep avx2 /proc/cpuinfo的东西。