gpt4 book ai didi

optimization - ifort 什么时候使用优化标志?

转载 作者:行者123 更新时间:2023-12-03 15:57:10 24 4
gpt4 key购买 nike

介绍

我了解英特尔的 Fortran 编译器 ifort执行一些函数内联和 interprocedural optimization (IPO) ,以及其他标准优化。这可以按照以下示例完成:

ifort -O2 -finline-functions -ipo myProgram.f function.f subroutine.f -o MyProgram

编译器选项说明:
  • -O2标志告诉编译器执行重要的优化(对于 Fortran,包括函数内联)。
  • -finline-functions标志告诉编译器允许函数内联。
    (这是默认行为;为了明确起见,我在这里包含了标志。)
  • -ipo flag 告诉编译器执行 IPO。

  • 假设我将编译过程分为两个步骤,就像使用 Makefile 时经常做的那样......

    第1步

    compileassemble一堆文件分开,把源代码变成目标文件:
    ifort -O2 -ipo -c   function.f -o   function.o
    ifort -O2 -ipo -c subroutine.f -o subroutine.o
    ifort -O2 -ipo -c myProgram.f -o myProgram.o

    (我猜这一步没有内联,因为文件是独立编译的......)

    第2步

    然后我 link将目标文件放在一起并创建可执行文件:
  • ifort -O2 -finline-functions -ipo myProgram.o function.o subroutine.o -o MyProgram

  • 我的问题

    如果我单独编译文件,这些优化标志中的哪些应该在哪个阶段传递给编译器? 内联和IPO在哪一步进行?

    最佳答案

    使用 -ipo 编译时,编译器会生成中间代码,但根本不进行优化或内联。您有 .o 文件,但它们不包含任何机器指令。当您再次调用 ifort 以创建可执行文件时,编译器会吸收所有中间代码并对其进行优化,就好像您已将所有内容编译到一个大源文件中一样。然后,它可以查看引用了哪些例程以及在何处引用,并且可以进行更多优化和内联。

    您应该为每次编译传递相同的优化选项 - 它们与中间代码一起记录。

    我很确定具有类似功能的其他编译器也是如此。 (我是前英特尔编译器开发/支持工程师。)

    关于optimization - ifort 什么时候使用优化标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49202362/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com