我是openmp的新手。以下是环境。
操作系统:Mac OSX Mavericks我写了以下openmp程序
#include < stdio.h>
#include < omp.h>
int main()
{
#pragma omp parallel
{
int i=omp_get_thread_num();
printf("hello (%d)",i);
printf("world (%d)",i);
}
}
我编译了上面的程序并得到错误,找不到omp.h并找不到lgomp。因此,我在项目属性中添加了一个包含路径,其中包含/opt/local/lib/gcc48/gcc/x86_64-apple-darwin13/4.8.2/include和一个库路径/ opt / local / lib / gcc48。 include路径有omp.h文件,库路径有libomp.o文件。
我通过项目属性在链接器和编译器选项中包含-fopenmp选项。它正在使用gcc -I / opt / local / lib / gcc48 / gcc / x86_64-apple-darwin13 / 4.8.2 / include -O0 -g3 -Wall -c -fmessage-length = 0 -fopenmp -MMD -MP进行编译 - MF“src / OpenMPCourseExamples.d”-MT“src / OpenMPCourseExamples.d”-o“src / OpenMPCourseExamples.o”“../src/OpenMPCourseExamples.c”并使用命令“gcc -L / opt / local /进行链接lib / gcc48 -fopenmp -o“OpenMPCourseExamples”./ src / OpenMPCourseExamples.o“。
使用上面的命令,它编译时没有错误但有警告 - “警告:未知的编译指示被忽略[-Wunknown-pragmas] #pragma omp parallel”。
另外,我在启动属性中设置了一个环境变量,其中OMP_NUM_THREADS = 4。我运行了使用上述警告编译的程序。我只得到“你好(0)世界(0)”。我的印象是我应该开始四个线程并且应该在某些顺序中看到“hello(1)world(1)hello(2)world(2)hello(3)world(3)”的其他输出。现在,这是我的以下问题。
答案 0 :(得分:2)
最好的步骤适用于openmp,macports gcc编译器,mac osx mavericks中的eclipse CDT。
上述步骤对我有用。
答案 1 :(得分:1)
MacPorts使用--program-suffix=-mp-${major}
配置GCC构建过程,因此所有编译器可执行文件都具有-mp-4.8
后缀。当您致电gcc
时,您最终使用Apple的Clang编译器,该编译器不支持OpenMP,因此无法识别-fopenmp
选项和#pragma omp ...
。
您必须对项目设置进行以下更改:
gcc-mp-4.8
gcc-mp-4.8
-fopenmp
的存在会自动添加它们。