正在获取openmp以创建多个线程

Getting openmp to create more than one thread

本文关键字:线程 创建 获取 openmp      更新时间:2023-10-16

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

要首先进行测试,我建议您使用以下方法:

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

其中"X"是要创建的线程数。理论上,前一行的效果一定与您的类似,但C++有时可能会挑剔(特别是使用"并行"子句)

顺便说一句,也许不是你的情况,但要小心使用"文本键"{}。OpenMP的功能可能会有所不同,这取决于是否将它们添加到代码块中。