HP Fortran Programmer's Guide (September 2007)
vii
Contents
Exceptions handled by the ON statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Actions specified by ON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Terminating program execution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Ignoring errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Calling a trap procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Trapping floating-point exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Trapping integer overflow exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Trapping +Ctrl-C trap interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Allowing core dumps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
6. Performance and optimization
Using profilers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
HP Caliper. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Invoking HP Caliper with the compiler to optimize your program . . . . . . . . . . . 139
Comparing Program Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Using Options to Control Data Collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Specifying PBO file names and locations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
gprof. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
prof. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Using options to control optimization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Using +O to set optimization levels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Using the optimization options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Conservative vs. aggressive optimization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Parallelizing HP Fortran programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Compiling for parallel execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Performance and parallelization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Profiling parallelized programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Conditions inhibiting loop parallelization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Calling routines with side effects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Indeterminate iteration counts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Data dependences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Vectorization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Using the +Ovectorize option. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Controlling vectorization locally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Calling BLAS library routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Controlling code generation for performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164