2012-08-03 46 views
0

我是新手在這裏..
我有我的代碼有問題,我不知道如何使MPI選擇題..
如果有2個功能過程中,
1 。處理一個
2.進程B
3.退出
「你想做什麼?答案:」
如果我跑我用1個備代碼(程序mpiexec -n 1),是沒有問題的。
但是,如果多個設備,它會得到錯誤。我想所有的'身份證'做這個過程..大師和奴隸。MPI多選

MPI_Init(&argc,&argv); 
MPI_Comm_size(MPI_COMM_WORLD, &n); 
MPI_Comm_rank(MPI_COMM_WORLD, &myid); 
MPI_Get_processor_name (namenode, &namelen); 
int answer; 
if(myid==0){ 
    while(answer!=3){ 
     cout<<"1.Process A"<<endl; 
     cout<<"2.Process B"<<endl; 
     cout<<"3.exit"<<endl; 
     cout<<"choose your answer: "; 
     cin>>answer; 

     if(answer==1){ 
      function A; 
     } 
     else if(answer==2){ 
      function B; 
     } 
     else { 
     } 
    } 
} 

謝謝..如果我的解釋不好,

+1

你想達到什麼目的?代碼的其餘部分在哪裏?它有什麼作用?您向我們展示的片段不會調用MPI_Finalize,所以我並不感到驚訝,「它會得到錯誤」,我更驚訝它只在使用1個處理器時執行。通過控制檯查看具有用戶交互的MPI代碼是很少見的,大多數MPI安裝的默認配置是運行未連接到控制檯的程序。 – 2012-08-03 08:30:00

+0

我忘了把MPI_Bcast .. 之前你的答案,我把MPI_Bcast裏面「如果(答案== 1或2)」.. 我以爲MPI_Bcast函數是廣播價值.. 我是新手在MPI ..感謝您的幫助..如果我有另一個問題,請再次幫助我 – Faris 2012-08-03 16:22:05

回答

1

如果您想讓所有MPI進程執行基於過程0進行對話的功能,那麼你就必須做這樣的事情:

int answer = -1; 

while (answer != 3) { 
    if (myid == 0) { 
     cout << "1.Process A" << endl; 
     cout << "2.Process B" << endl; 
     cout << "3.exit" << endl; 
     cout << "choose your answer: "; 
     cin >> answer; 
    } 
    MPI_Bcast(&answer, 1, MPI_INT, 0, MPI_COMM_WORLD); 
    if (answer == 1) { 
     function A; 
    } 
    else if (answer == 2) { 
     function B; 
    } 
    else { 
     break; 
    } 
} 

它的工作原理是這樣的:過程0讀取用戶,那麼答案是從過程0廣播到所有其他進程所需的答案。然後,每個進程(包括進程0)根據answer的值進行分支。然後再次循環,直到輸入12以外的其他值。

+0

它的工作原理!感謝您的幫助..現在,我想嘗試這種並行,希望它運作良好。 – Faris 2012-08-03 15:45:46

+0

嗨,先生Hristo,我可以有你的電子郵件嗎?我想與你分享我的其他代碼..有我的代碼的另一個問題..如果你不介意當然..謝謝你 – Faris 2012-08-04 17:53:33

+0

@Faris,不幸的是,我的日程安排非常緊張。我建議你在這裏發佈你的問題,其他人也會看到他們,你會得到更快的反應。 – 2012-08-06 07:50:00

0

我看到一些問題,但我不能100%確定我是否正確理解了你。 當myid = 0那麼你唯一的選擇是按3,否則它永遠不會退出循環。

所以這是不可能的調用函數A或函數B

+0

oke,我會嘗試再次解釋,對不起,如果我的解釋是錯誤的..我想顯示進程只在根的設備上的選項,但我選擇的過程中,它將在所有設備上運行..根和奴隸..如何做到這一點? – Faris 2012-08-03 03:42:33

+0

我已編輯我的代碼,請再次檢查,並請幫我解決我的問題..謝謝 – Faris 2012-08-03 03:45:43