Мне нужно выполнить некоторые тривиальные операции над изображением (в данном случае это отрицательный). Я сказал, что мне нужно рекурсивно разделить изображение на равные прямоугольники, и обрабатывать их параллельно с использованием 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 в первый раз и с трудом выясняю, как это сделать параллельно. Я предполагаю, что один из способов делится на 4 и дает каждую часть процессу. Этого было бы достаточно для моего приложения! Но как я могу это сделать для любого количества процессов?
Может ли кто-нибудь помочь? Также, если возможно, отправьте псевдокод MPI, чтобы я мог визуализировать его более четко!
Уточнить, действительно ли MPI является обязательным (кажется маловероятным, поскольку вы не включили ни одну линию MPI там), или чего-то относительно простого, такого как OpenMP, было бы достаточно? Кроме того, есть много примеров. Разве вы не видели никого из них? – mmgp
Хотя это теоретически элегантный способ решения этой проблемы, на практике это может быть не так. Если вы работаете над достаточно большими изображениями (2^m X 2^n), программа может просто потерпеть крах, сказав, что у вас закончилось пространство стека (достигнута максимальная глубина рекурсии) – subzero