我正在使用#pragma omp屏障来确保我的所有并行线程在继续操作之前在同一点相遇(没有花哨的有条件分支代码,只是直线循环),但是我推测屏障pragma实际上并不能保证同步性,只是完成,因为这些是我得到的结果:
0: func() size: 64 Time: 0.000414 Start: 1522116688.801262 End: 1522116688.801676
1: func() size: 64 Time: 0.000828 Start: 1522116688.801263 End: 1522116688.802091
线程0的启动时间比线程1快约一微秒,这给它带来了0.414毫秒的不切实际完成时间,顺便说一下,在单个内核/线程运行中,运行时间平均约为0.800毫秒。(请原谅我,如果我的单位关了,那就晚了)。
我的问题是:有没有办法确保在openMP中所有线程都在同一时间启动?还是我必须引入另一个库,例如pthread才能具有此功能?
barrier
与其他语言一样,OpenMP中的语句可确保在所有线程到达障碍之前,线程不会继续前进。
它没有指定线程重新开始执行的顺序。据我所知,在OpenMP或Pthread库中无法手动调度线程(请参见下面的注释)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句