MPI'rc'变量和MPI_Get_Count()的原因

时间:2012-04-20 14:59:59

标签: c mpi message-passing

在下面的 ping-pong 程序中,rc变量有什么用?它不断更新但从未使用过 加上MPI_Get_Count()做什么?


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

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

int numtasks, rank, dest, source, rc, count, tag=1;  
char inmsg, outmsg; 
MPI_Status Stat ;

MPI_Init (&argc,&argv); 
MPI_Comm_size (MPI_COMM_WORLD, &numtasks); 
MPI_Comm_rank (MPI_COMM_WORLD, &rank);

if (rank == 0) {
  dest = source = 1;outmsg=’x’;
  rc = MPI_Send (&outmsg, 1, MPI_CHAR, dest, tag, MPI_COMM_WORLD);
  rc = MPI_Recv (&inmsg, 1, MPI_CHAR, source, tag, MPI_COMM_WORLD, &Stat);
} 
else if (rank == 1) {
  dest = source = 0;outmsg=’y’;
  rc = MPI_Recv (&inmsg, 1, MPI_CHAR, source, tag, MPI_COMM_WORLD, &Stat);
  rc = MPI_Send (&outmsg, 1, MPI_CHAR, dest, tag, MPI_COMM_WORLD);
}

rc = MPI_Get_count (&Stat, MPI_CHAR, &count);
printf("Task %d: Received %d char(s) from task %d with tag %d \n", rank, count, Stat.MPI_SOURCE,Stat.MPI_TAG); 
MPI_Finalize ();
}

1 个答案:

答案 0 :(得分:0)

“输出”部分中的文档回答了关于MPI_Get_count的位,进一步说明了链接页面。

至于rc,这是我可以提供的最佳解释,无法访问此代码的作者或任何相关注释。 C绑定中的所有MPI例程都返回错误代码。一些编译器会检查是否有人在地板上删除返回值,因为它可能表示代码中存在错误,并在他们看到发生这种情况时生成警告。因此,为了防止出现这些警告,此代码将返回值分配给变量rc

也就是说,许多编译器也警告设置一个从未使用过的变量,这就是这里的情况。告诉编译器的一句成语“是的,我知道我忽略了这个返回值,让我一个人”是(void)function_call(foo, bar, baz);(即将返回值强制转换为void)。在调用真正应该检查返回值的函数时最常见到这种情况,例如write()。在每次MPI调用上编写它而不是消除违规警告都会相当难看。