我使用MPI非阻塞通信(MPI_Irecv,MP_Isend)来监视从属的空闲状态,代码如下所示.
等级0:
int dest = -1;
while( dest <= 0){
int i;
for(i=1;i<=slaves_num;i++){
printf("slave %d, now is %d \n",i,idle_node[i]);
if (idle_node[i]== 1) {
idle_node[i] = 0;
dest = i;
break;
}
}
if(dest <= 0){
MPI_Irecv(&idle_node[1],1,MPI_INT,1,MSG_IDLE,MPI_COMM_WORLD,&request);
MPI_Irecv(&idle_node[2],1,MPI_INT,2,MSG_IDLE,MPI_COMM_WORLD,&request);
MPI_Irecv(&idle_node[3],1,MPI_INT,3,MSG_IDLE,MPI_COMM_WORLD,&request);
// MPI_Wait(&request,&status);
}
usleep(100000);
}
idle_node[dest] = 0;//indicates this slave is busy now
Run Code Online (Sandbox Code Playgroud)
等级1,2,3:
while(1)
{
...//do something
MPI_Isend(&idle,1,MPI_INT,0,MSG_IDLE,MPI_COMM_WORLD,&request);
MPI_Wait(&request,&status);
}
Run Code Online (Sandbox Code Playgroud)
它工作,但我希望它更快,所以我删除该行:
usleep(100000);
Run Code Online (Sandbox Code Playgroud)
然后排名0进入死亡,而像这样:
slave 1, now is 0
slave 2, now is 0
slave 3, now is 0
slave 1, now …Run Code Online (Sandbox Code Playgroud) 最近我总是听说GPU在计算方面非常强大,现在我脑子里出现了一个问题:我们可以用CPU更快地解决问题而不是使用GPU吗?
你能举个例子吗?