sya*_*yaz 0 c synchronization mpi
我想打印出每个进程的整数数组的内容。问题是,由于比赛条件,一切都很混乱。
什么是最简单的解决方案?我不想调试。我想显示内容,因为我正在执行排序算法。因此在排序前后显示很有用。
我在lock.c中添加了它:
#include <stdio.h>
static int lock=0; //Don't use if timing execution
void capture(int rank) {
while(lock!=0);
lock = 1;
printf("\nCaptured by %d\n", rank);
}
void release() {
lock = 0;
}
Run Code Online (Sandbox Code Playgroud)
并在打印内容之前调用capture(),然后在打印之后调用release()。是的,这是一个类似信号量的hack。但这行不通,有什么主意吗?
假设您正在使用MPI来收集所有进程的STDOUT,则可以使用MPI_Barrier()来执行排序,如下所示:
for( int i = 0; i < size; ++i ) {
MPI_Barrier( MPI_COMM_WORLD );
if ( i == rank ) {
printf( "..." );
}
}
Run Code Online (Sandbox Code Playgroud)
当然,这是低效率的,但它可能比安排将所有信息发送回第0级要简单一些。
| 归档时间: |
|
| 查看次数: |
3143 次 |
| 最近记录: |