我以为我对此有一个非常清楚的了解,直到两天前,但现在我可能会过度思考和迷惑自己。我会解释我在做什么,然后问一些可能简单的问题,但我迄今为止搜索并发现了相互矛盾的答案。当然有人可以让我直接。希望快速平行最佳Lapack例程(gfortran)问题
我写了一个Fortran代码,利用LAPACK例程来解决特征值问题。我的问题是(A-LB)x = 0,其中L是我的特征值,x是我的特征向量,A和B是方形的,复杂的,非对称的非厄米非三角矩阵。 A和B都是NxN,在我的代码中N通常在1000到3000之间。
现在代码完美地工作。我正在使用LAPACK优化的地图集安装。我专门运行例行ZGGEV(link),因为现在我需要所有的特征值解和所有相关的特征向量解。
现在我试图优化我的代码以加快运行速度。我们实验室中的所有计算机都包含4个或8个核心CPU,并在Ubuntu上运行。在解决这个问题时,我可以做些什么来利用我的全部CPU?我一直在寻找到它下面的事情:
- 我安装一个优化OpenBlas库,它肯定要快,但我发现它仍然只使用1个核心(也就是它使用了更多的我想一个小高峰。这个峰值是BLAS软件包并行运行,而LAPACK仅限于一个内核?)
- 我调查了等离子体,但它看起来并不像它会解决我目前形式的等式。
- 我已经研究过ScaLAPACK,但此刻此刻已经过去了,我不确定值得学习如何利用8核CPU。此外,我在代码的后面部分使用openmp线程,并且从未将openmp与MPI结合在一起。
最后,我有几个具体的问题布拉斯:
- 阿特拉斯自带的 “libptcblas” 和 “libptf77blas” 库。这些应该是线程库,但我使用它们时并没有注意到差别,事实上它运行速度稍慢(我猜是由于开销)。我需要打电话来利用这些电话吗?我有理由在“libcblas”和“libf77blas?”上使用这些库吗?
- 在OpenBlas中,它还构建了一个非常具体的“libopenblas_penrynp-r0.2.12”。这是线程版本吗?再次,我没有注意到运行这个blas与运行“libopenblas”有什么区别。
希望有人可以清除我的一些布拉斯问题,并指出我朝着更快的解决方法。谢谢!
非常感谢!我很确定我现在完全明白了。我为每台电脑建立了一个单独的ATLAS。根据你的建议,我在ZGEMM上用Openblas做了一些测试,我确实看到了并行加速。经过进一步检查,我确实得到了ZGGEV的一些加速,但很少。然而,Openblas的运行速度仍然比ATLAS快得多,所以这是一个优点。 – 2014-12-05 07:35:51