Tchecker反映程序中有冲突,但是执行时能返回正确结果,那么我应该怎么做呢?

bjt_ 2007-01-14 04:54:04
在使用openMP线程化程序时,在已经对程序中的所有循环中可能冲突的变量加过omp的private关键字,并且执行结果也正确的情况下,Tchecker还是提醒我有:Write -> Read data-race Memory read at [potential_serial.exe, 0x5250] conflicts with a prior memory write at [potential_serial.exe, 0xd598] (flow dependence)以及output dependence。我应该怎么办?
...全文
339 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
icansaymyabc 2007-01-18
  • 打赏
  • 举报
回复
最让我迷惑的那次,刚刚启动的机器,用 icl 命令行带了几个参数编译后tcheck报告了数据冲突.同样的命令行重编了几次都有冲突.
我改用没有参数的 icl 命令直接编译,没有冲突.
我逐步把参数一个一个地加上最后还原成了最开始的命令行,编译结果还是没有冲突.

我每次编译都是把中间文件和EXE文件删掉,目录中仅有唯一一个cpp文件才编译的.我真是找不到话说了.
icansaymyabc 2007-01-18
  • 打赏
  • 举报
回复
现在的CPU有乱序执行的能力,不要假定CPU中的指令流和你的程序逻辑完全一致。
还有由于线程调度等原因,线程代码可以在任何你意想不到的时候执行——只要你没有用严格的同步命令控制它不得在那里出现。

还有就是MKL库函数造成的数据冲突真是让人头疼,用户又无法干涉。
而且行为不确定,明明什么都没改,有时候编译结果就是没冲突。
改用 icl 命令行编译情况相反,多数时候编译结果没有冲突,可是有时候也会编出有冲突的EXE。简直是摸不着头脑啊。
IntelPerLib 2007-01-16
  • 打赏
  • 举报
回复
比如说updatePositions和computePot虽然是使用得全局变量但是他们运行是顺序的应该不会变量访问的冲突,

---------
线程中有同步的语句保证他们是顺序执行的么?
IntelPerLib 2007-01-15
  • 打赏
  • 举报
回复
两种原因: (1) 程序中可能有同步问题. (2) Threading Check 误报. 仔细查看一下程序, 如果确实没有发现错误, 建议去 https://premier.intel.com 提交一个bug的报告.
h2o0 2007-01-15
  • 打赏
  • 举报
回复
我也发现这个问题,但是我的程序是在线性区和并行区应该互相不影响,比如说updatePositions和computePot虽然是使用得全局变量但是他们运行是顺序的应该不会变量访问的冲突,还有ThreadChecker发现在MKL vdInvSqrt方法中也有这个问题,不知道是ThreadChecker的问题还是代码的问题
aero_boy 2007-01-14
  • 打赏
  • 举报
回复
这样可能效率会差些

566

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧