内存写入慢,有没有办法突破

img2d =  ti.types.ndarray(element_dim=1)
img1d = ti.types.ndarray()
@ti.kernel
def bayergb2rgb_parallel(bayergbimg:img1d,mask:img2d,dst:img2d):
    print('hello taichi',bayergbimg.shape)  
    h,w = mask.shape[0],mask.shape[1]
    ti.loop_config(parallelize=100, block_dim=1)
    for i,j in ti.ndrange(h,w):
        real_r = 0
        real_g = 0
        real_b = 0
        num_r = 0
        num_g = 0
        num_b = 0
        ti.loop_config(parallelize=100, block_dim=1)
        for x,y in ti.ndrange(3,3):
            # 获取当前像素的位置
            curr_i = min(max(0, i - 1 + x), h - 1)
            curr_j = min(max(0, j - 1 + y), w - 1)
            # 获取当前像素的 Bayer 掩码和像素值
            r, g, b = mask[curr_i, curr_j]
            pixel = bayergbimg[curr_i, curr_j]
            real_r+=r*pixel
            real_g+=g*pixel
            real_b+=b*pixel
            num_r+=r
            num_g+=g
            num_b+=b
        real_r/=num_r
        real_g/=num_g
        real_b/=num_b
        #img_filtered[i,j] = real_r,real_g,real_b
        # 使用原子操作写入结果到目标图像中
        ti.atomic_add(dst[i, j][0], real_r)
        ti.atomic_add(dst[i, j][1], real_g)
        ti.atomic_add(dst[i, j][2], real_b)

这是我写的把BayerGB图像转成RGB的算法,可以正常运行,计算像素也很快,但是设计到给dst赋值速度就明显慢了。。。。
请问有没有优化方法?
(注释掉最后3行atomic_add的代码测下来只有发现计算像素只要0.0002秒,加上就要超多0.025秒 :face_with_thermometer:
我用的是cpu

遇到同样的问题,顶一个。我的情况是,定义了dense,之后用kernel访问并修改dense的值。在gpu端,加上最后的原子操作,程序变慢了5-6倍。尝试了改变数据分布,将AOS转换为SOA,情况有所好转,但仍慢3-4倍。与这个问题一同存在的是,改变block_dim=8时,kernel运行速度最快,这与warp以32的倍数调用线程的规则相差甚远