Я использовал директиву openMP для функции matmul, она не работает - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь использовать openMP в функции matmul, но она не работает ...

В этой части я попробовал все, но на завершение уходит более 60 минут, и это не сокращает время.
Что я должен делать?

int matmul( int l, int m, int n, float *A, float *B, float *C )
{
    int i, j, k;
    omp_set_dynamic(0); 
    #pragma omp parallel for shared(A,B,C) private(i, k, j) num_threads(4)
    for( i=0; i<l; i++ )                // Loop over the rows of A and C.
      for( k=0; k<n; k++ )              // Loop over the columns of B and C
      {
        // Initialize the output element for the inner
        // product of row i of A with column j of B
        C[i*n+k] = 0;       
        for( j=0; j<m; j++ )                // Loop over the columns of A and C
        {
          C[i*n+k] += A[i*m+j] * B[j*n+k];  // Compute the inner product
        }
      }
    }
}   // Added by edit!

Может ли кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 07 сентября 2018

Что я должен делать?

Используйте оптимизированный материал из библиотеки BLAS вместо того, чтобы пытаться написать свой собственный.

Оптимизация умножения матриц нетривиальна (вы еще не рассматривали векторизацию или мозаику, и оба необходимы для достижения высокой производительности).

Если вы используете процессор Intel, Intel Math Kernel Library теперь бесплатна для любого использования и сильно оптимизирована, или есть другие свободно доступные реализации.

Я понимаю, что чтение руководства менее увлекательно, чем написание кода, но вв этом случае он также намного эффективнее!

(на случай, если это кому-нибудь важно, я работаю в Intel, но этот совет носит общий характер :-))

...