我有这个非常简单的并行代码,我用它来学习令人尴尬的并行 openmp。但是,我没有得到预期的超线性或至少线性的性能提升。
#pragma omp parallel num_threads(cores)
{
int id = omp_get_thread_num();
cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, row, column, column, 1.0, MatrixA1[id], column, MatrixB[id], column, 0.0, Matrixmultiply[id], column);
}
在使用英特尔 c++ 编译器 xe 15.0 并计算 288 x 288 矩阵的 sgemm(矩阵乘法)的 Visual Studio 上,我得到 350 微秒的核心 = 1 和 1177 微秒的核心 = 4,这看起来就像一个顺序代码。我将英特尔 MKL 属性设置为并行(也使用顺序测试),将语言设置设置为生成并行代码 (/Qopenmp)。无论如何要改善这一点?我在四核 haswell 处理器中运行