在 openMP 中,如何确保线程在继续之前同步?
In openMP how do I ensure threads are synchronized before continuing?
我正在使用 #pragma omp barrier 来确保我的所有并行线程在继续之前在同一点相遇(没有花哨的条件分支代码,只是直接循环),但我猜测 barrier 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 快约 1 微秒,给它 0.414 毫秒的完成时间有点不切实际,顺便说一下,在单个 core/thread 运行 运行 时间平均值中大约 0.800 毫秒。 (请原谅我的单位关闭,来晚了)。
我的问题是:有没有办法确保在 openMP 中所有线程都同时启动?或者我是否必须引入另一个库,如 pthread 才能拥有此功能?
与其他语言一样,OpenMP 中的 barrier
语句可确保在所有线程到达屏障之前线程不会继续。
它没有指定线程再次开始执行的顺序。据我所知,手动调度线程在 OpenMP 或 Pthread 库 中是不可能的(见下面的评论)。
我正在使用 #pragma omp barrier 来确保我的所有并行线程在继续之前在同一点相遇(没有花哨的条件分支代码,只是直接循环),但我猜测 barrier 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 快约 1 微秒,给它 0.414 毫秒的完成时间有点不切实际,顺便说一下,在单个 core/thread 运行 运行 时间平均值中大约 0.800 毫秒。 (请原谅我的单位关闭,来晚了)。
我的问题是:有没有办法确保在 openMP 中所有线程都同时启动?或者我是否必须引入另一个库,如 pthread 才能拥有此功能?
与其他语言一样,OpenMP 中的 barrier
语句可确保在所有线程到达屏障之前线程不会继续。
它没有指定线程再次开始执行的顺序。据我所知,手动调度线程在 OpenMP 或 Pthread 库 中是不可能的(见下面的评论)。