一般 openMP - 线程速度不同



我有一个openMP程序,其中for循环是并行的。一切都按预期工作,除了主线程比其他线程快很多很多倍......例如,当使用 4 个线程运行时,线程 0 比其他线程早很久完成,但它们执行相同的代码,工作量几乎相同。

这可能是因为Windows的资源处理,将任务交换进出程序使用的线程,导致速度变慢吗?还是我的代码更有可能是问题所在?我只是想确保我不会浪费时间在我的程序中寻找错误,如果这是操作系统引起的不可避免的问题......

至于为什么线程具有优先级,可能是 OpenMP 运行时和操作系统之间的问题。您使用的是哪个编译器?您如何测量线程何时终止?

在这种情况下,为了提高 OpenMP 并行的性能,我将使用动态调度策略和调度指令。如果主线程从 CPU 获得更多周期,在这种情况下它也会做更多的工作。一般来说,你不能指望每个线程都同样快,但如果你观察到数量级的差异,这听起来像是运行时和操作系统之间的严重冲突。

看线程执行取决于很多事情,所以可能有很多可能性,比如是否有任何锁定机制,或者资源可用性,比如当线程完成作业时,它必须释放资源。还有更多的因素。所以我的建议是使用一个名为vtune的工具并分析你的代码,它会让你清楚地知道你的线程在哪里浪费时间以及为什么。我希望它有所帮助。

最新更新