gpt4 book ai didi

c - 如何在 OpenMP 中 fork 大量线程?

转载 作者:行者123 更新时间:2023-11-30 15:24:54 26 4
gpt4 key购买 nike

出于某种原因,我需要给我的处理器施加压力,并且我想在 OpenMP 中 fork 很多线程。在 pthreads 中,您可以使用 for 循环轻松地完成此操作,因为它 fork 线程只是一个函数调用。但在 OpenMP 中你必须有这样的东西:

#pragma omp parallel sections
{
#pragma omp section
{
//section 0
}
#pragma omp section
{
//section 1
}
.... // repeat omp section for n times
}

我只是想知道是否有更简单的方法在 OpenMP 中 fork 大量线程?

最佳答案

您几乎不需要做任何特别的事情。。只需为计算密集型任务编写代码并将其放入并行区域即可。然后指出您想要的线程数。为此,您可以使用 omp_set_dynamic(0)禁用动态线程(这有助于实现您想要的线程数量,但仍然无法保证),然后 omp_set_num_threads(NUM_THREADS)来指示您想要的线程数。

然后每个线程将克隆您在代码中指定的任务。就这么简单。

const int NUM_THREADS = 100;
omp_set_dynamic(0);
omp_set_num_threads(NUM_THREADS);
#pragma omp parallel
{
// How many threads did we really get? Let's write it once only.
#pragma omp single
{
cout << "using " << omp_get_num_threads() << " threads." << std::endl;
}
// write some compute-intensive code here
// (be sure to print the result at the end, so that
// the compiler doesn't throw away useless instructions)
}

关于c - 如何在 OpenMP 中 fork 大量线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28161498/

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