我在matmul函数上使用openMP指令它不起作用

问题描述 投票:1回答:1

我试图在matmul函数中使用openMP,但它不起作用...

在这部分我尝试了一切,但它需要超过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!

谁能帮我这个?

c openmp openmpi
1个回答
2
投票

我应该做些什么?

使用来自BLAS library的优化matmul,而不是尝试编写自己的matmul。

优化矩阵乘法并非易事(您还没有考虑过矢量化或平铺,两者都需要获得高性能)。

如果您使用的是英特尔处理器,Intel Math Kernel Library现在可供任何人免费使用,并且经过高度优化,或者还有其他免费提供的实现。

我意识到阅读手册不如编写代码有趣,但在这种情况下,它也更有效!

(如果对任何人都很重要,我会为英特尔工作,但这个建议完全是一般性的:-))

© www.soinside.com 2019 - 2024. All rights reserved.