3

我的项目有一个严重的问题。我需要将图像数据发送到集群中的另一个节点。我用 ImageMagick 读取图像,如下所示:

Image testImage;

// read in the file
testImage.read("image.png");

我将其发送为:

MPI_Send( &testImage, sizeof(Image), MPI_BYTE, i , 100, MPI_COMM_WORLD);

其他节点应该接收它:

Image subimage_toModify;
MPI_Recv( &subimage_toModify, sizeof(Image), MPI_BYTE, 0, 100, MPI_COMM_WORLD, &status);

但我得到一个分段错误:

Signal code: Address not mapped (1)

任何人都可以提供帮助吗?我几乎感到沮丧!

4

1 回答 1

3

该类Image不是 POD 类型,因此您不能使用它发送它MPI_Send

最简单的方法是发送 BLOB 数据,您可以从 Image 对象中获取这些数据,但它可能不是最优的。所以,这样做:

Image testImage;

// read in the file
testImage.read("image.png");

Blob blob;
testImage.write( & blob );
int size = blob.length();
MPI_Send( &size, sizeof( size ), MPI_BYTE, i , 100, MPI_COMM_WORLD);
MPI_Send( blob.data(), blob.length(), MPI_BYTE, i , 100, MPI_COMM_WORLD);

受到 :

int size = 0;
MPI_Recv( &size, sizeof( size ), MPI_BYTE, 0, 100, MPI_COMM_WORLD, &status);
std::vector< unsigned char > tempBuffer( size, 0 );
MPI_Recv( &tempBuffer[0], tempBuffer.size(), MPI_BYTE, 0, 100, MPI_COMM_WORLD, &status);
Blob blob( &tempBuffer[0], tempBuffer.size());
于 2011-07-22T20:04:25.670 回答