gpt4 book ai didi

在 C 中使用 MPI 进行代码并行化

转载 作者:行者123 更新时间:2023-11-30 15:26:45 26 4
gpt4 key购买 nike

我正在使用 MPI 执行代码并行化来评估成本函数。

我将 50,000 点的人口分配给 8 个处理器。

我正在尝试并行化以下代码,但遇到了困难:

//mpiWorldSize is number of processors
//=====================================

for (int k=1; k< mpiWorldSize; k++)
{
MPI_Send(params[1][mpiWorldRank*over+k],7,MPI_INT, 0,0,MPI_COMM_WORLD);
}

// evaluate all the new costs
//=========================

for (int j=1; j<mpiWorldSize;j++)
{
MPI_Recv( params[1][mpiWorldRank*over+k],7,MPI_INT,j,0,MPI_COMM_WORLD,MPI_STATUS_IGNORE);
}

// memory allocation
//=========================

SecNewCostValues = (float*) malloc(noOfDataPerProcessor/bufferLength);

//loop throw nuber of data per proc

for ( i = 0; i < over; i++ )
{
if(mpiWorldRank != 0)
{
SecNewCostValues[i] = cost( params[1][mpiWorldRank*noOfDataPerPreocessor+i] );
newCostValues[over] = cost( params[1][i] ); //change the i part to rank*nodpp+i
printf("hello from rank %d: %s\n", mpiWorldRank ,procName );
}
}

我无法从除 0 之外的不同处理器发送和接收数据。

我将不胜感激任何帮助。

谢谢

最佳答案

MPI 使用单程序多数据消息传递编程模型,即所有 MPI 进程都执行相同的程序,您需要使用条件来决定哪个进程将执行哪部分代码。代码的整体结构可能如下(假设等级 0 的 master 分配工作,worker 接收工作)。

if (myrank == 0) { // master
for (int k = 1; k < mpiWorldSize; k++) { // send a chunk to each worker
MPI_Send(...);
}
}
else { // worker
MPI_Recv(...); // receive work
}

类似地,主人会收集工作。查看有关 MPI_Scatter()MPI_Gather() 集体通信函数的文档,它们看起来很相关。

关于在 C 中使用 MPI 进行代码并行化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27300410/

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