在第一个代码示例 (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)