【发布时间】:2013-09-24 10:16:18
【问题描述】:
有一个循环:
long a* = new long[32];
long b* = new long[32];
double c* = new double[32];
double d = 3.14159268;
//set a, b and c arrays
//.....
for(int i = 0; i < 32; i ++){
d+= (a[i] % b[i])/c[i];
}
我如何使用英特尔 C++ 向量化功能(例如 #pragma simd 或 sse- 指令)来实现这个循环?
如果我写:
#pragma simd reduction(+:c)
for(int i = 0; i < 32; i ++){
d+= (a[i] % b[i])/c[i];
}
然后速度不会增加:(
【问题讨论】:
-
为什么要将结果投射到
double? -
该代码无法编译。也许你的意思是
(double)(a[i] % b[i])? -
@us2012:这个结果必须是双倍的。示例更正为示范。
-
@interjay 是的,抱歉,示例已更正。
-
您是否添加了适当的编译器开关?
标签: c intel vectorization