【问题标题】:Is it safe that two threads write a same value into a same global memory variable without any locks or synchronizations?两个线程在没有任何锁或同步的情况下将相同的值写入相同的全局内存变量是否安全?
【发布时间】:2012-11-27 18:27:52
【问题描述】:

两个线程在没有任何锁或同步的情况下将相同的值写入相同的全局内存变量是否安全?

结果总是确定的和正确的吗?

共享内存变量和寄存器变量呢?

【问题讨论】:

    标签: cuda


    【解决方案1】:

    您可以在这里找到类似的问题(有答案): Concurrent writes in the same global memory location

    一般来说,并行编程模型不保证多个线程之间的执行顺序。所以你在每个程序执行中都会有不同的行为。

    【讨论】:

    • 但是 Tom 和 talonmies 的两个答案完全相反。哪个是对的?虽然 talonmies 的回答被接受了,但@Tom's 比 talonmies 更新得多,并且引入了更多参考资料。
    • Tom 在那里是正确的 - 在计算能力 2.0 或更高版本上,其中一项写入将成功,但未定义哪一项。所有计算能力上的共享内存也是如此(假设访问是自然对齐的,无论如何这总是需要的)。寄存器变量是线程私有的,所以那里永远不会发生冲突。
    • 关于汤姆的回答:他说如果所有线程在相同的地址写入相同的值就可以了。这是一个非常特殊的情况。这里的问题是猜测哪个线程使 last 写入。
    猜你喜欢
    • 2020-08-03
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 2023-02-13
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    相关资源
    最近更新 更多