【问题标题】:Reason for MPI 'rc' variable and MPI_Get_Count()MPI 'rc' 变量和 MPI_Get_Count() 的原因
【发布时间】:2012-04-20 14:59:59
【问题描述】:

在下面的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 ();
}

【问题讨论】:

  • 如果您使用 Google 搜索“MPI_Get_count”,第一个结果会回答您的两个问题。
  • this? Gets the number of "top level" elements?那不是和size一样吗?
  • 我的意思是MPI_Comm_size()

标签: c mpi message-passing


【解决方案1】:

关于MPI_Get_count 的部分由“输出”部分中的文档回答,该部分位于链接页面的下方。

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

也就是说,许多编译器也会警告设置一个从未使用过的变量,这里就是这种情况。告诉编译器“是的,我知道我忽略了这个返回值,别管我”的习惯用法是(void)function_call(foo, bar, baz);(即将返回值转换为void)。这在调用返回值确实应该检查的函数时最常见,例如write()。在每个 MPI 调用上都写它而不是让一个有问题的警告静音是相当丑陋的。

【讨论】:

  • 谢谢你,但是关于MPI_Get_count(),文档没有让我到达那里(注意homework 标签)。 MPI_Get_count()MPI_Comm_size() 有什么区别?
  • 完整阅读文档页面。查看函数的参数,以及它们的来源。此函数根本不处理通信器,而是处理来自接收呼叫的状态。
猜你喜欢
  • 1970-01-01
  • 2013-12-29
  • 1970-01-01
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多