不同的block对于同一段global memory的数据都在cache中有拷贝,一个block的线程修改的数据后,即使使用threadfence,以及block之间的同步之后(版主不建议这么做,原因见http://cudazone.nvidia.cn/forum/forum.php?mod=viewthread&tid=7170&page=1#pid49684),别的block也无法读取到新修改的值。
我用volatile修饰数组指针后,可以解决这个问题,但是效率是不是太低了,因为每次都是从内存里边读取/写入,有没有更好的解决一致性的方法,或者绕过这个问题?
此外,在数组比较大的时候(比如100万),依旧会出现一致性的问题,请问是为什么,cuda里边对volatile的变量是如何实现和处理的,谢谢各位。
|