Существует хороший базовый набор математических конструкций с уже написанными вычислительными ядрами, к которым можно получить доступ через 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 более подробно описана.
Удачи!