使用OpenMP的C/C中的科学库

使用OpenMP的C/C中的科学库,openmp,Openmp,我必须在某些算法中利用PpenMP,为此我需要一些数学函数,如eig或svd,因为它在MATLAB中可用,并且在MATLAB中非常快。我已经用OpenMP尝试了以下库 但是我不知道为什么我的OpenMP并行化代码比串行代码慢得多,可能是库中有一些错误,或者函数random、eig或svd被阻塞了?我不知道怎么弄清楚,有人能告诉我哪一个数学库与OpenMP最兼容。我可以推荐英特尔的;请注意,这需要花钱,这可能会影响您的决定。我既不知道也不关心它是用什么语言编写的,只要它提供了可从我选择的语言调

我必须在某些算法中利用PpenMP,为此我需要一些数学函数,如
eig
svd
,因为它在MATLAB中可用,并且在MATLAB中非常快。我已经用OpenMP尝试了以下库

  • 但是我不知道为什么我的OpenMP并行化代码比串行代码慢得多,可能是库中有一些错误,或者函数
    random
    eig
    svd
    被阻塞了?我不知道怎么弄清楚,有人能告诉我哪一个数学库与OpenMP最兼容。

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

    如果你环顾四周,你会发现很多问题来自那些第一个(或第二个或第三个)OpenMP程序实际上比串行版本慢的人。请看一些答案。不要认为有一个神奇的子弹,在图书馆的形状,使您的代码更快。相反,要意识到您很可能编写了一个并行性较差的程序,并对此进行修复

    最后,如果您安装了Matlab,不要期望能够编写自己的例程来超越Matlab。我不会说这是不可能的,但我想你会发现这非常困难。

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

    如果你环顾四周,你会发现很多问题来自那些第一个(或第二个或第三个)OpenMP程序实际上比串行版本慢的人。请看一些答案。不要认为有一个神奇的子弹,在图书馆的形状,使您的代码更快。相反,要意识到您很可能编写了一个并行性较差的程序,并对此进行修复


    最后,如果您安装了Matlab,不要期望能够编写自己的例程来超越Matlab。我不会说这是不可能的,但我想你会发现这非常困难。

    GSL与OpenMP兼容。您可以免费试用英特尔数学内核库作为试用版。
    如果速度没有那么快,那么代码可能不太可并行化。您可能希望在“英特尔线程检测器”中调试并查看正在运行的线程的详细信息,这可能有助于了解瓶颈所在

    GSL与OpenMP兼容。您可以免费试用英特尔数学内核库作为试用版。
    如果速度没有那么快,那么代码可能不太可并行化。您可能希望在“英特尔线程检测器”中调试并查看正在运行的线程的详细信息,这可能有助于了解瓶颈所在

    我认为您只是想找到一个已经线程化的lapack(或相关例程)的快速实现,但从您的问题中很难判断。High Performance Mark建议使用MKL,这是一个很好的例子;其他的包括或是开源的,但是需要做一些工作来构建。

    我认为您只是想找到一个已经线程化的lapack(或相关例程)的快速实现,但是从您的问题中很难判断。High Performance Mark建议使用MKL,这是一个很好的例子;其他包括或是开源的,但需要做一些事情来构建