Могу ли я программировать CvA от Nvidia, используя только Python, или мне нужно изучать C? - PullRequest
36 голосов
/ 01 июня 2010

Я думаю, вопрос говорит сам за себя. Я заинтересован в некоторых серьезных вычислениях, но я не программист по профессии. Я могу связать достаточно Python вместе, чтобы сделать то, что я хочу. Но могу ли я написать программу на python и выполнить ее с помощью CUDA? Или я должен использовать смесь Python и C?

Примеры на веб-странице "pyCUDA" Клокнера (sp) содержали смесь как python, так и C, поэтому я не уверен, что ответ.

Если кто-то хочет присоединиться к Opencl, не стесняйтесь. Я слышал об этом бизнесе CUDA всего пару недель назад и не знал, что вы можете использовать свои видеокарты вот так.

Ответы [ 8 ]

20 голосов
/ 20 июня 2010

Вам стоит взглянуть на CUDAmat и Theano . Оба подхода являются подходом к написанию кода, который выполняется на графическом процессоре, и при этом не нужно много знать о программировании на графическом процессоре.

18 голосов
/ 01 июня 2010

Я считаю, что с PyCUDA ваши вычислительные ядра всегда должны быть написаны как "CUDA C Code". PyCUDA берет на себя большую часть утомительного бухгалтерского учета, но не создает вычислительные ядра CUDA из кода Python.

8 голосов
/ 01 июня 2010

pyopencl предлагает интересную альтернативу PyCUDA. Это описывается как «родственный проект» для PyCUDA. Это полная оболочка для API OpenCL.

Насколько я понимаю, преимущество OpenCL в том, что он работает на графических процессорах по сравнению с Nvidia.

5 голосов
/ 28 июня 2010

Хорошие ответы уже есть, но другой вариант - Clyther . Это позволит вам писать программы OpenCL, даже не используя C, путем компиляции подмножества Python в ядра OpenCL.

4 голосов
/ 27 июня 2011

Многообещающая библиотека: Copperhead ( альтернативная ссылка ), вам просто нужно украсить функцию, которую вы хотите запустить с помощью графического процессора (и затем вы можете выбрать Откажитесь от этого, чтобы увидеть, что лучше между процессором или процессором для этой функции)

1 голос
/ 26 февраля 2011

Существует хороший базовый набор математических конструкций с уже написанными вычислительными ядрами, к которым можно получить доступ через cumath модуль pyCUDA . Если вы хотите сделать более сложный или специфический / нестандартный материал, вам нужно будет написать немного C в определении ядра, но хорошая вещь в pyCUDA заключается в том, что он сделает тяжелую C-поднятие за вас; он выполняет много метапрограммирования на бэкэнде, поэтому вам не нужно беспокоиться о серьезном программировании на C, только о маленьких кусочках. Одним из приведенных примеров является ядро ​​Map / Reduce для вычисления точечного произведения:

dot_krnl = ReductionKernel(np.float32, neutral="0", reduce_expr="a+b", map_expr="x[i]*y[i]", arguments="float *x, float *y")

Маленькие фрагменты кода внутри каждого из этих аргументов представляют собой строки C, но на самом деле они пишут программу для вас. ReductionKernel - это пользовательский тип ядра для функций типа map / reducish, но есть разные типы. Часть примеров официальной документации pyCUDA более подробно описана.

Удачи!

0 голосов
/ 29 августа 2016

Мне было интересно то же самое, и я провел несколько поисков. Я нашел ссылку ниже, которая, кажется, отвечает на ваш вопрос. Тем не менее, вы спросили об этом еще в 2014 году, а в статье Nvidia нет даты.

https://developer.nvidia.com/how-to-cuda-python

Видео проходит настройку, первоначальный пример и, что немаловажно, профилирование. Однако я не знаю, сможете ли вы реализовать все обычные общие шаблоны вычислений. Я думаю, вы можете, потому что, насколько я мог, в NumPy нет никаких ограничений.

0 голосов
/ 04 апреля 2014

Пакет Scikits CUDA может быть лучшим вариантом, при условии, что он не требует каких-либо низкоуровневых знаний или кода C для любой операции, которая может быть представлена ​​как манипулирование массивом.

...