Intel VTune Profiler检测到Fortran代码中__mulq开销高,该函数是什么?
__mulq函数来源与作用说明
核心定义
__mulq是Intel Fortran编译器(ifort/ifx)内置的软实现运行时函数,对应128位整数乘法运算,不属于用户侧源代码的显式定义内容,因此你无法在项目代码目录中检索到相关源码。
详细说明
- 触发逻辑:当你的Fortran代码中使用
INTEGER(kind=16)(128位大整数)类型变量执行乘法操作时,若当前编译目标的CPU架构不支持原生128位整数乘法硬件指令,Intel编译器会自动在编译生成的汇编代码中插入__mulq调用,通过软件模拟的方式完成128位乘法运算,整个过程无需用户在源代码中显式声明或调用。 - 存在形式:
__mulq的实现代码存放于Intel编译器自带的运行时库中,编译时会被静态链接进入最终的可执行文件,因此你只能在二进制文件中检索到相关符号。
性能优化建议
- 优先排查128位整数的使用必要性:如果仅是为了避免32/64位整数运算溢出,可以评估是否可通过拆分运算步骤、优化运算逻辑的方式规避128位整数的使用,这是降低该部分开销最有效的方案。
- 若确实需要保留128位整数运算:可以在编译参数中添加
-xHost,让编译器针对当前编译环境的CPU最高支持指令集做优化,若你的CPU属于较新的Intel Xeon等系列、支持原生128位乘法指令,编译器会自动用硬件指令替代__mulq软调用,开销会大幅降低。 - 你可以执行
objdump -T 你的可执行文件路径命令,确认__mulq符号的来源,验证其是否确实来自Intel编译器运行时库。
内容的提问来源于stack exchange,提问作者Liam Magargal
相关产品推荐
相关产品推荐

