【发布时间】:2015-03-05 20:49:38
【问题描述】:
我正在尝试开始在 C 中使用基本的 OpenMP 功能。我对“omp parallel for”的基本理解使我相信以下内容应该在线程之间分配循环的以下迭代,并且应该同时执行。我得到的输出如下。代码如下。我的 hello world 示例中是否缺少一些微妙的东西?
来自 omp 线程 0 的 Hello World 来自 omp 线程 0 的 Hello World 来自 omp 线程 0 的 Hello World 来自 omp 线程 0 的 Hello World 来自 omp 线程 0 的 Hello World 来自 omp 线程 0 的 Hello World 等等。
int HelloFunc()
{
int i;
int numthreads = 8;
#pragma omp parallel for default(none) num_threads(numthreads) private(i)
for (i = 0; i < 100; i++)
{
int tid = omp_get_thread_num();
printf("Hello world from omp thread %d\n", tid);
}
return -1;
}
int main()
{
int result = HelloFunc();
}
【问题讨论】:
-
您的计算机可能只使用一个线程来运行该程序。 OMP 不会强制它使用多个线程运行,它只是告诉编译器它可以并设置必要的环境来实现它。
-
我想如果你把它作为一个帖子发布,我可以回答这个问题,因为它回答了我的问题。没有办法强制我从您的回答中收集到这种行为?
-
您可以通过设置
OMP_NUM_THREADS环境变量来请求OpenMP 使用特定数量的线程。最大线程数可以从代码内部用omp_get_max_threads()查询到
标签: c multithreading for-loop openmp parallel-for