OpenMP矩阵向量乘法只在一个线程上执行

OpenMP Matrix-Vector Multiplication Executes on Only One Thread

本文关键字:一个 线程 执行 向量 OpenMP      更新时间:2023-10-16

我有这段代码(如下所示)用于并行化矩阵-向量乘法。但是每当我运行它时,我发现它只在一个线程上执行(即使我指定了4个线程)。我如何将并行代码的部分分开在单独的线程上运行?任何帮助都将非常感激。由于

int nthreads;
nthreads = 4;    
omp_set_num_threads(nthreads);
chunk = m/nthreads;
  #pragma omp parallel for private(i,j,H) schedule(static,chunk)
  for (i=0; i<m; i++ ){ 
    C[i]=0;
     for (j=0; j<p; j++) {
       int H = omp_get_thread_num();
       C[i] += (A[i+(j*m)]*B[j]);
   }              
 }    

您是否将此片段包含在#pragma omp parallel{...}中,或者您可能缺少parallel这个词?

您必须指定线程数。您可以使用OMP_NUM_THREADS环境变量来执行此操作。

您确定您正在编译启用Openmp吗?如果是这样,编译器应该抛出一个错误,因为变量H被声明在包含private(i, j, H)子句的并行区域的范围内。

根据您的编译器,您应该添加相应的OpenMp标志,例如gcc的-fopenmp。您还可以通过调用omp_get_num_threads()在运行时检查可用线程的数量。

相关文章: