gpt4 book ai didi

c - 在此 C 代码示例中使用 MPI_Isend 是否安全?

转载 作者:行者123 更新时间:2023-11-30 15:13:49 25 4
gpt4 key购买 nike

简单问题:由于性能要求,我需要能够在发送数据的同时进行后续计算。所以我需要使用 MPI_Isend。

这安全吗?

 //qtasks[][] is a 2d array and Im sending one row to each task 
//it has numtasks rows and different count of columns for each row
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
int k;
for(t=0;t<numtasks;t++){
if(t != rank) {
_k= cqtasks[t]; //this is the number of columns (for each row)
MPI_Isend( qtasks[t],_k,MPI_DOUBLE, t, 55,MPI_COMM_WORLD, &mpireq );
MPI_Request_free( &mpireq );

}
}

最佳答案

没有。一方面,正如 Jonathan Dursi 指出的那样,MPI_Request_free 取消分配请求,因此此调用不能确保消息实际上已到达其目的地。

要确保消息已到达,您需要使用 MPI_Wait 或 MPI_Test 调用(或其任何相关调用 - MPI_Waitall、MPI_Waitsome、... MPI_Testall、MPI_Testsome、...)。所以你的代码可能看起来像这样:

//qtasks[][] is a 2d array and Im sending one row to each task 
//it has numtasks rows and different count of columns for each row
MPI_Request mpireq[N];
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
int _k;
for(t=0;t<size;t++){
if(t != rank) {
_k= cqtasks[t]; //this is the number of columns (for each row)
MPI_Isend( qtasks[t],_k,MPI_DOUBLE, t, 55,MPI_COMM_WORLD, &mpireq[t] );
}
}

do_some_calculation();

for(t=0;t<size;t++){
if(t != rank) {
MPI_Wait (mpireq[t], MPI_STATUS_IGNORE);
}
}

关于c - 在此 C 代码示例中使用 MPI_Isend 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34319998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com