2012-02-27 68 views
1

我試圖獲得以下代碼與「mpiexec -n 4 myprogram」命令一起運行。使用mingw64編譯mpi項目

#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編譯的程序不兼容?

回答

1

如果將其構建爲控制檯程序,程序將運行,完成並立即關閉,因爲程序可能沒有發送命令來打開控制檯。

如果再次運行它,這次首先進入控制檯並從命令行運行它,控制檯將保持打開狀態,因爲它作爲一個獨立進程運行,而不是綁定到您的程序(如同雙擊運行程序時)。

至於沒有並行運行,請確保在編譯和鏈接階段都有標誌-fopenmp。

+0

控制檯不是問題。正如我所說的,該程序完全像x86一樣運行,但是作爲x64,它什麼也不做。我也可以在沒有mpiexec的情況下運行x64 exe。例如:「mpiexec -n 4 myprogram」(x86)和「myprogram」(x64)正在工作,但「mpiexec -n 4 myprogram」(x64)不是 – Chris 2012-02-27 19:41:27

+0

@Chris我完全錯過了;在這種情況下,我很遺憾沒有合適的答案。 – Rabbit 2012-02-27 19:51:57