可以使用OpenMP优化这个概念吗?

时间:2010-11-22 16:34:09

标签: optimization parallel-processing openmp

我宁愿不使用代码,因为它是常见的概念:

假设我们有一个既不太大也不太小的函数的场景,也不能轻易地使用OpenMP for循环优化进行优化。

但是,在代码中几百个不相关的情况下,它是一个在整个项目运行中被调用数百万次的函数。

[内联本身似乎没有做太多(默认情况下在优化的gcc结果上)并且将其变成宏而不是平行的,这将是一个兼容的事业。]

2 个答案:

答案 0 :(得分:2)

OpenMP适用于“让事情并行运行” - 一般而言。不仅for循环......嗯,你根本不需要任何循环来充分利用OpenMP并加速你的代码。

唯一重要的是:“我有几个独立的操作,它们一个接一个地运行,而且可以同时运行吗?”。如果是这样,那么您已经找到了使用OpenMP进行优化的简单方法。

答案 1 :(得分:0)

调用该函数时,是否多次调用,特别是在循环中?问题有点模糊 - 也许是(它在几百个不相关的地方中被称为数千次 - >数百万)或者可能没有(它在一百个不相关的地方被称为一次,你打了那些部分代码数千次 - >数百万次。

在第一种情况下,然后是的,并行化`map' - 也就是说,将这个函数独立地应用于一堆案例 - 很容易,而且OpenMP非常好。

在第二种情况下,如果函数被调用了一百万次但每次都被调用一次,那么就没有了。那里有重复执行,但没有暴露的并发;没有必须同时完成的任务列表可以独立完成。如果函数可能使用重复参数调用,那么你可以在那里做的就是使用memoization,这是一个内存/计算时间权衡,而不是并行化技术。

在第二种情况下,可能是您可以重构代码,以便一次性进行一堆那些函数调用,从而暴露并发性并允许并行化 - 但它不是OpenMP(或任何并行编程模型)可以自动为你做。