【发布时间】:2015-06-08 11:33:07
【问题描述】:
我有这段代码(如下所述)用于并行化矩阵向量乘法。但是每当我运行它时,我发现它只在一个线程上执行(即使我指定了 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]);
}
}
【问题讨论】:
-
您能否另外提供
m和chunk的电话号码 -
嗨 @Henkersmann m 是矩阵 A 的行数,比如 20。而块是 (m/number-of-threads),如果我将线程数设置为 4,则为 5 . 我更新了代码以反映这一点。
-
请注意,
schedule(static)默认的块大小为#iterations / #threads,因此您不必显式提供chunk。
标签: c++ multithreading parallel-processing openmp mex