共用方式為


MPI_Recv函式

執行接收作業,而且在收到相符的訊息之前不會傳回。

語法

int MPIAPI MPI_Recv(
  _In_opt_ void         *buf,
           int          count,
           MPI_Datatype datatype,
           int          source,
           int          tag,
           MPI_Comm     comm,
  _Out_    MPI_Status   *status
);

參數

  • buf [in, optional]
    緩衝區的指標,其中包含要傳送的資料。

  • 計數
    緩衝區中的項目數。 如果訊息的資料部分是空的,請將 count 參數設定為 0。

  • datatype
    緩衝區陣列中專案的資料類型。

  • source
    指定通訊器內傳送程式的排名。 指定 MPI_ANY_SOURCE 常數,以指定任何來源都是可接受的。

  • 標記
    用來區分不同類型的訊息的訊息標記。 指定 MPI_ANY_TAG 常數,指出任何標籤都是可接受的。

  • 通訊
    通訊器的控制碼。

  • 狀態 [out]
    傳回時,包含儲存所接收訊息相關資訊 之MPI_Status 結構的指標。

傳回值

傳回成功時 MPI_SUCCESS 。 否則,傳回值是錯誤碼。

在 Fortran 中,傳回值會儲存在 IERROR 參數中。

Fortran

    MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, IERROR)
        <type> BUF(*)
        INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS(MPI_STATUS_SIZE), IERROR

備註

接收訊息的長度必須小於或等於接收緩衝區的長度。 如果所有傳入的資料都不符合接收緩衝區,此函式會傳回溢位錯誤。

如果收到的訊息比緩衝區短,則只會修改對應至訊息的緩衝區部分。 緩衝區的其餘部分不會修改。

進程可以傳送訊息給自己。 不過,透過封鎖傳送和接收作業, MPI_SendMPI_Recv,不安全,因為這些封鎖傳送和接收作業可能會導致死結。

注意

傳送和接收作業之間有不對稱。 接收作業可以接受來自任意傳送者的訊息,但傳送作業必須指定唯一的接收者。 這會實作通訊的推送樣式,其中資料傳輸會受到傳送者影響,而不是由接收者影響資料傳輸的提取樣式。

 

規格需求

產品

HPC Pack 2012 MS-MPI 可轉散發套件、HPC Pack 2008 R2 MS-MPI 可轉散發套件、HPC Pack 2008 MS-MPI 可轉散發套件或 HPC Pack 2008 用戶端公用程式

標頭

Mpi.h;Mpif.h

媒體櫃

Msmpi.lib

DLL

Msmpi.dll

另請參閱

MPI 點對點函式

MPI_Send

MPI_Irecv

MPI_Datatype

MPI_Comm

MPI_Status