通过引入OpenMP把原来单线程的程序改为多线程,窃以为最难得莫过于设定数据共享特征,如shared, private, firstprivate, lastprivate, threadprivate,数据是否在OpenMP的并行区域内是否被各线程所共享由此决定,新手难免设错。Thread data sharing event是Intel debugger extension为发现这类问题而新增的。
Enable Thread Data Sharing Event Detection使Intel debugger extension开始检测。按下Stop On Thread Data Sharing Event后,如事件发生,则程序暂停,如不按下该键,则程序运行结束后,在图片下部的窗口显示事件的相关信息,如线程号,代码行号等。
如OpenMP程序未发生该事件且结果正确则善,不然需加入 #pragma omp atomic 或 #pragma omp critical对该数据访问加以限制(串行化)
检测所有的数据访问会使程序运行得很慢很慢。一个解决方法是在访问可能的sharing data前设置断点,等运行到该处后,再启动thread data sharing detection, 离开可疑区域后再关闭检测。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10256541/viewspace-588669/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10256541/viewspace-588669/