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

これを行う最も簡単な方法は、Image オブジェクトから取得できる BLOB データを送信することですが、最適ではない場合があります。だから、このようにしてください:

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 に答える