Как получить значительное ускорение с помощью Parallel Computing Toolbox of MATLAB в процессоре Core i7?

Я работаю над обработкой изображений. У меня есть компьютер с процессором Intel(R) Core(TM) i7-3770 с частотой 3,40 ГГц, конфигурация ОЗУ 4 ГБ. Я просто хочу распараллелить наш код алгоритма обработки изображений с помощью SPMD-команды PCT. Для этого я разделил изображение по вертикали на 8 частей и отправил его в разные лаборатории, а с помощью команды SPMD я выполнил алгоритм обработки изображения параллельно на разных частях в разных лабораториях.

Я получил правильный ответ, который я получил из последовательного кода. Но это занимает больше времени, чем последовательный код. Я пробовал это с самого большого изображения на самое маленькое изображение, но не получил значительного результата.

Предложите мне, как я могу получить значительное ускорение с помощью команды SPMD?


person user3282683    schedule 16.07.2014    source источник
comment
Многие функции Matlab являются многопоточными прямо из коробки. Я не знаю, используете ли вы те, которые вы используете, но я предлагаю вам протестировать их и убедиться в этом самостоятельно. Включите большую функцию обработки изображений и посмотрите, как загорится монитор производительности на вашем компьютере.   -  person High Performance Mark    schedule 16.07.2014
comment
Я согласен с @HighPerformanceMark - многие функции Image Processing Toolbox уже являются многопоточными, а многопоточность часто дает лучшую производительность, чем подход с несколькими процессами, используемый SPMD, потому что данные не нужно передавать.   -  person Edric    schedule 22.07.2014


Ответы (2)


Поскольку вы не предоставили никакого кода, мне придется придерживаться общего ответа. Во всех параллельных вычислениях есть несколько соображений дизайна, два из которых наиболее важны: может ли ваш код работать параллельно, и, во-вторых, сколько коммуникационных издержек вы создаете.

Вызов рабочих означает отправку информации туда и обратно, так что в параллельных вычислениях есть оптимум. Убедитесь, что вы предоставляете своим работникам достаточно работы, чтобы общение с ними требовало меньше времени, чем ускорение, полученное за счет параллельных вычислений.

И последнее, но не менее важное: если вы предоставите пример рабочего кода, сообщество сможет помочь вам намного лучше!

person EJG89    schedule 17.07.2014

Если вы хотите применить одну и ту же операцию к нескольким блокам изображения, то вместо того, чтобы беспокоиться о таких конструкциях, как spmd, вы можете просто применить команду blockproc и установить для параметра UseParallel значение true. Он будет распараллеливать все за вас, и вам не нужно будет ничего делать.

Если это не работает для вас, и вы действительно хотите реализовать свой алгоритм напрямую с помощью spmd, вам нужно будет опубликовать пример кода, чтобы указать, что вы пробовали, и где это идет не так.

person Sam Roberts    schedule 17.07.2014