CUDA如何处理内存地址的多个更新?

rod*_*dms 1 parallel-processing cuda nvidia

我编写了一个CUDA内核,其中每个线程都对特定的内存地址进行更新(使用int size).某些线程可能希望同时更新此地址.

CUDA如何处理这个问题?操作是否成为原子?这会以任何方式增加我的应用程序的延迟吗?如果是这样,怎么样?

Rob*_*lla 7

该操作不会成为原子操作,它本质上是未定义的行为.当两个或多个线程写入同一位置时,其中一个值将最终位于该位置,但无法预测哪一个.

如果您正在阅读和写作,例如增加变量,则可能会出现问题.

CUDA提供了一组原子操作来提供帮助.

您还可以使用其他编码技术(如并行缩减),以便在对同一位置进行多次更新时提供帮助,例如查找最大值或最小值.

如果您不关心更新的顺序,则对于较新的GPU而言,它不应该是一个性能问题,它会自动将写入或读取压缩到全局内存或共享内存中的单个位置,但这也不是指定的行为.