画像に対して特定の些細な操作を実行する必要があります(この場合はネガティブ)。画像を再帰的に等角に分割し、MPIを使用して並列処理する必要があると言われています。
シーケンシャル画像処理クラスでこれを行うための関数を作成しました。
void recursive_negative_helper(int x, int y, int WIDTH, int HEIGHT)
{
/* recurse until dimensions become odd, to avoid corruption of image
(equal sized rectangles only) */
if( (WIDTH&1) || (HEIGHT&1) )
{
uint8_t color[BPP];
for(int i=y ; i<y+HEIGHT ; i++)
{
for(int j=x ; j<x+WIDTH ; j++)
{
get_pixel(color,i,j);
for(int k=0 ; k<BPP ; k++)
color[k] = 255-color[k];
set_pixel(color,i,j);
}
}
return;
}
recursive_negative_helper(x , y , WIDTH/2, HEIGHT/2);
recursive_negative_helper(x+WIDTH/2, y , WIDTH/2, HEIGHT/2);
recursive_negative_helper(x , y+HEIGHT/2, WIDTH/2, HEIGHT/2);
recursive_negative_helper(x+WIDTH/2, y+HEIGHT/2, WIDTH/2, HEIGHT/2);
}
void recursive_negative()
{
recursive_negative_helper(0,0,width,height);
}
私は初めてMPIを学び、これを並行して行う方法を理解するのに苦労しています。1つの方法は、4つに分割し、各部分をプロセスに割り当てることだと思います。私のアプリケーションにはそれで十分です!しかし、どうすれば任意の数のプロセスに対してそれを行うことができますか?
誰か助けてもらえますか?また、可能であれば、MPI擬似コードを投稿してください。そうすれば、より明確に視覚化できます。