(1)任何时候均不推荐对__constant__中的改写(包括常规写入和原子操作)+ 常规读取混合操作,这将导致未定义的读取值。(因为constant cache在本次kernel启动内,不维持和这些方式写入的一致性)。
(2)唯一接近的方式是,对__constant__全程使用原子操作进行改写+读取(例如,尝试一次原子操作增加0值并返回旧值)。
(3)但这样就失去了constant的意义,和直接使用普通显存或者__device__指针无区别了。
建议的解决方案:
(A)尝试能否本次改写,下次kernel启动读取,这也是常规做法,这样才可能发挥__constant__的效果。
(B)完全放弃__constant__使用普通存储。