2014-09-26 53 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的東西。