Вот идея:
Сначала вы рассеивают построчно изображения (если вы программируете на C) или по столбцам (если программа в Fortran) с использованием MPI_Scatter()
или MPI_Scatterv()
(с Scatterv вы можете распространять изображение на ряд процессов, которые не являются целым делителем числа строк/столбцов).
Затем каждый процесс вычисляет гистограмму его части изображения. Пусть гистограмма хранится в целочисленном массиве local_histogram
из 256 элементов (я предполагаю, что изображения имеют оттенки серого).
На последнем этапе глобальное снижение суммирование выполняется с MPI_Reduce()
:
MPI_Reduce(local_histogram, histogram, 256, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
После полного глобального гистограмма будет в histogram
массиве в процессе с рангом 0.
что вы пробовали? вы проводили какое-либо параллельное программирование в прошлом? знаете ли вы гистограммы? это не учебный сайт, а сайт для конкретных вопросов, на которые можно дать точные ответы. см. FAQ. –
@phresnel Вы не хотели бы, чтобы он отдавал все, что пытался. Это может испортить возможные ответы; люди могут предлагать улучшения в своих существующих методах, а не предоставлять лучший ответ. –
@IanBoyd: Но что мы будем рекомендовать? Алгоритм? Книга о параллельном программировании? Параллельная архитектура? Блокировка шаблонов или другие методы синхронизации? Большие целые числа? Подходящие языки программирования? Исходный код полного приложения бесплатно? –