Параллельное программирование на python, разгрузка на GPU
На мой взгляд, я пишу научный код на Python, содержащий множество очень параллелизуемых циклов for. В этих циклах я вызываю множество функций, принадлежащих классам, из библиотеки python2.7 с открытым исходным кодом, поэтому невозможно было бы перейти на другой язык. Если это не может быть связано с питоном. У меня есть два разных кода ->
Вызывает C-binaries* в самом внутреннем цикле, который является горлышком бутылки, поскольку он может использовать только один поток, а затем записывает результаты на диск.
Вызывает функции с открытым исходным кодом C PyObject-** во внутреннем цикле, сохраняет в ndarray, записывает на диск во внешнем цикле
Можно ли сделать разгрузку цикла for в любом из них для GPU? (NVIDIA GTX GPU) Например. используя OpenACC(Anaconda)/PGI, PyCUDA или PyOpenCL или даже OpenCV?
(* Зависит от пути для хранения ГБ временных данных, например, $HOME/tmp/) (** Менее распараллеливаемый, поскольку они зависят от предыдущей итерации..)
Ввод изображений CT -> 3d np.arrays значений int16 со знаком
У меня есть восемь потоков процессора, которые я могу использовать полностью с multiprocessing.pool, однако мой GPU ничего не делает. Предположим, 8 ГБ ОЗУ, используя < 2 ГБ. Использование Arch-Linux.
PS. Я открыт для предложений по модернизации оборудования -> Я занимаюсь исследованиями рака, что делает возможным финансирование.