Map Reduce ИЛИ другой шаблон распределенного/параллельного проектирования?

У меня есть этот код, который объединяет/объединяет коллекцию изображений. Я хочу реструктурировать этот последовательный код в параллельное/распределенное приложение, поскольку моя коллекция изображений довольно велика (большие данные :-)). Я обдумываю Map/Reduce, но не уверен, что это возможно в Map/Reduce.

#Sequential Code 
Result.Image <- NULL
foreach(Image in Image.Collection) {
  Result.Image <- CombineImage(Result.Image, Image)
}

Примечание: порядок не имеет значения; Объединение изображений 1,2,3,4,5 так же хорошо, как объединение изображений 2,3,1,4,5.

В идеале я хотел бы что-то вроде этого (больше похоже на классический разделяй и властвуй, чем на map/reduce):

введите здесь описание изображения

1,2,3,4 - исходные изображения. Один узел объединяет изображение № 1 и изображение № 2 в новое изображение, называемое изображением № 5. Второй узел объединяет изображение № 3 и изображение № 4 в изображение № 6, и, наконец, узел объединяет изображение № 5 и изображение № 6 в окончательный результат.

Любые идеи о том, какой фреймворк/параллельный или распределенный шаблон проектирования я должен использовать, чтобы делать такие вещи?

Ваше здоровье !!




Ответы (1)


Из вашего первоначального описания (код foreach) кажется, что вы не можете обработать изображение № 3, пока не обработаете № 1 и № 2, поскольку вы накапливаете промежуточные результаты в Result.Image. Теперь ваш график показывает другую историю, что одноуровневые узлы могут обрабатываться параллельно, и мне интересно, можно ли параллельно объединять даже случайные узлы. В любом случае, я думаю, что вы можете поместить все начальные образы в очередь FIFO и использовать столько процессоров (потоков, машин или узлов), сколько сможете себе позволить. Каждый процессор берет два изображения, объединяет их и возвращает результат в очередь. Вы обрабатываете так, пока не получите 1 изображение в очереди.

person Gabriel Burete    schedule 12.07.2013
comment
Привет, Габриэль - да, даже случайные узлы могут быть объединены параллельно - объединение 1,2,3,4,5 так же хорошо, как объединение 3,2,4,5,1 ..... решение очереди FIFO, которое вы описываете, очень на мой взгляд хорошо :-) - person MadSeb; 12.07.2013