2012-10-22 25 views

回答

0

的常用方法MPI程序的執行過程中獲得的進程數是調用子程序MPI_COMM_SIZE,這樣

call MPI_COMM_SIZE(MPI_COMM_WORLD, num_procs, ierr) 

其中num_procs是一個整數,它將等於調用完成後的進程數。我預計你所說的任務與我所說的處理相同。

請注意,我用Fortran編寫過調用,C和C++綁定也可用,儘管後者似乎已經不再受歡迎。

+0

好,我發現什麼問題,有代碼可選配件 /*****可選:打印每一個素如發現 這樣的,但我仍然不知道怎樣才能獲得處理器number.For例如我希望看到我使用3或5或10處理器時有多快 – allstar

1

這是什麼意思?

這意味着您可能需要查看源代碼並嘗試瞭解其工作原理。高性能馬克已經指向正確的MPI調用,如果你看一下main函數的開頭,你會看到這幾行:

MPI_Comm_size(MPI_COMM_WORLD,&ntasks); 
if (((ntasks%2) !=0) || ((LIMIT%ntasks) !=0)) { 
    printf("Sorry - this exercise requires an even number of tasks.\n"); 
    printf("evenly divisible into %d. Try 4 or 8.\n",LIMIT); 
    MPI_Finalize(); 
    exit(0); 
    } 

顯然,這需要一個偶數MPI進程的(否則ntasks%2 != 0)這個數字也應該除以LIMIT(在這種情況下等於2500000)。 MPI程序應通過MPI啓動程序執行,在大多數情況下稱爲mpiexecmpirun。它將進程數作爲參數。如果不通過mpiexec運行代碼,大多數MPI實現行爲,如果該程序是使用

mpiexec -np 1 ./program 

1開始甚至沒有,所以的if條件的第一部分的計算結果爲真,並中止代碼被執行。

您應該做的是在終端上使用mpiexec -np <# of procs> executable運行程序,其中<# of procs>是所需的MPI進程數,executable是可執行文件的名稱。 <# of procs>應該是偶數,並且應該除以2500000。我建議去24810也可以。除非您的開發系統具有多核CPU或/和多個CPU,否則您不會看到速度有任何改進。

您提到Code :: Blocks。有關如何通過mpiexec運行MPI程序的一些想法,請參閱here