Умножение матриц с использованием CUDA + MPI

Я делаю исследование о GPU в кластерных средах, используя MPI для общения.
Для того, чтобы сравнить скорость, я думаю, в создании:

Умножение матрицы только для GPU, ок.
Теперь просто CPU MatrixMulti, хорошо.
Но я не могу найти хорошую реализацию умножения матриц CUDA + MPI.

У кого-нибудь есть подсказка о том, где я могу найти это? Или предложить одну реализацию.

3 ответа

Решение

Библиотека шаблонов MTL4 Matrix может стать отличной отправной точкой. В настоящее время MTL4 имеет многоядерный DMM, и мы почти закончили с полной реализацией GPU. Питер и я говорили о алгоритмах распределенных графических процессоров, но поскольку в настоящее время мы фокусируемся на средствах решения PDE, алгоритмы распределенных графических процессоров трудно сделать конкурентоспособными по сравнению с надежными DMM.

Однако я работаю над новым набором решателей геофизики / медицинских изображений, который более удобен для распределенных вычислений на GPU, поскольку наборы данных более скромны, а видео возможности GPU полезны.

Для начала взгляните на учебник по MTL4

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

Комбинаторный BLAS - это шаблонный MPI-код C++, который имеет разреженную операцию умножения матрицы на матрицу. Он использует процессорную сетку sqrt(p)-by-sqrt(p) и алгоритм SUMMA для умножения матриц. Одним из аргументов шаблона является "последовательный" компонент, представляющий собой матрицу, локальную для одного процесса. Вы можете использовать его напрямую с аргументом шаблона, который является вашей структурой CUDA, но, по крайней мере, он может служить ссылкой для вашего собственного кода.

Другие вопросы по тегам