如何在调用使用OpenMP的库时避免性能不佳

时间:2015-03-25 23:11:55

标签: c performance openmp

我在循环中调用动态链接的libdivsufsort,每次迭代用于不同的数据并使用单独的输出。每次迭代只处理几千字节的数据(我不能改变它)。但是,我得到的表现往往很糟糕。

我发现如果我在divsufsort的输出上调用正确的函数组合,那么除了divsufsort调用之外,我的整个程序最多运行10x FASTER 。这随gcc优化选项而变化。考虑到它似乎具有类似混乱的性质,我担心我无法提供任何合理的最小工作示例,而不是我的整个程序......

对程序进行分析时,我发现当它运行速度较慢时,50%的时间花费在gomp_barrier_wait_end上,其他40%的时间花费在gomp_team_barrier_wait_end上,而不到10%的时间花费在{{1}}上。时间实际上做有用的工作。显然divsufsort使用OpenMP(我从未使用过它),这可能是导致速度减慢的原因。

那么,我最终可以做些什么来避免开销的阻碍?

0 个答案:

没有答案