簡體   English   中英

MPI向自己發送和接收大數據

[英]MPI send and receive large data to self

我嘗試使用 MPI 發送和接收一個大型數組以進行自我排序。 當我將數組大小進一步增加到 100000 時,該代碼適用於小型 arrays(數組大小<10000),它會死鎖。 這是我的代碼:

#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>

int main(int argc, char *argv[])
{

MPI_Init(&argc, &argv);

int size;
MPI_Comm_size(MPI_COMM_WORLD, &size);

int rank;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);

MPI_Status stat;


    int N = 100000;

    // Allocate memory for A on CPU
    double *A = (double*)malloc(N*sizeof(double));
    double *B = (double*)malloc(N*sizeof(double));

    // Initialize all elements of A to 0.0
    for(int i=0; i<N; i++){
        A[i] = 0.0;
    }

    int tag1 = 10;
    int tag2 = 20;

//printf("rank=%d",rank);


    MPI_Send(A, N, MPI_DOUBLE, 0, tag1, MPI_COMM_WORLD);
    
    MPI_Recv(B, N, MPI_DOUBLE, 0, tag1, MPI_COMM_WORLD, &stat);

MPI_Finalize();

return 0;
}

我通過以下方式編譯代碼:mpicc
運行命令:mpirun -np 1./

這就是發送和接收的定義:它們是阻塞的。 在發送成功完成之前,發送之后的語句不會執行。

  1. 解決此問題的安全方法是使用MPI_IsendMPI_Irecv
  2. 不阻塞的小消息的情況是依賴於系統的優化,您不能指望它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM