@bobrikan

Можно ли использовать несколько видеокарт для ускорения научных расчетов на языках С++ или Python?

В данный момент я занимаюсь научными расчетами (считаю матрицы, что хорошо параллелится). Если изначально всё начиналось с последовательных расчетов на CPU на python, то довольно скоро пришла идея о параллелизации на CPU, а потом и CUDA (использую библиотеку numba на языке python). И результаты очень неплохи. Однако все же дошли до того момента, что даже на 1080ti счёт занимает более 15 часов.

Итак вопросы.
1) Насколько Tesla V100 считает быстрее чем 1080ti?
2) Насколько будут ускоренны расчеты при переходе на с++?
3) Можно ли использовать несколько GPU для расчетов одновременно на питоне? То есть конечно можно разбить руками матрицу на 4 части, руками же запустить 4 одинаковых кода (единственное различие в коде будет в присвоении коду видеокарте cuda.device_select(n)), а потом ручками же соединить 4 матрицы и получить искомую матрицу, но это очень хлопотно.
4) Аналогичный вопрос про с++
Искал в интернете инфу - не нашел.
  • Вопрос задан
  • 784 просмотра
Пригласить эксперта
Ответы на вопрос 4
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Смотрите.
https://www.microway.com/knowledge-center-articles...

Единственная проблема теслы это стоимость
Ответ написан
Комментировать
Jump
@Jump
Системный администратор со стажем.
  1. Зависит от алгоритма и его реализации. Может быть примерно с такой же скоростью может на несколько процентов быстрее, или на несколько порядков быстрее.

  2. Не факт что будут ускорены. А если будут - зависит от многих факторов, предсказать нельзя.

  3. Да. Автоматизируйте хлопотные вещи.
Ответ написан
adugin
@adugin Куратор тега Python
Просто оставлю это здесь в качестве иллюстрации разгона перемножения матриц в 330 раз без всяких GPU:
Как ускорить перемножение матриц в numpy?
Ответ написан
Комментировать
По моему опыту - разница между python и c++ будет пренебрежительно малой в данном случае, ведь сами расчёты на устройстве, а хост только за I/O и общую логику отвечает. Не работал с CUDA, но для OpenCL все упирается в копировании данных с/на GPU и запись в файлы. Нужно профилировать. Также слышал, что можно замапить область памяти с RAM или даже ROM напрямую в адресное пространство GPU. Что поможет избежать лишнего копирования(но я лично не пробовал).
По поводу использования нескольких GPU. Использовал. Даёт ускорение примерно в 0.9n - 0.95n, где n-количество вычислителей. На хосте получаются данные о примерной производительности каждого устройства, вся задача пропорционально делится на части и запускается. Потом на хосте собираются результаты.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы