【发布时间】:2014-11-10 23:32:53
【问题描述】:
我的内核将结果写入一些全局设备变量。 所以,我需要把函数写成原子函数。 可能吗? 如果不是,我正在尝试对每个全局变量使用 atomicExch() 。 但其中一些是 struct 或 float 而不是 int。 据我所知,原子操作是针对 int 的。 我该如何处理这个问题。 谢谢。
【问题讨论】:
-
你读过编程指南的relevant section吗?一些原子操作可以对
float数量进行操作。确切的原子支持将取决于您正在编译的 GPU 类型(什么计算能力)。原子不能用于整个结构,只能用于 POD 类型。您的问题是关于如何以原子方式更新多个变量(即一次全部更新)? -
谢谢,罗伯特。我的 GPU 是 geforce gtx 750,计算能力是 5.0。并且。结构是 POD。我发现float有一个atomicExch,但正如你所说,我如何申请POD struct?我的第一个问题是,它可以将用户定义的函数作为原子函数或几个指令的关键部分,因为我定义了将结果分配给全局设备变量的函数。
-
“原子地”更新整个结构,可能使用critical section code 是一种可能性。 This question 也可能感兴趣。
-
非常感谢,它非常适合比赛条件。我可以再问一个问题吗?我的内核因 cudaErrorLaunchOutofResources 而失败。我认为这与每个块过度使用寄存器有关。但是 ptxas 告诉内核只使用 28 个寄存器。该内核以 32*32 = 1024 个线程启动,因此每个块使用的寄存器数量为 1024*28 = 28672
-
1> ptxas info : 为 'sm_50' 编译入口函数 '_Z9ARM_MatchPjPxiif' 1> ptxas info : _Z9ARM_MatchPjPxiif 的函数属性 1> 224 字节堆栈帧,0 字节溢出存储,0 字节溢出加载 1> ptxas info : 使用了 28 个寄存器,348 字节 cmem[0]
标签: cuda parallel-processing atomic