Как реализовать программу в openCL с использованием MPI на одном процессоре - PullRequest
2 голосов
/ 09 декабря 2011

Я новичок в программировании на GPU, у меня ноутбук без видеокарты, я хочу разработать программу умножения матриц на Intel OpenCL и реализовать это приложение с использованием MPI ..

могут быть опубликованы любые рекомендации и полезные ссылки.

Я не совсем понимаю, что такое MPI, нужно ли нам писать код для MPI или нам нужно использовать некоторые разработанные MPI для запуска нашего приложения?

это проектное предложение того, что я хочу сделать

Вычисление кластера на GPU (C ++, OpenCL и MPI)

  • Изучение MPI для распределения задачи

  • Реализация приложений OpenCL на одном компьютере (матричное умножение / обработка 2D-изображений)

  • Реализация приложений с MPI (например, обработка больших 2D-изображений)

Ответы [ 2 ]

8 голосов
/ 10 декабря 2011

Итак, нужно понимать, что MPI и OpenCL для ваших целей полностью ортогональны. MPI для связи между вашими узлами GPU; OpenCL предназначен для ускорения локальных вычислений на одном узле с помощью графического процессора (или нескольких ядер процессора). Для любой из этих проблем вы должны начать с написания последовательной версии кода на C ++. Следующим шагом будет (в любом порядке) работать над реализацией OpenCL для одного узла и работать над версией MPI, которая разбирает проблемы (вы не хотите использовать master-slave для любого пользователя из перечисленных выше проблем) на несколько процессов, причем каждый процесс выполняет свою локальную часть вычислений, что способствует глобальному решению. Как только обе эти части будут выполнены, вы решите эту проблему, и у вас будет версия кода с распределенной памятью (часть MPI) (часть OpenCL) для решения этой проблемы.

Конечно, это будет не так просто, и объединение этих двух факторов потребует немалой работы, но об этом следует помнить. Начните с одной проблемы, заставьте его работать на одном процессоре в C ++, затем попробуйте его с одним или другим. Не пытайтесь делать все сразу, иначе вы никуда не денетесь.

Для таких проблем, как умножение матриц, есть много примеров в Интернете реализаций как GPU, так и MPI.

2 голосов
/ 09 декабря 2011

Упрощенно:

MPI - это библиотека для связи процессов, а также платформа для запуска приложений в кластере.Вы пишете программу, которая использует библиотеку MPI, и затем эта программа должна выполняться с MPI.MPI разветвляет это приложение N раз в кластере и позволяет сообщать экземпляры этого приложения с помощью сообщений.

Задачи, которые создают экземпляры, если они являются одинаковыми или разными работниками, и топология зависит от вас.

Я думаю, 3 способа использования (OpenCL и MPI):

  1. Запуск MPI (K + 1), один ведущий и K ведомых.Ведущий разделяет данные на куски, а ведомые обрабатывают данные в GPUS, используя OpenCL.Все подчиненные устройства одинаковы.
  2. Запуск MPI (k + 1), один ведущий и k подчиненных.Каждое ведомое устройство вычисляет специализированную задачу (умножение матрицы на подчиненное устройство 1, сжатие на ведомое устройство на 2 блока и т. Д.), А мастер направляет данные в виде задачи рабочего процесса.один хозяин и к рабам.То же самое, что и в случае 1, но мастер также отправляет на ведомые устройства программу OpenCL для обработки данных.
...