总觉得自己的算法没问题,最终还是测试结果不符。
错误出现在一个很顺眼的位置。
解决方案
在最终测验阶段有一个看起来没问题不需要任何修改的Cell,就是这一句,看起来没什么毛病
d_histogram_out = cuda.device_array_like(histogram_out)
需要修改为全零设备数组才能通过测试,如:
zero_array = np.zeros(histogram_out.shape[0])
d_histogram_out = cuda.to_device(zero_array)
注:cuda小白,不知道怎么直接创建设备全零数组,只能这样了,知道的可以评论
最终效果图
算法
@cuda.jit
def cuda_histogram(x, xmin, xmax, histogram_out):'''Increment bin counts in histogram_out, given histogram range [xmin, xmax).'''nbins = histogram_out.shape[0]bin_width = (xmax - xmin) / nbinsidx = cuda.grid(1)size = cuda.gridsize(1)for i in range(idx, x.shape[0], size):bin_number = np.int32((x[i] - xmin)/bin_width)if bin_number >= 0 and bin_number < histogram_out.shape[0]:cuda.atomic.add(histogram_out, bin_number, 1)