gpt4 book ai didi

c++ - OpenMP 仅使用一个线程

转载 作者:太空宇宙 更新时间:2023-11-04 04:17:00 26 4
gpt4 key购买 nike

我在使用 openmp 时遇到了一些令人沮丧的问题。当我运行以下代码时,它似乎只在一个线程上运行。

    omp_set_num_threads(8);    
#pragma omp parallel for schedule(dynamic)
for(size_t i = 0; i < jobs.size(); i++) //jobs is a vector
{
std::cout << omp_get_thread_num() << "\t" << omp_get_num_threads() << "\t" << omp_in_parallel() << std::endl;
jobs[i].run();
}

这打印...

0 1 1

对于每一行。

我可以使用 top 看到 openmp 正在生成与我拥有的进程任务集一样多的线程。它们在运行时大多处于空闲状态。该程序已通过 gcc 的 -fopenmp 标志进行编译和链接。我正在使用 redhat 6。我还尝试在 pragma 中使用 num_threads(8) 参数,但没有任何区别。该程序与另一个也使用 openmp 的库链接,所以这可能就是问题所在。有谁知道什么可能导致这种行为?在我过去所有的 openmp 经验中,它一直有效。

最佳答案

你能打印你的 jobs.size() 吗?

我做了一个快速测试,它确实有效:

#include <stdio.h>
#include <omp.h>
#include <iostream>

int main()
{
omp_set_num_threads(2);

#pragma omp parallel for ordered schedule(dynamic)
for(size_t i = 0; i < 4; i++) //jobs is a vector
{
#pragma omp ordered
std::cout << i << "\t" << omp_get_thread_num() << "\t" << omp_get_num_threads() << "\t" << omp_in_parallel() << std::endl;
}
return 0;
}

我得到了:

icpc -qopenmp test.cpp && ./a.out

0 0 2 1
1 1 2 1
2 0 2 1
3 1 2 1

关于c++ - OpenMP 仅使用一个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50640265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com