我正在使用 Mac OSX 10.8.4 并用 C 编程。我尝试使用 openmp,并且正在使用 gcc-mp-4.7 进行编译。我在 bash 中工作。目前我有一个可执行文件(我将在程序中调用executable1),我试图通过在openmp并行for循环中使用系统调用来并行运行它。示例代码如下:
my_omp.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <omp.h>
void main() {
int n = 100;
double var1 = 65.4;
char place[100] = "/under/a/rock";
double var2 = 4.5e4;
double var3;
char program[200];
int i;
#pragma omp parallel for private(program,var3)
for (i=0; i<=n; i++) {
var3 = var1*pow(var2,i);
sprintf(program,"./executable1 %.15e %s %.15e %d", var1, place, var2, var3, i);
printf("%s \n", program);
system(program);
}
}
我使用 编译程序gcc-mp-4.7 -fopenmp my_omp.c
,然后运行新编译的可执行文件(与 exectuable1 不同的名称)。
似乎发生的事情是 8 个(我相信这是我认为我拥有的“cpus”openmp 的数量)的打印语句将出现在标准输出(终端)中,然后它将只运行可执行文件1 的一次调用,然后当它完成它打印出另一个 printf 程序行,然后运行另一个executable1,直到它完成for循环(我知道这是因为executable1非常冗长,很明显是两个以打印到stdout的数字运行的地方同步并多次出现)。
所以看起来 printf 可能是并行运行的,但由于某种原因 system() 命令不是?有没有人有任何想法?
谢谢你的尽心帮助。
更新:
我已经让这个确切的代码在具有不同编译器的 lunix 发行版上正常运行,我将寻找一个更好的编译器以在 Mac OSX 中使用,看看它是否有效。