[英]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./
這就是發送和接收的定義:它們是阻塞的。 在發送成功完成之前,發送之后的語句不會執行。
MPI_Isend
和MPI_Irecv
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.