インテル® コンパイラーで配列表記と基本関数を使用してベクトル化できる 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]));
}
コメントをお待ちしております。