MPI_Send()的标记可以是长整数吗?

问题描述 投票:0回答:1

我正在使用cppopenmpi的项目中工作。在我的程序中,有许多“计算单元”,我称它们为[[elements。对于每个元素,我都会生成一个唯一的unsigned long int进行标识,我将此整数称为[[key。

问题是,我现在需要一些元素在处理器之间相互通信,即使用MPI_Send()MPI_Recv()。由于每个元素都知道应该向谁发送消息和从谁接收消息,即,它知道应该向其发送消息或从其接收消息的目标元素的密钥,因此将密钥用作tag中的MPI_Send()是很直观的]和MPI_Recv()。但是,我在tag中看到了man pageopenmpi的值为int。所以它是4个字节的整数吗?我可以使用unsigned long int作为标签吗?非常感谢!
c++ mpi openmpi
1个回答
1
投票
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成为实际消息数据的一部分。    
© www.soinside.com 2019 - 2024. All rights reserved.