我想使用Eclipse IDE在Windows 7上使用C测试openMP。我无法找到设置openMP的任何特定步骤。你能救我吗?
答案 0 :(得分:6)
我对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
将-fopenmp
选项添加到gcc可启用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++
答案 1 :(得分:2)
在Eclipse中,您需要在项目配置中设置以下参数:
C/C++ Build -> Settings -> Includes: add gomp
C/C++ Build -> Settings -> Miscellaneous -> Other Flags: add -fopenmp
您还需要为MinGW安装openmp二进制文件: