我正在使用#pragma omp屏障来确保我的所有并行线程在继续之前在同一点上相遇(没有花哨的条件分支代码,只是直接循环),但我猜测屏障实用程序实际上并不能保证同步性,完成,因为这些是我得到的结果:
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的库才能拥有此功能?
答案 0 :(得分:1)
OpenMP中的barrier
语句与其他语言一样,确保在所有线程都到达障碍之前没有线程进展。
它没有指定线程再次开始执行的顺序。据我所知,在OpenMP 或Pthread库中无法手动调度线程(见下面的评论)。