我想在CUDA中实现此原子功能:
__device__ float lowest; // global var
__device__ int lowIdx; // global var
float realNum; // thread reg var
int index; // thread reg var
if(realNum < lowest) {
lowest= realNum; // the new lowest
lowIdx= index; // update the 'low' index
}
我不相信我可以用任何原子功能来做到这一点.我需要为几个指令锁定几个全局内存位置。 我可以用PTXAS(汇编)代码实现吗?
最新回答
- 2021-1-111 #
- 2021-1-112 #
@Robert Crovella:很好的主意,但是我认为应该对功能进行如下修改:
__device__ unsigned long long int my_atomicMin(unsigned long long int* address, float val1, int val2) { my_atomics loc, loctest, old; loc.floats[0] = val1; loc.ints[1] = val2; loctest.ulong = *address; old.ulong = loctest.ulong; while (loctest.floats[0] > val1){ old.ulong = loctest.ulong; loctest.ulong = atomicCAS(address, loctest.ulong, loc.ulong); } return old.ulong; }
相关问题
- CUDA原子改变标志cudaatomic2021-01-11 01:56
正如我在上面第二条评论中所述,可以将两个32位量合并为一个64位原子管理量 ,然后以这种方式处理问题.然后,我们使用任意原子示例作为粗略指南,以原子方式管理64位数量.显然,您不能将这个想法扩展到两个32位数量之外.这是一个示例: