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

时间:2015-06-08 11:33:07

标签: c++ multithreading parallel-processing openmp mex

我有这个代码(如下所述)用于并行化矩阵向量乘法。但每当我运行它时,我发现它只在一个线程上执行(即使我指定了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]);
   }              
 }    

3 个答案:

答案 0 :(得分:2)

您是否在parallel中添加了此代码段,或者您可能遗漏了public void GetJson() { using (StreamReader r = new StreamReader("filename.json")) { string data = r.ReadToEnd(); List<Step> steps = JsonConvert.DeserializeObject<List<Step>>(data); } } public class Step { public int divisor { get; set; } public int dividend { get; set; } public int product { get; set; } public int quotient { get; set; } public int remainder { get; set; } } 这个词?

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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