所以,我实现了自己的mpi库(简化版),我需要在进程之间发送/接收一些数据。 MPI_Send看起来像这样(void * buf,int count,datatype data等...)。这意味着我需要通过buf发送指向地址的数据类型的数据元素(char,double或int)。我需要通过消息队列(mq)发送em。 MPI_Recv采用相同的参数。目前这是我在Send and Recv中所做的事情:
//Sender part of code
ret=mq_send(mq,buf,sizeof(buf),0);
if(ret < 0)
return MPI_ERR_IO;
//Receiver part of code
ret = mq_receive(mq, buf, MSGSIZE, NULL );
if(ret < 0)
return MPI_ERR_IO;
现在我只收到数组的第一个元素。我怎么去发送整件事?这就是我的想法
//Sender part of pseudocode
for(i=0,count)
element=(cast to datatype)buf[i];
mq_send(mq,element,sizeof,0);
//Receiver part of pseudocode
//i receive the count number of elements prior to this message
for(i=0,count)
mq_receive(mq,local_variable,etc...)
somehow store them into my void *buf which i receive as an argument ??
如果事情不够清楚,我会回复
答案 0 :(得分:0)
使用mq_send的第三个参数指定要放入队列的数据量。在你的情况下,它是:
ret=mq_send(mq,buf,sizeof(buf),0);
假设buf在
的某个位置初始化float f[2];
void *buf = f;
然后表达式sizeof(buf)
表示:指针的大小称为“buf”。虽然它可能适用于某些体系结构,但正确的方法是
ret=mq_send(mq,buf,sizeof(float) * <number of elements>, 0);
表示浮点数的大小乘以存储在数组中的浮点数。
在这种情况下,您可以将整个数组放入队列中。您还可以避免迭代,只使用一定数量的消息,而不是线性数字。