如何设置openMP

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