0

私はこの非常に単純な並列コードを使用して、恥ずかしいほど並列である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); 
} 

Intel C++ コンパイラ xe 15.0 を使用し、288 x 288 行列の sgemm (行列乗算) を計算する Visual Studio では、コア = 1 で 350 マイクロ秒、コア = 4 で 1177 マイクロ秒が得られます。これは、シーケンシャル コードのように見えます。インテル® MKL プロパティを Parallel (シーケンシャルでもテスト済み) に設定し、言語設定を Generate Parallel Code (/Qopenmp) に設定しました。とにかくこれを改善するには?クアッドコアの haswell プロセッサで実行しています

4

1 に答える 1