【发布时间】:2021-10-26 15:19:35
【问题描述】:
我正在尝试对我正在研究的一个相当复杂的多物理场模型进行审计,并且一直在使用英特尔 VTune Profiler 来识别昂贵的子例程。最昂贵的函数是一个名为 __mulq 的函数,它不在源代码中。我可以看到哪些子程序正在调用它,但我无法弄清楚它到底是什么。我正在使用英特尔 fortran 编译器。我还尝试使用 grep 在包含所有代码的目录中搜索 __mulq,而 __mulq 的唯一提及是在二进制文件中。有人可以确定这个 __mulq 函数可能是什么吗?非常感谢您的帮助!
【问题讨论】:
-
@francescalus 我不确定。我怎么能检查?我正在运行 Ubuntu 20.04.2
-
CPU是intel i9,架构是x86_64,有32位和64位两种模式。
-
如果您使用的是 128 位实数,那么我假设
__mulq是编译器运行时的一部分,负责处理使用它们的部分算术。 (也许对这个低级位更熟悉的人可以进一步解释。) -
我在 Fortran 90 中使用的是 64 位的双精度。您是否建议减少到单精度?
-
如果有
__mulq,则在 16 字节浮点数上进行浮点乘法,即 Fortran“四倍”精度,这需要额外的支持例程,因为 x86 指令不提供该精度。因此,您的代码不仅仅使用 32 位和 64 位浮点数。
标签: fortran openmp intel-vtune