Ответ 1
Вы должны взглянуть на CUDAmat и Theano. Оба являются подходами к написанию кода, который выполняется на графическом процессоре, не имея особого смысла в программировании GPU.
Я думаю, вопрос говорит сам за себя. Мне интересно делать серьезные вычисления, но я не программист по профессии. Я могу собрать достаточно питона вместе, чтобы сделать то, что я хочу. Но могу ли я написать программу на python и выполнить ее с помощью CUDA? Или мне нужно использовать некоторое сочетание python и C?
Примеры на веб-странице Klockner (sp) "pyCUDA" имели сочетание как python, так и C, поэтому я не уверен, что такое ответ.
Если кто-то хочет перезвонить в Opencl, не стесняйтесь. Я слышал об этом бизнесе CUDA всего пару недель назад и не знал, что вы можете использовать свои видеокарты, как это.
Вы должны взглянуть на CUDAmat и Theano. Оба являются подходами к написанию кода, который выполняется на графическом процессоре, не имея особого смысла в программировании GPU.
Я считаю, что с PyCUDA ваши вычислительные ядра всегда должны быть написаны как "CUDA C Code". PyCUDA берет на себя ответственность за ненужное утомительное ведение бухгалтерского учета, но не создает вычислительные ядра CUDA из кода Python.
pyopencl предлагает интересную альтернативу PyCUDA. Он описывается как "сестра проекта" для ПИКУДА. Это полная оболочка API OpenCL.
Насколько я понимаю, OpenCL имеет преимущество работы на графических процессорах за пределами Nvidia.
Отличные ответы уже есть, но другой вариант Clyther. Это позволит вам писать программы OpenCL, даже не используя C, путем компиляции подмножества Python в ядра OpenCL.
Обещающая библиотека Copperhead (альтернативная ссылка), вам просто нужно украсить функцию, которую вы хотите запустить графическим процессором (а затем вы можете выбрать ее/отказаться от нее, чтобы узнать, что лучше всего между процессором или gpu для этой функции)
Существует хороший базовый набор математических построений с уже записанными ядрами, к которым можно получить доступ через 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 подробнее рассматривается.
Удачи!
Пакет Scikits CUDA может быть лучшим вариантом при условии, что он не требует каких-либо низкоуровневых знаний или кода C для любой операции, которая может быть представлено как массивное манипулирование массивами.
Мне было интересно то же самое и провела несколько поисков. Я нашел статью, связанную ниже, которая, кажется, отвечает на ваш вопрос. Однако вы спросили об этом еще в 2014 году, а статья Nvidia не указала дату.
https://developer.nvidia.com/how-to-cuda-python
Видео проходит через настройку, исходный пример и, что немаловажно, профилирует. Однако я не знаю, можете ли вы реализовать все обычные общие шаблоны вычислений. Я думаю, вы можете, потому что, насколько я мог, в NumPy нет ограничений.