Подтвердить что ты не робот

Могу ли я программировать Nvidia CUDA, используя только Python, или мне нужно изучить C?

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

pyopencl предлагает интересную альтернативу PyCUDA. Он описывается как "сестра проекта" для ПИКУДА. Это полная оболочка API OpenCL.

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

Ответ 4

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

Ответ 5

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

Ответ 6

Существует хороший базовый набор математических построений с уже записанными ядрами, к которым можно получить доступ через pyCUDA cumath module. Если вы хотите сделать больше задействованных или конкретных/настраиваемых материалов, вам нужно будет написать прикосновение C в определении ядра, но приятная вещь о pyCUDA заключается в том, что он сделает тяжелый 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 подробнее рассматривается.

Удачи!

Ответ 7

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

Ответ 8

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

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

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