gpt4 book ai didi

opencl - OpenCL是否总是对设备内存进行零初始化?

转载 作者:行者123 更新时间:2023-12-04 07:03:34 26 4
gpt4 key购买 nike

我注意到,通常globalconstant设备内存被初始化为0。这是通用规则吗?我无法在standard中找到任何东西。

最佳答案

不,不是。例如,我有这个小内核来测试原子添加:

kernel void atomicAdd(volatile global int *result){
atomic_add(&result[0], 1);
}

使用以下主机代码(pyopencl + unittest)进行调用:
def test_atomic_add(self):
NDRange = (4, 4)
result = np.zeros(1, dtype=np.int32)
out_buf = cl.Buffer(self.ctx, self.mf.WRITE_ONLY, size=result.nbytes)
self.prog.atomicAdd(self.queue, NDRange, NDRange, out_buf)
cl.enqueue_copy(self.queue, result, out_buf).wait()
self.assertEqual(result, 16)

在使用我的CPU时总是返回正确的值。但是,在ATI HD 5450上,返回的值始终是垃圾。

而且,如果我还记得的话,在NVIDIA上,第一次运行返回的是正确的值,即16,但在接下来的运行中,返回的值是32、48,依此类推。它正在重用相同的位置,而旧值仍存储在该位置。

当我用这一行更正了我的主机代码时(将0值复制到缓冲区中):
out_buf = cl.Buffer(self.ctx, self.mf.WRITE_ONLY | self.mf.COPY_HOST_PTR, hostbuf=result)

在任何设备上,一切正常。

关于opencl - OpenCL是否总是对设备内存进行零初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18501258/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com