В первом примере кода (kernel_conv) я запрограммировал простую свертку, и она работала с ожидаемым результатом [1,1,2,1,1].
Затем я использовал поэлементное ядро для суммирования всех записей вектора.Однако, если я запускаю второй пример (kernel_sum), я получаю результат [3,0,0], но ожидаю [6,0,0].
В чем разница между этими двумя примерами?Почему переменная y в первом примере обновляется, а во втором она кажется перезаписанной?
import numpy as np
import cupy as cp
kernel_conv = cp.ElementwiseKernel(
'raw float32 x', 'raw float32 y',
''' int idx = i*2 + 1;
for(size_t j=0;j<3;j++){
y[idx - 1 + j] += x[j];
}
''', 'conv')
x = cp.asarray(np.array([1,1,1]),dtype=np.float32)
y = cp.zeros((5,),dtype=np.float32)
z = kernel_conv(x,y,size=2)
print(z)
kernel_sum = cp.ElementwiseKernel(
'raw float32 x', 'raw float32 y',
'''
y[0] += x[i]
''', 'summe')
x = cp.asarray(np.array([1, 2, 3]), dtype=np.float32)
y = cp.zeros((3,),dtype=np.float32)
z = kernel_sum(x,y,size=3)
print(z)