gpt4 book ai didi

c++ - 如何将动态数组从从节点发送到主节点

转载 作者:搜寻专家 更新时间:2023-10-31 01:43:28 26 4
gpt4 key购买 nike

我正在完成一个简单的 MPI 程序,但在项目的最后部分遇到困难。我向从节点发送 2 个包含起点和终点的 int。使用这些我需要创建一个数组并填充它。我需要将其发送回主节点。从机代码如下:

printf("Client waiting for start point and endpoint array\n");fflush(stdout);

int startEnd [2];

MPI_Recv(startEnd, 2, MPI_INT, 0, 100, MPI_COMM_WORLD, &status);
int end = startEnd[1];
int start = startEnd[0];
printf("Recieved Start End of %d \t %d\n", startEnd[0], startEnd[1]);fflush(stdout);

unsigned char TargetHash[MAX_HASH_LEN];
MPI_Recv(TargetHash, MAX_HASH_LEN, MPI_CHAR, 0, 100, MPI_COMM_WORLD, &status);

int sizeToCompute = (end - start);
uint64* pStartPosIndexE = new uint64[sizeToCompute];
int iterator = 0;
for (int nPos = end; nPos >= start; nPos--)
{
cwc.SetHash(TargetHash);
cwc.HashToIndex(nPos);
int i;
for (i = nPos + 1; i <= cwc.GetRainbowChainLength() - 2; i++)
{
cwc.IndexToPlain();
cwc.PlainToHash();
cwc.HashToIndex(i);
}

pStartPosIndexE[iterator] = cwc.GetIndex();
}

这是创建动态长度数组的正确方法吗?我如何将这个数组发送回主节点?

最佳答案

发送动态分配的数组与发送静态数组没有区别。当数组大小不同时,接收代码会变得有点复杂,但不会复杂得多:

// ---------- Sender code ----------

MPI_Send(pStartPosIndexE, sizeToCompute, MPI_UINT64, 99, ...);

// --------- Receiver code ---------

// Wait for a message with tag 99
MPI_Status status;
MPI_Probe(MPI_ANY_SOURCE, 99, MPI_COMM_WORLD, &status);

// Get the number of elements in the message
int nElems;
MPI_Get_elements(&status, MPI_UINT64_T, &nElems);

// Allocate buffer of appropriate size
uint64 *result = new uint64[nElems];

// Receive the message
MPI_Recv(result, nElems, MPI_UINT64_T, status.MPI_SOURCE, 99, ...);

使用源级别为 MPI_ANY_SOURCEMPI_Probe 通常在主/从应用程序中使用,在主/从应用程序中,工作进程以先到先得的方式进行处理。

关于c++ - 如何将动态数组从从节点发送到主节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25111141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com