【发布时间】:2019-04-25 13:30:54
【问题描述】:
假设内核的一个线程试图更新共享内存上的 4 个不同位置。如果任何其他线程覆盖了这些位置中的任何一个,我能否导致该操作失败并被撤销?具体来说,这可以原子执行吗?
mem[a] = x;
mem[b] = y;
mem[c] = z;
mem[d] = w;
【问题讨论】:
-
不,它不能以原子方式执行,在一般情况下,
a、b、c和d是任意的,和/或x、@987654327 @、z、w均为 32 位或更大。 “原子地”是指使用硬件提供的原子 RMW 操作。您可以使用临界区来实现这样的事情,可能会付出相当大的性能成本、代码复杂性和脆弱性。另一种选择是重铸您的算法以使用某种形式的并行缩减。 -
我明白了,谢谢。我将围绕这个限制重新考虑我的算法。顺便说一句,这条评论看起来像是一个有效的答案。
标签: cuda