我正在使用cpp
和openmpi
的项目中工作。在我的程序中,有许多“计算单元”,我称它们为[[elements。对于每个元素,我都会生成一个唯一的unsigned long int
进行标识,我将此整数称为[[key。
MPI_Send()
和MPI_Recv()
。由于每个元素都知道应该向谁发送消息和从谁接收消息,即,它知道应该向其发送消息或从其接收消息的目标元素的密钥,因此将密钥用作tag
中的MPI_Send()
是很直观的]和MPI_Recv()
。但是,我在tag
中看到了man pageopenmpi的值为int
。所以它是4个字节的整数吗?我可以使用unsigned long int
作为标签吗?非常感谢! int flag;
int *tag_ub;
MPI_Comm_get_attr(MPI_COMM_WORLD, MPI_TAG_UB, &tag_ub, &flag);
if (flag)
cout << "Max allowed tag value is " << *tag_ub << endl;
else
cout << "No idea what the max allowed tag value is" << endl;
不仅该值可能在不同的MPI实现之间有所不同,而且在基于作业选择的通信传输的相同实现下,其值也可能有所变化(我已经看到某些MPI实现会发生这种情况)。该标准仅向您保证标签UB的值将不少于32767。
您最好和最方便的选择是使元素ID成为实际消息数据的一部分。