获取openmp以创建多个线程

时间:2015-02-08 05:14:00

标签: c++ parallel-processing openmp

每当我尝试打印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];
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

首先测试,我建议你使用它:

#pragma omp parallel for private(...) shared(...) schedule(...) num_threads (X)

其中&#34; X&#34;是要创建的线程数。从理论上讲,前一行必须具有与你类似的效果,但有时候C ++会很挑剔(特别是&#34; parallel&#34;子句)

不过,也许不是你的情况,但要小心使用&#34;文本键&#34; {}。 OpenMP的功能可能会有所不同,具体取决于是否将它们添加到代码块中。