在剖析器中BLAS例程?

时间:2018-02-28 00:26:48

标签: fortran blas intel-mkl gprof

我试图分析一些调用GEMM进行矩阵乘法的Fortran代码。

我过去常常使用双倍精度,正如我所期望的那样看到dgemm来电,但是现在我已经切换到单精度,我根本看不到sgemm在探查器的任何地方。

说实话,我不明白dgemm是如何出现的。不要用-pg编译BLAS库来创建必要的符号吗?

这是使用intel MKL作为BLAS库,使用gprof作为探查器。

1 个答案:

答案 0 :(得分:0)

首先,我不推荐 gprof 。它不仅错过了很多,而且还导致你对性能的错误思考,关注例程,而不是为什么程序正在做它正在做的事情。

我使用随机暂停。 Here是一个与您类似的问题的仔细讨论。 关于DGEMM的问题在于它的速度和它一样快,因为它被设计为灵活,主要是不快。 因此,例如,如果你的程序花费大部分时间乘以小矩阵,比如3x3,则DGEMM例程实际上可以花费2/3的时间来检查其参数标志,并且只有1/3实际上是乘法。 如果您知道这一点,那么您可以轻松编写自己的ad-hoc乘数,并获得巨大的加速。 这就是调用堆栈随机暂停和采样会告诉你的。