使用OpenMP进行C / C的科学库

时间:2012-07-12 09:56:23

标签: openmp

我必须在某些算法中利用PpenMP,为此我需要一些数学函数,如eigsvd,因为它在MATLAB中可用,并且它在MATLAB中非常快。我已经使用OpenMP

尝试了以下库
  1. GSL - GNU Scientific Library

  2. Eigen C++ template library

  3. 但我不知道为什么我的OpenMP并行化代码比串行代码慢得多,可能是库中有一些错误,或者函数randomeig或{ {1}}阻止?我不知道如何解决这个问题,有些人可以建议我使用OpenMP最兼容的数学库。

3 个答案:

答案 0 :(得分:2)

我可以推荐英特尔的MKL;请注意,这笔费用可能会影响您的决定。我既不知道也不关心它是用什么语言编写的,只要它提供可从我选择的语言调用的API。我的是Fortran,但它也有C的绑定

如果你环顾四周,你会发现许多人的第一个(或第二个或第三个)OpenMP程序实际上比他们的串行版本慢的问题。看看一些答案。不要认为有一个库的形状的魔术子弹,以使您的代码更快。相反,要意识到你很可能已经编写了一个很差的并行程序并修复了它。

最后,如果您安装了Matlab,不要期望能够编写自己的例程来超越Matlab。我不会说不能这样做,但我认为你会发现它很难。

答案 1 :(得分:1)

GSL与OpenMP兼容。您可以尝试使用免费试用版的英特尔数学核心库。 如果加速不是那么多,那么代码可能并不是很多可并行化的。您可能希望调试并查看英特尔®线程检查器中正在运行的线程的详细信息,这可能有助于查看瓶颈所在。

答案 2 :(得分:1)

我认为你只是想找到一个已经线程化的lapack(或相关例程)的快速实现,但是从你的问题中说出来有点难以理解。高性能标志建议MKL,这是一个很好的例子;其他包括ATLASFLAME这些是开源的,但需要做一些建设。