问题一:如何实现全局同步哪?
问题二:《高性能并行计算之CUDA》中69页,那个__threadfence()函数对全局可见是怎么理解哪?一个线程在执行这个函数之前如果有另外一个线程要消费他修改的数据时,要消费数据的线程需要等待生产数据的线程执行完__threadfence()吗?
高手指点啊。。。期待中。。。
大家快来看那。。这个到底怎么完成啊。。。
Come on !!!
全局同步理想情况下是可以用原子函数,全局变量共同实现的。可是由于Kernel访存时,一个warp中的线程虽然都访问了一次那个全局变量,但是他的值实际只访问了一次。你循环的话,它就一直在哪里算,不会被调出SM,这样你就悲剧了,因为这是个无穷循环。最后你的屏幕不能动了,你的事件也不会响应了。你的机器风扇开到了最大。这是你应该一时到你的机器已经死掉了。你只能去长按电源开关。。。
关于第二个问题。我的理解是:你就是用个这个函数,你也难以预料被一个离他老远的线程如何消费你在调用函数前所作的访存努力。。兄弟,尽管一个Kernel的全局同步可以让你感觉到比分成两个Kernel调用效率要高。但是你并没有做成功这个实验。你玩着玩着突然发现,你多么希望你编写的是基于多CPU运行的程序哪。有各自的缓存,各自的寄存器,共享内存。就是网络传输也是可以接受的,。。。唉。。你发现你看的资料都是些太过基本的东西,好多你想要的功能难以在这个专用的计算核心GPU上实现,要是实现了,他就是通用核心了。我们甚至可以用它来写OS了。。
好像只有我自己在恢复。。。