为什么使用共享内存的内核代码必须同步?(CUDA)

为什么使用共享内存的内核代码必须同步?(CUDA),cuda,Cuda,CUDA和GPU并行计算的理论问题 正如我所知,内核是由GPU执行的代码、函数。 每个内核都有一个由块组成的网格,块有线程。 因此,每个内核(代码)甚至由数千个线程执行 我对共享内存和内核代码同步有疑问。 你能证明在使用共享内存的内核代码中同步的必要性吗? 同步是如何影响处理效率的?CW要从未答复列表中删除此问题,请回答: 你能证明在使用共享内存的内核代码中同步的必要性吗 \uuuu syncthreads()经常出现在使用共享内存的内核中,在共享内存加载之后,这些内核使用共享内存来防止争用情况

CUDA和GPU并行计算的理论问题

正如我所知,内核是由GPU执行的代码、函数。 每个内核都有一个由块组成的网格,块有线程。 因此,每个内核(代码)甚至由数千个线程执行

我对共享内存和内核代码同步有疑问。 你能证明在使用共享内存的内核代码中同步的必要性吗?
同步是如何影响处理效率的?

CW要从未答复列表中删除此问题,请回答:

你能证明在使用共享内存的内核代码中同步的必要性吗

\uuuu syncthreads()
经常出现在使用共享内存的内核中,在共享内存加载之后,这些内核使用共享内存来防止争用情况。由于共享内存通常是协同加载的(由块中的所有线程加载),因此在任何线程开始使用加载的数据进行进一步处理之前,必须确保所有线程都已完成加载操作

\uuuu syncthreads()
已记录在案


请注意,它只同步给定块内的线程,而不同步网格范围内的线程。

\uuu syncthreads()
经常出现在共享内存加载后使用共享内存的内核中,以防止出现争用情况。由于共享内存通常是协同加载的(由块中的所有线程加载),因此在任何线程开始使用加载的数据进行进一步处理之前,必须确保所有线程都已完成加载操作。@Robert Crovella谢谢,这就是我要找的答案!