Если у вас есть лицензия Parallel Computing Toolbox™, то blockproc функция может использовать преимущества нескольких процессорных ядер на машине для выполнения параллельной обработки блоков.
Параллельная обработка блоков позволяет обрабатывать множество блоков одновременно, распределяя вычисления задач по коллекции сессий MATLAB ®, называемых рабочими. Сеанс MATLAB, с которым вы взаимодействуете, называется клиентом. Клиент резервирует коллекцию работников, называемую параллельным пулом. Затем клиент делит входное изображение на блоки и отправляет блоки сеансам рабочего MATLAB. Каждый работник обрабатывает подмножество блоков и отправляет результаты обратно клиенту. Клиент агрегирует результаты в выходную переменную.
При обработке небольших изображений последовательный режим должен быть быстрее параллельного. Однако для изображений большего размера может наблюдаться значительное повышение производительности при параллельной обработке. Производительность параллельной обработки блоков зависит от трех факторов:
Функция, используемая для обработки
Размер изображения
Размер блока
Как правило, использование больших блоков при обработке блоков изображения приводит к более высокой производительности, чем выполнение той же задачи с использованием меньших блоков. Однако иногда для задачи или алгоритма, применяемого к изображению, требуется определенный размер блока, и необходимо использовать блоки меньшего размера. При обработке блоков с использованием меньших блоков параллельная обработка блоков обычно происходит быстрее, чем обычная (последовательная) обработка блоков, часто с большим запасом. Однако при использовании больших блоков может потребоваться провести эксперимент, чтобы определить, экономит ли параллельная обработка блоков вычислительное время.
Для использования параллельной обработки блоков необходимо выполнить два условия:
Исходный образ не указан как ImageAdapter класс.
Лицензия Parallel Computing Toolbox существует в установке MATLAB.
При выполнении этих условий можно вызвать параллельную обработку в blockproc путем указания 'UseParallel' аргумент как true. При этом MATLAB автоматически открывает параллельный пул работников на локальном компьютере и использует всех доступных работников для обработки входного изображения.
В следующем примере вычислите дискретное косинусное преобразование для каждого блока 8 на 8 изображения параллельно:
blockFun = @(block_struct) dct2(block_struct.data); result = blockproc(input_image,[8 8],blockFun, ... 'UseParallel',true);
Управление поведением параллели с помощью настроек параллелизма, включая масштабирование до кластера. Посмотрите parpool(Панель инструментов параллельных вычислений) для получения информации о настройке параллельной среды.