В документации по 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]
Обычное сокращение Python для первой остановки для этого будет выглядеть примерно так:
for k in range(K):
for x in range(N):
a[k,x,:]=m[k,x,:]*b
Но я не вижу никакого простого способа сделать это с помощью GPUArray, кроме написания собственного поэлементного ядра, и даже тогда с этой проблемой в ядре должны быть циклические конструкции, и в этой точке сложности я, вероятно, лучше я просто пишу свое собственное полноценное ядро SourceModule.
Кто-нибудь может подсказать мне?