首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CUDA shuffle的竞争条件?

CUDA shuffle的竞争条件?
EN

Stack Overflow用户
提问于 2012-08-16 17:34:22
回答 1查看 599关注 0票数 1

使用shuffle命令,当两个不同的线程并发地尝试更新相同的寄存器值时,是否存在竞争条件/丢失的更新?

EN

回答 1

Stack Overflow用户

发布于 2014-06-06 05:31:43

这是此处提供的较晚的答案,用于从未回答列表中删除此问题。

来自CUDA C编程指南

__shfl()内部函数允许在不使用共享内存的情况下在warp内的线程之间交换变量

其思想是线程i可以读取分配给线程j的寄存器r的值,但不能更改该值。因此,正如上面的评论所指出的,没有竞争条件。

CUDA C编程指南》还提供了以下跨偏差广播单个值的示例

代码语言:javascript
复制
global__ void bcast(int arg) {

    int laneId = threadIdx.x & 0x1f;
    int value;

    if (laneId == 0)          // Note unused variable for
    value = arg;              // all threads except lane 0
    value = __shfl(value, 0); // Get "value" from lane 0
    if (value != arg) printf("Thread %d failed.\n", threadIdx.x); }

void main() {
    bcast<<< 1, 32 >>>(1234);
    cudaDeviceSynchronize();
}

在此示例中,分配给warp中的线程0value寄存器的值被广播到warp中的所有其他线程,并分配给本地value寄存器。所有其他线程不会尝试(,但也不能)更改分配给线程0value寄存器的值。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11984392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档