Существует как минимум два варианта ускорения вычислений с использованием графического процессора:
Но я обычно не рекомендую запускать код на GPU с самого начала. Расчеты на GPU не всегда быстрее. В зависимости от того, насколько они сложны и насколько хороши ваши реализации на CPU и GPU. Если вы будете следовать приведенному ниже списку, вы сможете получить хорошее представление о том, чего ожидать.
Если ваш код - чистый Python (list, float, for-loop и т. Д.), Вы можете увидеть значительное ускорение (возможно, до 100 x) при использовании векторизованного кода Numpy. Это также важный шаг, чтобы выяснить, как ваш код GPU может быть реализован, поскольку вычисления в векторизованном Numpy будут иметь похожую схему. Графический процессор лучше справляется с небольшими задачами, которые можно распараллелить.
Если у вас есть хорошо оптимизированный пример Numpy, вы можете попытаться получить первый взгляд на ускорение графического процессора с помощью Numba . Для простых случаев вы можете просто украсить свои функции Numpy для запуска на GPU. Вы можете ожидать ускорения от 100 до 500 по сравнению с кодом Numpy, если ваша проблема может быть распараллелена / векторизована.
Возможно, вы до сих пор обходились без написания кода OpenCL C для GPU, но ваш код все еще работает на нем. Но если ваша проблема слишком сложна, вам придется написать собственный код и запустить его, используя PyOpenCL . Ожидаемое ускорение также составляет от 100 до 500 по сравнению с хорошим кодом Numpy.
Важно помнить, что графический процессор является мощным, только если вы используете его правильно и только для определенного набора проблем.
Если у вас есть небольшой пример кода, не стесняйтесь его опубликовать.
Еще одна вещь, которую нужно сказать, это то, что CUDA часто проще в использовании, чем OpenCL. Больше библиотек, больше примеров, больше документации, больше поддержки. Nvidia с самого начала отлично поработала, не поддерживая OpenCL. Я обычно использую открытые стандарты, но мы быстро перешли на оборудование CUDA и Nvidia, когда дела стали коммерческими и коммерческими.