我想在带有 Eclipse IDE 的 Windows 7 上用 C 测试 openMP。我在任何地方都找不到设置 openMP 的具体步骤。你能帮帮我吗?
最佳答案
我对 OpenMP 的了解不多,但这是我自己尝试的结果。
OpenMP 允许您告诉编译器事物应该并行运行。这是一个数到 10000000000 的示例:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
long result = 0;
long i;
#pragma omp parallel for reduction(+: result)
for (i = 0; i < 10000000000; i++) {
result++;
}
printf("%li\n", result);
return EXIT_SUCCESS;
}
这将像普通的 C 程序一样编译:
$ gcc -o OpenMPTest main.c
它在我的机器上运行 30 秒:
$ time ./OpenMPTest
10000000000
real 0m30.674s
user 0m30.628s
sys 0m0.014s
向 gcc 添加 -fopenmp
选项可启用 OpenMP 支持。这就是让循环在多个线程中运行所需的全部内容。
$ gcc -o OpenMPTest main.c -fopenmp
这将双核系统上的运行时间减半至 15 秒:
$ time ./OpenMPTest
10000000000
real 0m15.840s
user 0m30.123s
sys 0m0.037s
下面是对 #pragma
行功能的简要描述:
#pragma omp
这是 openmp 命令的前缀。
parallel
告诉编译器下一条语句应该并行运行。
for reduction(+: result)
通过加法将来自并行循环的result
变量的所有值合并为一个值。删除它会导致打印出的最终数字不正确。
我知道您使用的是 eclipse,但 MSDN 文档非常适合描述 OpenMP: OpenMP in Visual C++
关于c - 如何设置 openMP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8104560/