首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >翘曲线程不同步

翘曲线程不同步
EN

Stack Overflow用户
提问于 2020-09-12 00:43:43
回答 1查看 179关注 0票数 1

我正在进行并行约简来自Nvidia的例子。如果tid < 32,那么所有线程都应该处于相同的翘曲中,因此指令应该是SIMD同步的,所以我们可以假设sdata[tid] += sdata[tid + 32];sdata[tid] += sdata[tid + 16];之前完成了所有线程,等等。但这对我来说是不可能的

代码语言:javascript
复制
for (unsigned int s=groupDim_x/2; s>32; s>>=1) 
{ 
    if (tid < s) sdata[tid] += sdata[tid + s]; 
    GroupMemoryBarrierWithGroupSync(); 
}
if (tid < 32)
{ 
    sdata[tid] += sdata[tid + 32];
    sdata[tid] += sdata[tid + 16];
    sdata[tid] += sdata[tid +  8]; 
    sdata[tid] += sdata[tid +  4];
    sdata[tid] += sdata[tid +  2];
    sdata[tid] += sdata[tid +  1]; 
}

Cuda上相同问题的解决方案已经发布(看见),但它使用了指针和易失性关键字。Directcompute没有指针,并且不允许全局内存中的volatile关键字。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-23 00:14:33

Directcompute没有指针,并且不允许全局内存中的volatile关键字。

确实如此,但它将类似的功能公开为内部函数。将循环中的+=替换为InterlockedAdd 本征函数,看看会发生什么。但是,该函数仅适用于整数。

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

https://stackoverflow.com/questions/63855831

复制
相关文章

相似问题

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