如何使原子设备在cuda中运行?

如何使原子设备在cuda中运行?,cuda,parallel-processing,atomic,Cuda,Parallel Processing,Atomic,我的内核将结果写入一些全局设备变量。 所以,我需要把函数写成原子函数。 可能吗? 如果不是,我将尝试对每个全局变量使用atomicExch()。 但其中一些是struct或float,而不是int。 正如我所知,原子操作是针对int的。 我该如何处理这个问题。 谢谢。我知道cudaErrorLaunchOutOfResources错误出现的原因。 我的内核使用了28个寄存器,但项目设置并没有涵盖它。 CUDA C/C++->设备->最大使用寄存器设置为0。将其更改为30后,错误消失。您是否阅读了

我的内核将结果写入一些全局设备变量。 所以,我需要把函数写成原子函数。 可能吗? 如果不是,我将尝试对每个全局变量使用atomicExch()。 但其中一些是struct或float,而不是int。 正如我所知,原子操作是针对int的。 我该如何处理这个问题。
谢谢。

我知道cudaErrorLaunchOutOfResources错误出现的原因。 我的内核使用了28个寄存器,但项目设置并没有涵盖它。
CUDA C/C++->设备->最大使用寄存器设置为0。将其更改为30后,错误消失。

您是否阅读了编程指南的说明?一些原子操作可以对
浮点
量进行操作。确切的原子支持将取决于您编译的GPU类型(计算能力)。原子不能用于整个结构,只能用于POD类型。你的问题是关于如何原子地更新多个变量(即一次更新所有变量)?thx,Robert。我的gpu是geforce gtx 750,计算能力是5.0。还有。结构是POD。我发现float有一个atomicExch,但正如你所说的,我如何申请POD结构?我的第一个问题是,有可能将用户定义的函数作为原子函数或多条指令的关键部分,因为我定义该函数是为了将结果分配给全局设备变量。要“原子地”更新整个结构,可能使用a是一种可能性。可能也有兴趣。非常感谢,这与比赛条件有关。我可以再问一个问题吗?我的内核因cudaErrorLaunchOutofResources而失败。我认为这与每个块过度使用寄存器有关。但ptxas告诉我们内核只使用28个寄存器。该内核以32*32=1024个线程启动,因此每个块使用的寄存器数量为1024*28=28672<65536(Geforce GTX 750)。因此,这不是原因。那怎么了?关于该内核函数的ptxas结果如下:1>ptxas信息:为'sm_50'1>ptxas信息编译输入函数'_Z9ARM_MatchPjPxiif':函数属性为_Z9ARM_MatchPjPxiif 1>224字节堆栈帧,0字节溢出存储,0字节溢出加载1>ptxas信息:使用了28个寄存器,348字节cmem[0]