我正在尝试使用“mpiexec -n 4 myprogram”命令运行以下代码。
#include <stdio.h>
#include "mpi.h"
#include <omp.h>
int main(int argc, char *argv[]) {
int numprocs, rank, namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];
int iam = 0, np = 1;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Get_processor_name(processor_name, &namelen);
#pragma omp parallel default(shared) private(iam, np)
{
np = omp_get_num_threads();
iam = omp_get_thread_num();
printf("Hello from thread %d out of %d from process %d out of %d on %s\n",
iam, np, rank, numprocs, processor_name);
}
MPI_Finalize();
}
我正在使用win7 x64,mpich2 x64,eclipse x64和mingw64(rubenvb build)。它编译得很好,也可以在eclipse环境中运行(但只有一个进程),但是在命令行上它立即关闭而没有结果或错误。如果我将它编译为x86 exe它按预期运行。哪有错? mpi是否与mingw64编译的程序不兼容?
答案 0 :(得分:1)
如果您将其构建为控制台程序,程序将运行,完成然后立即关闭,因为程序可能没有发送命令来保持控制台打开。
如果你再次运行它,这次首先进入控制台并从命令行运行它,控制台将保持打开状态,因为它作为一个单独的进程运行,而不是绑定到你的程序(就像这样)当双击运行程序时。)
至于不并行运行,请确保在编译和链接阶段都有-fopenmp标志。