Умножение матриц с использованием CUDA + MPI
Я делаю исследование о GPU в кластерных средах, используя MPI для общения.
Для того, чтобы сравнить скорость, я думаю, в создании:
Умножение матрицы только для GPU, ок.
Теперь просто CPU MatrixMulti, хорошо.
Но я не могу найти хорошую реализацию умножения матриц CUDA + MPI.
У кого-нибудь есть подсказка о том, где я могу найти это? Или предложить одну реализацию.
3 ответа
Библиотека шаблонов MTL4 Matrix может стать отличной отправной точкой. В настоящее время MTL4 имеет многоядерный DMM, и мы почти закончили с полной реализацией GPU. Питер и я говорили о алгоритмах распределенных графических процессоров, но поскольку в настоящее время мы фокусируемся на средствах решения PDE, алгоритмы распределенных графических процессоров трудно сделать конкурентоспособными по сравнению с надежными DMM.
Однако я работаю над новым набором решателей геофизики / медицинских изображений, который более удобен для распределенных вычислений на GPU, поскольку наборы данных более скромны, а видео возможности GPU полезны.
Вокруг не так много Лучше всего написать умножение блочной матрицы поверх MPI, если бы каждый узел выполнял умножение блоков локально на GPU.
Комбинаторный BLAS - это шаблонный MPI-код C++, который имеет разреженную операцию умножения матрицы на матрицу. Он использует процессорную сетку sqrt(p)-by-sqrt(p) и алгоритм SUMMA для умножения матриц. Одним из аргументов шаблона является "последовательный" компонент, представляющий собой матрицу, локальную для одного процесса. Вы можете использовать его напрямую с аргументом шаблона, который является вашей структурой CUDA, но, по крайней мере, он может служить ссылкой для вашего собственного кода.