每当我尝试打印threadID
时,无论我在哪里放置print语句,它都会打印threadId = 0
。看起来只创建了一个线程,但为什么呢?我不知道自己做错了什么。另外,我已经检查了num_t = 16
。我还确保在编译时使用-fopenmp
。
omp_set_num_threads(num_t);
#pragma omp parallel shared(a,b,c) private(i,j,k) num_threads(num_t)
{
#pragma omp for schedule(static)
for (int i = 0; i < m; i++)
{
std::cout << omp_get_thread_num()<< "\n";
for (int j = 0; (j < n); j++)
{
c[i + j*m] = 0.0;
for (int k = 0; k < q; k++)
{
c[i+j*m] += a[i*q + k]*b[j*q + k];
}
}
}
}
答案 0 :(得分:0)
首先测试,我建议你使用它:
#pragma omp parallel for private(...) shared(...) schedule(...) num_threads (X)
其中&#34; X&#34;是要创建的线程数。从理论上讲,前一行必须具有与你类似的效果,但有时候C ++会很挑剔(特别是&#34; parallel&#34;子句)
不过,也许不是你的情况,但要小心使用&#34;文本键&#34; {}。 OpenMP的功能可能会有所不同,具体取决于是否将它们添加到代码块中。