Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.

Compile times with ifort 12.1.2

IanH
Honored Contributor III
302 Views
Are there known issues with compile times with ifort 12.1.2 and a broad polymorphic type heirarchy (many extensions of a common parent, perhaps two or three levels of inheritance)?

I've got some files of around 50 lines in length (including comments) that are taking around 20 minutes to compile in a typical debug (no optimisation) configuration. I'm trying to split out a reproducer, but the lengthy build times are making that rather difficult. If it is a known issue I might go and play on the swings outside instead.

I'm seeing some very big mod files too - including a compiler generated one (for interface checking) of 11.5 MB. That's an impressive expansion from eight lines of interface block.

(The source variant of the generated interfaces for routines with polymorphic arguments don't have those arguments as polymorphic. For example, compile the following with /check:all /warn:all:

[fortran]MODULE ParentTypes
  IMPLICIT NONE  
  TYPE :: Parent
  END TYPE
END MODULE ParentTypes

SUBROUTINE external_subprogram(arg)
  USE ParentTypes
  IMPLICIT NONE
  CLASS(Parent), INTENT(OUT), ALLOCATABLE :: arg
END SUBROUTINE external_subprogram

PROGRAM generated_interfaces_for_poly_args_are_bodgy
  USE ParentTypes
  IMPLICIT NONE
  INTERFACE
    SUBROUTINE external_subprogram(arg)
      USE ParentTypes
      IMPLICIT NONE
      CLASS(Parent), INTENT(OUT), ALLOCATABLE :: arg
    END SUBROUTINE external_subprogram
  END INTERFACE
    
  CLASS(Parent), ALLOCATABLE :: arg
  CALL external_subprogram(arg)
END PROGRAM generated_interfaces_for_poly_args_are_bodgy
[/fortran]
and the generated interface block looks like:
[fortran]        !COMPILER-GENERATED INTERFACE MODULE: Tue Jan 10 22:40:59 2012
        MODULE EXTERNAL_SUBPROGRAM__genmod
          INTERFACE 
            SUBROUTINE EXTERNAL_SUBPROGRAM(ARG)
              USE PARENTTYPES
              TYPE (PARENT), INTENT(OUT) :: ARG
            END SUBROUTINE EXTERNAL_SUBPROGRAM
          END INTERFACE 
        END MODULE EXTERNAL_SUBPROGRAM__genmod
[/fortran]
No allocatable (as others have already reported) and TYPE instead of CLASS.)
0 Kudos
1 Reply
Steven_L_Intel1
Employee
302 Views
I've got one report of extended compile times in 12.1.2 but the test case is enormous. If you have a smaller one you can provide, that would be helpful.

Thanks for the generated interface issue. I'll pass that along.
0 Kudos
Reply