我试图找到合适的材料,清楚地解释编写 C/C++ 源代码的不同方法,这些源代码可以由英特尔编译器使用数组表示法和基本函数进行矢量化。网上的所有资料都举了一些简单的例子:saxpy、reduction 等。但是缺乏关于如何向量化具有条件分支或包含具有循环依赖的循环的代码的解释。
例如:假设我想使用不同的数组运行顺序代码。矩阵以主要行格式存储。矩阵的列由 compute_seq() 函数计算:
#define N 256
#define STRIDE 256
__attribute__((vector))
inline void compute_seq(float *sum, float* a) {
int i;
*sum = 0.0f;
for(i=0; i<N; i++)
*sum += a[i*STRIDE];
}
int main() {
// Initialize
float *A = malloc(N*N*sizeof(float));
float sums[N];
// The following line is not going to be valid, but I would like to do somthing like this:
compute_seq(sums[:],*(A[0:N:1]));
}
任何意见表示赞赏。