這是什麼意思?
這意味着您可能需要查看源代碼並嘗試瞭解其工作原理。高性能馬克已經指向正確的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啓動程序執行,在大多數情況下稱爲mpiexec
或mpirun
。它將進程數作爲參數。如果不通過mpiexec
運行代碼,大多數MPI實現行爲,如果該程序是使用
mpiexec -np 1 ./program
1
開始甚至沒有,所以的if
條件的第一部分的計算結果爲真,並中止代碼被執行。
您應該做的是在終端上使用mpiexec -np <# of procs> executable
運行程序,其中<# of procs>
是所需的MPI進程數,executable
是可執行文件的名稱。 <# of procs>
應該是偶數,並且應該除以2500000
。我建議去2
,4
或8
。 10
也可以。除非您的開發系統具有多核CPU或/和多個CPU,否則您不會看到速度有任何改進。
您提到Code :: Blocks。有關如何通過mpiexec
運行MPI程序的一些想法,請參閱here。
好,我發現什麼問題,有代碼可選配件 /*****可選:打印每一個素如發現 這樣的,但我仍然不知道怎樣才能獲得處理器number.For例如我希望看到我使用3或5或10處理器時有多快 – allstar