Parallel processing CUDA如何处理对内存地址的多次更新?

Parallel processing CUDA如何处理对内存地址的多次更新?,parallel-processing,cuda,nvidia,Parallel Processing,Cuda,Nvidia,我已经编写了一个CUDA内核,其中每个线程都使用int size对特定的内存地址进行更新。某些线程可能希望同时更新此地址 CUDA是如何处理的?这个操作是原子化的吗?这是否以任何方式增加了我的应用程序的延迟?如果是这样,怎么做?该操作不会变成原子操作,而且本质上是未定义的行为。当两个或多个线程写入同一位置时,其中一个值将在该位置结束,但无法预测是哪一个 如果您正在读写,例如增加一个变量,那么这个问题会特别严重 CUDA提供了一套帮助 您还可以使用其他编码技术,例如并行缩减,在同一位置有多个更新时

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


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

该操作不会变成原子操作,而且本质上是未定义的行为。当两个或多个线程写入同一位置时,其中一个值将在该位置结束,但无法预测是哪一个

如果您正在读写,例如增加一个变量,那么这个问题会特别严重

CUDA提供了一套帮助

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


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

该操作不会变成原子操作,而且本质上是未定义的行为。当两个或多个线程写入同一位置时,其中一个值将在该位置结束,但无法预测是哪一个

如果您正在读写,例如增加一个变量,那么这个问题会特别严重

CUDA提供了一套帮助

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


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

谢谢!这正是我所需要的!非常感谢。这正是我所需要的!