我目前正在尝试通过与 组合使我的矩阵向量乘法函数与 BLAS 进行比较#pragma omp for
,#pragma omp simd
但与仅使用 for 构造相比,它没有得到任何加速改进。如何使用 OpenMP 的 SIMD 构造正确矢量化内部循环?
vector dot(const matrix& A, const vector& x)
{
assert(A.shape(1) == x.size());
vector y = xt::zeros<double>({A.shape(0)});
int i, j;
#pragma omp parallel shared(A, x, y) private(i, j)
{
#pragma omp for // schedule(static)
for (i = 0; i < y.size(); i++) { // row major
#pragma omp simd
for (j = 0; j < x.size(); j++) {
y(i) += A(i, j) * x(j);
}
}
}
return y;
}