Документация PyCUDA немного освещает примеры для тех из нас, кто находится в классе «не-гуру», но мне интересно узнать об операциях, доступных для операций с массивами в gpuarrays, т.е.если бы я хотел gpuarray этот цикл;
m=np.random.random((K,N,N))
a=np.zeros_like(m)
b=np.random.random(N) #example
for k in range(K):
for x in range(N):
for y in range(N):
a[k,x,y]=m[k,x,y]*b[y]
Регулярное сокращение с первым питоном для этого было бы что-то вроде
for k in range(K):
for x in range(N):
a[k,x,:]=m[k,x,:]*b
Но я не вижу никакого простого способа сделатьэто с GPUArray, кроме написания пользовательского поэлементного ядра, и даже тогда с этой проблемой должны быть циклические конструкции в ядре, и на этом этапе сложности мне, вероятно, лучше написать простое ядро SourceModule.
Кто-нибудь может подсказать мне?