TGM*_*TGM 3 c parallel-processing openmp
我想使用Eclipse IDE在Windows 7上使用C测试openMP.我无法找到设置openMP的任何特定步骤.你能帮助我吗?
小智 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;
}
Run Code Online (Sandbox Code Playgroud)
这将像普通的C程序一样编译:
$ gcc -o OpenMPTest main.c
Run Code Online (Sandbox Code Playgroud)
它在我的机器上运行30秒:
$ time ./OpenMPTest
10000000000
real 0m30.674s
user 0m30.628s
sys 0m0.014s
Run Code Online (Sandbox Code Playgroud)
将-fopenmp选项添加到gcc可启用OpenMP支持.这就是让循环在多个线程中运行所需的全部内容.
$ gcc -o OpenMPTest main.c -fopenmp
Run Code Online (Sandbox Code Playgroud)
这使双核系统的运行时间缩短了15秒:
$ time ./OpenMPTest
10000000000
real 0m15.840s
user 0m30.123s
sys 0m0.037s
Run Code Online (Sandbox Code Playgroud)
以下是该#pragma行的作用的简要说明:
#pragma omp
Run Code Online (Sandbox Code Playgroud)
这是openmp命令的前缀.
parallel
Run Code Online (Sandbox Code Playgroud)
告诉编译器下一个语句应该并行运行.
for reduction(+: result)
Run Code Online (Sandbox Code Playgroud)
result通过加法将并行循环中的所有变量值合并为一个值.删除此结果导致打印出的最终数字不正确.
我知道你正在使用eclipse,但MSDN文档非常适合描述OpenMP: Visual C++中的OpenMP
| 归档时间: |
|
| 查看次数: |
14240 次 |
| 最近记录: |