【发布时间】:2014-08-17 19:56:14
【问题描述】:
我正在使用 open MP 来并行化 HEVC 中的部分代码。代码的基本结构如下所示
空函数() {
对于(...)
{
#pragma OMP parallel for private(....)
对于(...)
{
/// 做一些并行工作
} //内部for循环结束
//其他任务
} /// 外部for循环结束
} //函数结束
现在我修改了内部 for 循环,使代码并行化,每个线程独立执行任务。我没有收到任何错误,但多线程的总体处理时间比单线程的总处理时间增加。我想主要原因是外循环的每次迭代都有内循环的线程创建开销。有什么方法可以避免这个问题,或者我们只能创建一次线程。我无法并行化外部 for 循环,因为我在内部 for 循环中进行了修改以使每个线程能够独立工作。请提出任何可能的解决方案。
【问题讨论】:
-
大多数 OpenMP 实现不会不断地创建和销毁线程,它们会启动线程池并根据需要使用它。空闲线程空闲,它们不会被销毁。您的实施可能有所不同;如果您担心,您可以将外循环包装在并行区域中,并且只并行化内循环。除了线程开销之外,还有很多很多原因可以解释并行代码的运行速度比串行代码慢。您没有提供足够的信息来正确诊断问题。
标签: multithreading openmp