2011-03-20 89 views
0

我在Monte Carlo模擬器程序中有三個用戶定義的函數。在main()他們被調用使用適當的參數。MPI並行編程

這是一個串口程序。

如何將其轉換爲並行程序?

到目前爲止,我已經做了串行程序,使其作爲一個MPI並行程序 的步驟是:

#include <conio.h> 
#include <stdio.h> 
#include "mpi.h" 

//Global Varibles Declared 
#define a=4; 
#define b=2; 
#define c=4; 
#define d=6; 

function1(Parameter4, Parameter)) 
{ 
    // body of function 
} 

function2(parameter 1, parameter2) 
{ 
    //body of function 
} 


int main(int argc, char *argv[]) 
{ 
    // Local Variables defined 
    MPI_Init(&argc, &argv); 
    MPI_Comm_rank(MPI_COMM_WORLD, &rank); 
    MPI_Comm_size(MPI_COMM_WORLD, &size); 
    function1(a, b); 
    function2(c, d); 
    MPI_Finalize(); 
} 

現在我的問題是

我在哪裏指定

  1. 處理器數量(如使用2,4,6,8處理器運行)
  2. 發送和接收方法
  3. 如何使用不同數量的處理器查看輸出圖形。

請問任何人都可以幫助我,因爲我是這種語言的新手,對此並不瞭解。

回答

0

MPI是一種通信協議。我們無法幫助您,不知道您正在使用的平臺/庫。如果你知道你正在使用什麼庫,那麼在網上有一個示例展示如何用它來實現蒙特卡羅模擬,那麼可能性很大。

+0

我必須使用Linux環境運行此應用程序,我的代碼是C語言。可能是我可以發送示例代碼給你更多的澄清,如果它的okey,其中沒有敏感數據。 – 2011-03-20 19:29:31

+0

你從哪裏得到你的mpi.h文件? – 2011-03-20 19:34:35

+0

這是一個圖書館像 2011-03-20 20:12:12

0
  1. 首先,您的示例代碼不是有效的C代碼。中的#define行應該是這樣的:

    #define a 4 
    
  2. 運行的程序,它通常是通過

    mpiexec -np PROCS MPIPROG 
    

    或類似物,其中PROCS是的數目完成時,通常指定的處理器數量MPI任務啓動和MPIPROG是編譯的MPI可執行文件的名稱。 MPI內部也可能產生MPI任務,但這並不適用於任何地方,所以我不會推薦它。指定運行時任務數量的優點是,您可以根據正在使用的平臺選擇要使用的任務數量。

  3. Send和Recv可以在代碼中的任何地方使用,在MPI_Init被調用之後,以及在MPI_Finalize被調用之前。舉個例子,從任務0發送到任務1的整數,你會使用類似

    int number; 
    
    if (rank == 0) { 
        /* compute the number on proc 0 */ 
        number = some_complex_function(); 
        /* send the number to proc 1 */ 
        MPI_Send(&number, 1, MPI_INT, 1, 42, MPI_COMM_WORLD); 
    } else if (rank == 1) { 
        /* receive the number from proc 0 */ 
        MPI_Recv(&number, 1, MPI_INT, 0, 42, MPI_COMM_WORLD, 0); 
    } 
    
    // now both procs can do something with the number 
    

    注意,在這種情況下,任務1,直到從任務0收到的數量,因此將不得不等待一個真實的應用程序,你可能想給任務1一些工作要做,而任務0計算「some_complex_function」。