从ifort 11.1构建的性能分析代码产生__powr8i4例程,它是什么?

时间:2012-05-15 18:05:04

标签: profiling intel-fortran

我使用Intel 11.1构建了一个Fortran代码。我使用-p选项构建它以生成分析数据。当我检查这些结果时,会出现一些不属于我的代码的例程。我猜他们被英特尔放在那里。包括:

__powr8i4
__intel_new_memset
__intel_fast_memset
__intel_fast_memset.J
__intel_fast_memcpy
__intel_new_memcpy
__intel_fast_memcpy.J

还有其他人。当我在没有优化的情况下构建代码时,代码不会花费太多时间。除了结果显示__powr8i4在3.3%的时间内被使用。但是,当我使用优化构建代码时,这个数字可以达到约35%。我似乎无法找出这些例程是什么,但它们使我的结果混乱,因为我想知道在哪里寻找优化我的代码。

1 个答案:

答案 0 :(得分:0)

大多数程序在调用子程序(通常是库子程序)时花费了很多周期,所以如果你只看独占(自我)时间,你会看到你所看到的。

  • 所以第1点是关注包容性(自我加上被调用者)的时间。

现在,如果探查器是“CPU探查器”,它可能会对I / O时间视而不见。这意味着你的程序可能花费大部分时间阅读或写作,但是分析器不会给你任何线索。

  • 因此,第2点是使用分析器,它可以在“挂钟”时间工作,而不是“CPU”时间,除非您确定没有做太多的I / O. (有时候你认为你不是在进行I / O,而是深入到某些子程序层深处,猜猜是什么 - 它正在进行I / O.)

许多分析器尝试生成调用图,如果您的程序不包含递归,并且分析器可以访问代码中的所有例程,那么这有助于识别代码中的子例程调用好久没了 但是,如果例程A很大并且在几个地方调用B,则探查器不会告诉您要查看哪行代码。

  • 如果可能,使用分析器为您提供行级别包含时间百分比。 (百分比是最有用的数字,因为它可以告诉您如果可以以某种方式删除该行代码,您将节省多少总时间。此外,它不会受到系统中竞争进程的影响。) 这种分析器的一个例子是Zoom

可能在您完成所有这些操作后,您可能无法做很多事情来加快代码速度。 但是,如果您可以看到数据的某些属性可能会如何影响性能,您可能会发现可以获得进一步的加速。 Profilers无法查看数据。

  • 我所做的是randomly sample调试器下程序的状态,看看我是否真的能够理解每个样本的作用。 你可以找到任何其他方式找不到的东西。 (有些人说这不是准确,但它是准确的 - 关于什么是重要的。重要的是问题是什么,而不是确切的成本。) 这就是第4点。