如何在CodeBlocks C中使用SIMD指令?

时间:2014-09-26 18:23:54

标签: c

我正在尝试在C编程中使用SIMD指令。我正在使用CodeBlocks写入。

我尝试过本教程: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:\ Things \ New Text Document.c | 2 |警告:不推荐使用属性((模式))指定矢量类型[-Wattributes] | C:\ Things \ New Text Document.c | 2 |警告:使用属性((vector_size))代替[-Wattributes] | C:\ Things \ New Text Document.c | 2 | error:mode'V4SF'适用于不合适的类型| || ===构建失败:1个错误,2个警告(0分钟,0秒(秒))=== |

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

我猜你的CPU是x86,但是Windows应该有办法验证它。使用Linux,您可以运行类似grep avx2 /proc/cpuinfo

的内容

答案 2 :(得分:0)

该学费有一个错误,即typedef原始日期类型应为float。

通过示例进行编译如下

#include <stdio.h>
typedef float v4sf __attribute__((vector_size(16)));

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]);
}