首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么CUDA同步点不能阻止比赛条件?

为什么CUDA同步点不能阻止比赛条件?
EN

Stack Overflow用户
提问于 2016-04-24 22:07:05
回答 1查看 595关注 0票数 0

我们在代码上运行cuda-memcheck --tool racecheck <executable>。我们得到以下内存危险错误。

代码语言:javascript
运行
AI代码解释
复制
========= Race reported between Read access at 0x00004098 CUDA.cu:123:KernelFunction()
=========     and Write access at 0x00005058 in CUDA.cu:146:KernelFunction() [529996 hazards]  

这是密码。它声称第123行value = sharedMemory0[sharedMemoryIndex];处于第146行sharedMemory0[sharedIndex0] = sharedMemory1[sharedIndex1];的竞争状态。我们有

代码语言:javascript
运行
AI代码解释
复制
// Synchronization Point 1 
__syncthreads(); 
__threadfence_block();

在两条线之间。难道不是所有的线程都在这一点上同步,所有以前的内存都在这一点上完成了吗?在启动第二个j-循环之前,所有线程和内存访问都应该在第一个j-循环之后完成。因此,在我们的头脑中,同步点1应该隔离两个j-循环,防止竞争条件,但是工具说这不是真的。

为什么报告竞赛条件的工具?对于我们能做些什么来防止它,有什么见解吗?

我们还看到了对一个工具的引用,该工具可以报告执行的跟踪,以便更容易地查看争用条件。我们可以使用什么工具和选项来获得跟踪,以更清楚地了解为什么存在竞赛条件?

代码语言:javascript
运行
AI代码解释
复制
   for (i = 0; i < COUNT0; i++) {
       // Synchronization Point 0
       __syncthreads();
       __threadfence_block();
       for (j = 0; j < COUNT1; j++) {
          index = j*blockDim.x + threadIdx.x;
          if (index < THREAD_COUNT0) {
             for (k = 0; k < COUNT2; k++)
                sharedMemoryIndex = function0(index);
                value = sharedMemory0[sharedMemoryIndex];
             }
          }         
       }

       // Synchronization Point 1
       __syncthreads();
       __threadfence_block();
       for (j = 0; j < COUNT2; j++) {
          index = j*blockDim.x + threadIdx.x;
          if (index < THREAD_COUNT1) {
            sharedIndex0 = function1(index);
            sharedIndex1 = function2(index);
            sharedMemory0[sharedIndex0] = sharedMemory1[sharedIndex1];
          }
       }
    }

我们还运行了同步检查工具cuda-memcheck --tool synccheck <executable>,它在同步点1上报告了以下错误。这两个错误之间可能有很强的相关性,但是在cuda指南中并没有关于发散代码的同步是什么、为什么不好以及如何修复它的大量文档。

有什么评论吗?

代码语言:javascript
运行
AI代码解释
复制
========= Barrier error detected. Encountered barrier with divergent threads in block
=========     at 0x00004ad8 in CUDA.cu:139:KernelFunction()
=========     by thread (0,0,0) in block (8,0,0)
EN

回答 1

Stack Overflow用户

发布于 2016-04-25 09:46:53

没有足够的数据准确地指出你的问题。但是,最后一条错误消息非常重要:

代码语言:javascript
运行
AI代码解释
复制
Barrier error detected. Encountered barrier with divergent threads in block

看来,块中的一个线程达到了某些障碍,而另一个线程却没有达到,因为它位于一个未被占用的分支中。注意,如果在块中的线程之间的循环条件不同,那么发散分支不仅发生在if条件中,而且也发生在循环中。

当一些线程因为它而错过一个__syncthreads()时,可能会发生一些奇怪的事情。在实践中,这通常意味着这些线程停在不同的__syncthreads()上,系统认为所有事情都是同步的,而不是同步的。这可能会导致您描述的赛车情况。

所以-找到你的发散的__syncthreads() -这很可能是你的问题的原因。问题可能在你所包含的片段之前。

另外:

  • i是局部变量(不是共享的)吗?
  • 对于块中的所有线程,COUNT0都是相同的吗?
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36833129

复制
相关文章
如何像黑客军团主角那样将文件隐藏在音频中
这些年来黑客军团(Mr. Robot)一直是我最喜欢的电视剧,演员Rami Malek所扮演的有社交焦虑症,游离于肤浅而物质的社会之边缘却又想让世界更美好的年轻人这一角色让我印象很深,不过我喜欢这部电视剧并不是因为我想要像主角Elliot那样在生活中进行真实的入侵。Rami Malek的演绎是无与伦比的,我相信未来几年我们会更多地在电视剧中看到他。顺带一提,我觉得对于Evil Corp员工的叙述有点枯燥,特别是Tyrell Wellick,有点陈词滥调的感觉,不过总体来说,这部剧是自绝命毒师以来最棒的一部!
昨天50还没用完
2018/06/29
1K0
【C#】使用IExtenderProvider为控件添加扩展属性,像ToolTip那样
- 文中的“控件”一词是广义上的说法,泛指包括ToolStripItem、MenuItem在内单个界面元素,并不特指继承自Control类的狭义控件
AhDung
2018/09/13
1.7K0
【C#】使用IExtenderProvider为控件添加扩展属性,像ToolTip那样
如何像黑客军团主角那样将文件隐藏在音频中
这些年来黑客军团(Mr. Robot)一直是我最喜欢的电视剧,演员Rami Malek所扮演的有社交焦虑症,游离于肤浅而物质的社会之边缘却又想让世界更美好的年轻人这一角色让我印象很深,不过我喜欢这部电视剧并不是因为我想要像主角Elliot那样在生活中进行真实的入侵。Rami Malek的演绎是无与伦比的,我相信未来几年我们会更多地在电视剧中看到他。顺带一提,我觉得对于Evil Corp员工的叙述有点枯燥,特别是Tyrell Wellick,有点陈词滥调的感觉,不过总体来说,这部剧是自绝命毒师以来最棒的一部!
FB客服
2018/02/26
1.1K0
如何像黑客军团主角那样将文件隐藏在音频中
“人工迷你大脑”像蜜蜂那样思考
欧洲机器人研究团队开发了一种带有“人工迷你大脑”的机器人,这种机器人参考了蜜蜂的思维方式,可以自己学习怎样对周围的环境做出反应。 NeuroRover外形小巧,带有滚轮,长25cm,宽10cm。配有两部用于颜色处理和光线传感的摄像机。 例如,当机器人在学习作出特定的关联,例如关联红色的物体时,电机网络的活动模式改变,并且机器人将自动转向目标,因为蜜蜂采蜜时就是将花蜜和花的颜色关联起来。 这种技术将使机器人可以将特定的环境刺激与行为规则联系起来,这种仿生结构的人工智能是最有潜力在更广泛的机器人系统推广的应用。
机器人网
2018/04/12
4910
要快!像华为和Commvault抓住二级存储市场的变化那样
面对即将出现的用户潜在需求,科技公司需要表现得像一条寻血猎犬那样,嗅觉灵敏、行动迅速。
IT创事记
2022/06/16
2860
要快!像华为和Commvault抓住二级存储市场的变化那样
Mysql 能像 MongoDB 那样存储文档了
Mysql 5.7.12 做出了一项重大改进:支持文档型存储,意味着在 Mysql 中就可以像 MongoDB 那样存储 JSON document 了 这项改进的意义非常重大,Mysql是传统的关系型数据库,加入对文档的支持,意味着Mysql要突破‘关系型数据’概念的束缚,融入NoSQL数据库的优势,只要是好到的东西,以后必然会吸收得更多 支持文档存储之后,对已经非常熟悉Mysql,同时又对文档存储有需求的开发者带来了便利,他们可以直接使用Mysql,不必使用 Mysql + MongoDB 的混合环境了
dys
2018/04/03
1.8K0
如何像巫师那样隔空操作——聊聊迷你雷达的原理和应用
最近谷歌I/O中亮相的迷你雷达(project soli)着实令人眼前一亮。现场展示中,该雷达可以捕捉手指的细微运动,可以隔空通过手势控制手表屏幕翻页,可以通过变化手指与屏幕距离实时改变UI元素,好像巫师施展魔法操作一般。怀着好奇心,本文来聊聊雷达背后的黑科技,作为科普。 雷达,英文Radar(Radio Detection And Ranging),利用发射“无线电磁波”得到反射波来探测目标物体的距离,角度,和瞬时速度。从1922年无线电之父马可尼(Guglielmo Marchese Marconi)提
用户1737318
2018/06/05
1.3K0
像Spring Boot那样创建一个你自己的Starter
如果你所在的公司要开发一个共享的lib,或者如果你想要为开源世界做点贡献,你也许想要开发你自己的自定义的自动配置类以及你自己的starter pom。这些自动配置类虽然在一个单独的jar包中,但却依然能够被Spring Boot获取到。 自动配置(Auto-configuration)其实就是一个starter。starter这个词是不是很熟悉,没错,就是Spring Boot中的那些看起来略屌的启动器。现在你可以自己编写一个自己的starter了。在一个starter里,你可以把一组dependency和
ImportSource
2018/04/03
8920
Facebook批量优化360照片
自去年推出该功能以来,人们已经向Facebook上传了超过7000万张360度照片。Facebook使用多种方法来捕获360度照片和视频,这使人们可以与他们的朋友分享身临其境的体验。如果您拥有专用的360度相机,如理光Theta S或Giroptic iO,则可以从相机直接发布到Facebook。而现在大部分高端Android和iOS智能手机也都拥有全景模式的相机,可用于拍摄360度照片。
LiveVideoStack
2021/09/02
6600
Facebook批量优化360照片
Gradle构建时像Maven那样根据profile环境打包
Gradle中并没有直接类似Maven中的profiles支持,但是可以在processResources 任务中写一些脚本,通过传入的系统属性profile值来支持.
白石
2021/03/07
2K0
WordPress Flickr 相册插件:Flickr Photo Album
你是否使用 Flickr,你是否想把你的图片整合到你的 blog 上,如果是的话,那么请你试试下面这个插件吧!翻译自:Weblog Tools Collection 的 APAD: Flickr Photo Album
Denis
2023/04/13
4870
R语言ggplot2绘图单元格为方块的热图—1—调整图例的位置
分别需要用到legend.spacing.y和legend.spacing.x参数
用户7010445
2021/04/21
3.7K0
R语言ggplot2绘图单元格为方块的热图—1—调整图例的位置
像tomcat容器那样自定义一个 Classloader
最近本人在写一个service container,需要加载指定的jar。需要自定义一个classloader,可以加载到指定的jar包中的class。 以下是具体实现,其实最核心的就是重写findClass方法。 代码如下: public class AppClassLoader extends ClassLoader { private static Map<String, Class> classes = new HashMap<String, Class>(); private static A
ImportSource
2018/04/03
7690
徐大大seo:15个可以做外链的社交平台
社交营销正如日中天,在国外流行的社交网站可以有效为自己的网站、店铺做推广引流,下面我们就来看看有哪些不错的国际社交网站。
徐大大seo
2022/05/14
1.2K0
如何提升程序的可读性?像写书那样去写程序
首先,这是一项很有价值的能力。可读性好的程序更容易得到维护与复用,这就提升了你的工作价值。它还可以为你在团队中建立良好的个人声誉。而当你成为团队中的主力时,你的代码会被团队其它成员效仿与借鉴,所以它的影响力会超越自身,带动整个团队的代码质量。
技术zhai
2019/02/15
4310
科学养猫|像猫那样“缓慢眨眼”,你的猫主子更爱你
猫是我行我素的代表。不像狗一样,听从主人的命令。它不将主人视为君主(反而有可能是仆从),不会唯命是从。猫和主人并不是主从关系,把它们看成平等的朋友关系会更好一些。怎么处理好和猫猫的关系呢,你可能需要一些科学的技巧。
用户6317549
2020/10/26
7860
科学养猫|像猫那样“缓慢眨眼”,你的猫主子更爱你
麻省理工研发软体机器鱼,可以像真正的鱼类那样游泳
据外媒New Atlas报道,随着BBC 令人难以置信的野生动物纪录片的不断演示,伪装成动物的机器人已经为我们提供了对自然世界的前所未有的见解。现在,麻省理工学院(MIT)计算机科学和人工智能实验室(CSAIL)的科学家们开发出了一种机器鱼,它可以像真正的鱼类那样游泳。 尽管水下机器人并不是新产品,但CSAIL团队表示,这些机器人通常被束缚在船只上。被称为SoFi的柔性机器鱼采取了一种不同的方法。其外部由硅橡胶和柔性塑料制成,里面是一个普通的锂聚合物智能电池,为电机提供动力,该电机将水泵入两个像
机器人网
2018/04/12
6140
麻省理工研发软体机器鱼,可以像真正的鱼类那样游泳
ACDSee Photo Studio 9 for Mac(数字图像处理软件)
ACDSee Photo Studio 是由 ACD Systems 开发的流行的照片编辑和管理软件。它提供了广泛的工具来组织、查看、编辑和共享数码照片。使用 ACDSee Photo Studio,您可以从各种设备导入照片,将它们组织到文件夹中,并按日期、关键字、评级或其他标准对它们进行排序。您还可以使用各种工具编辑照片,例如裁剪、调整大小、调整颜色、消除红眼以及应用滤镜和效果。此外,ACDSee Photo Studio 允许您将照片直接分享到社交媒体平台或以各种文件格式导出。
用户10121095
2023/04/24
9830
点击加载更多

相似问题

像Facebook和Orkut相册照片那样的照片标记?

40

如何像facebook的照片查看器那样修改历史?

10

从Flickr,Facebook,Instagram和iPhoto上找到丢失的照片

33

如何从flickr api自动调整照片大小?

10

用API Flickr Python将照片上传到Flickr

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档