如何设置openMP

时间:2011-11-12 12:56:12

标签: c parallel-processing openmp

我想使用Eclipse IDE在Windows 7上使用C测试openMP。我无法找到设置openMP的任何特定步骤。你能救我吗?

2 个答案:

答案 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二进制文件:

TDM-GCC