Можно ли использовать несколько видеокарт для ускорения научных расчетов на языках С++ или Python?
В данный момент я занимаюсь научными расчетами (считаю матрицы, что хорошо параллелится). Если изначально всё начиналось с последовательных расчетов на CPU на python, то довольно скоро пришла идея о параллелизации на CPU, а потом и CUDA (использую библиотеку numba на языке python). И результаты очень неплохи. Однако все же дошли до того момента, что даже на 1080ti счёт занимает более 15 часов.
Итак вопросы.
1) Насколько Tesla V100 считает быстрее чем 1080ti?
2) Насколько будут ускоренны расчеты при переходе на с++?
3) Можно ли использовать несколько GPU для расчетов одновременно на питоне? То есть конечно можно разбить руками матрицу на 4 части, руками же запустить 4 одинаковых кода (единственное различие в коде будет в присвоении коду видеокарте cuda.device_select(n)), а потом ручками же соединить 4 матрицы и получить искомую матрицу, но это очень хлопотно.
4) Аналогичный вопрос про с++
Искал в интернете инфу - не нашел.
semen-pro, нельзя. Там именно номер
"Create a new CUDA context for the selected device_id. device_id should be the number of the device (starting from 0; the device order is determined by the CUDA libraries)."
Зависит от алгоритма и его реализации. Может быть примерно с такой же скоростью может на несколько процентов быстрее, или на несколько порядков быстрее.
Не факт что будут ускорены. А если будут - зависит от многих факторов, предсказать нельзя.
bobrikan, Есть такая штука как rCUDA
Потом делите задачу на куски, и рассылаете задания на машины с картами.
Управляющую обвязку на пайтоне написать особых проблем не представляет.
По моему опыту - разница между python и c++ будет пренебрежительно малой в данном случае, ведь сами расчёты на устройстве, а хост только за I/O и общую логику отвечает. Не работал с CUDA, но для OpenCL все упирается в копировании данных с/на GPU и запись в файлы. Нужно профилировать. Также слышал, что можно замапить область памяти с RAM или даже ROM напрямую в адресное пространство GPU. Что поможет избежать лишнего копирования(но я лично не пробовал).
По поводу использования нескольких GPU. Использовал. Даёт ускорение примерно в 0.9n - 0.95n, где n-количество вычислителей. На хосте получаются данные о примерной производительности каждого устройства, вся задача пропорционально делится на части и запускается. Потом на хосте собираются результаты.