HP UX Fortran Software manual Migration issues, Miscellaneous, Source code issues

Page 135

Miscellaneous

Following are miscellaneous incompatibilities between HP Fortran and HP FORTRAN 77:

The syntax and functionality of the HP Fortran version of the ON statement is different from the HP FORTRAN 77™version. For example, ON EXTERNALand ON INTERNAL are not supported

in HP Fortran™. For information about using theONstatement, see the “Using the ON statement” (page 81).

HP FORTRAN 77™ accepts statement functions that convert arguments; HP Fortran™ does not.

HP FORTRAN 77™ accepts the { character as comment syntax; HP Fortran does not.

HP FORTRAN 77™ accepts a PROGRAM statement with no name; HP Fortran requires the name.

HP FORTRAN 77™ extends the PROGRAM statement to enable access to command-line arguments; HP Fortran does not. For information about how to use intrinsics to access command-line arguments, see “Accessing command-line arguments” (page 107).

HP FORTRAN 77™ supports arrays up to rank 20; HP Fortran supports arrays up to rank 7.

HP FORTRAN 77™ accepts an expression like +-A, but HP Fortran generates a syntax error. Use +(-A)instead.

HP FORTRAN 77™ does not print leading zeroes in floating-point numbers; HP Fortran™

does. This behavior is equivalent to compiling an HP FORTRAN 77™ program with the +E4 option (note that this option is not supported by f90).

In HP FORTRAN 77™, integers that overflow (through initialization or constant folding) are

replaced with the maximum value for that type. If HP Fortran™ detects integer overflow, it treats it as an error; if it does not detect it, the overflow value is truncated at runtime.

Migration issues

Migration issues fall into four general categories:

Source code issues

Command-line option issues

Object code issues

Data file issues

Source code issues

For standard-conforming HP FORTRAN 77™code, migration to HP Fortran can be as simple as recompiling with the f90command. The f90command accepts source files with the extensions .f and .F(among others).

However, source code is likely to be the main obstacle on the migration path to HP Fortran. The reason is that HP FORTRAN 77™ supports a number of compiler directives and intrinsic functions, some of which are supported by HP Fortran, but others of which are either unsupported or have changed. The following sections discuss how to change directives and intrinsics when migrating HP FORTRAN 77™source code to HP Fortran.

NOTE: HP FORTRAN 77™accepts (or forgives) a number of common but nonstandard programming practices that HP Fortran does not. These nonstandard practices as well as all known incompatibilities between HP FORTRAN 77™and HP Fortran are listed in “Incompatibilities with HP FORTRAN 77” (page 131).

Migration issues 135

Image 135
Contents Abstract HP Fortran Programmer GuidePage Contents Performance and optimization Using the on statementControlling data storage DebuggingMigrating to HP Fortran 131 Using Fortran directives 123Writing HP-UX applications 107 Calling C routines from HP Fortran 110Fortran 2003 Features 151 Porting to HP Fortran 141Documentation Feedback 153 Glossary 154 Index 159 HP secure development lifecycle An overview of HP Fortran HP Fortran compiler environmentAn overview of HP Fortran +preinclude= file DriverOptions for controlling the f90 driver +dryrunOptions for controlling the C preprocessor PreprocessorOptions for controlling the front end Front-end+moddir=directory Options for controlling optimization Back-end+DAmodel Options for controlling code generation+Onooptimization OptimizationOptions for controlling the Linker Linker+FPflags LdirectoryOoutfile Tools HP-UX operating systemWl ,options $ f90 hello.f90 Compiling with the f90 commandF90 command syntax Compiling and linkingExample 2 hello.f90 Command-line optionsF90 command syntax Command-line options+save Command-line options by categoryCommonly-used options Commonly-used optionsOptions listed by category Option descriptionsExample 3 Example Do I+1, N+allowunaligned Boption Data type sizes and +autodbl414164 +autodbl +autodbl4+nocfc +cpp=default+charlit77 +check=boundsDatamodelare Name=def+DAmodel +DDdatamodelNative BlendedItanium Itanium2Values for the +FP option Signals recognized by the +fpexception option Gformat77+hugecommon Example 4 % f90 +hugecommon=results pcvals.f90 +initheapinteger=ival /usr/include directory +noimplicitnone+indirectcommonlist=file +initheapcomplex=rvalival+nolibs +io77Ipo +nocheckuf+noobjdebug Levels of optimizationRequires concurrent use of the +Oprofile=use option With different values of optlevel+pa1 +realconstant=single +demandload option. The default is +nodemandload+nodemandload the default +r8End.o Tx,pathTp,/usr/ccs/lbin/cpp F90comWx,arg1,arg2,...,argN Bhidden =symbol ,symbol Symbol binding optionsBdefault=symbol,symbol Bextern =symbol ,symbolUsing optimization options Reviewing general optimization optionsF90 +O3 +Osize myprog.f90 +Oautopar and omit +Oparallel +Oconservative+Onoall +OnoautoparF90 +O3 +Onomoveflops +Ofltacc myprog.f90 Fine-tuning optimization options+Onocxlimitedrange Default is +OnocxlimitedrangeDefault is +Odataprefetch +Ocachepadcommon option+Onofailsafe +Onofenvaccess+Onofastaccess +OnoentryschedOptimizations performed by +Onofltacc +Onoinline=function1,function2 +Oinlinebudget=n +Oinlinebudget enables+Onoinline +OnoinlinefilenameMillicode versions of intrinsic functions Values for the +Oinlinebudget option+Onoloopunrolljam +inlinelevel num+Onoloopunroll=factor +Oloopunroll=4+Onopipeline Default is+Onoparmsoverlap+Oparallelintrinsics +OnoparmsoverlapFor +Oprofile=collectarc,stride Default is +Onopromoteindirectcalls+Onorecovery Default is +Oshortdata=8Filenames recognized by f90 FilenamesLinking with f90 vs. ld Linking HP Fortran programs$ f90 -c hello.f90 # compile Libraries linked by default on PA-RISCLibraries linked by default on Itanium Linking to librariesLinking HP Fortran 90 routines Linking to nondefault librariesAdditional HP Fortran libraries Linking to shared librariesOpt/fortran90/lib/pa2064/ -lF90 -lisamstub $ f90 -Wl,-a,archive prog.f90 -lm Special-purpose compilationsCompiling programs with modules Library search rulesSpecial-purpose compilations Example 7 Example 2-3 code.f90 ExamplesExample Example 6 Example 2-2 main.f90$ dostats Compiling with makeExample 8 Example 2-4 data.f90 $ f90 -o dostats data.f90 code.f90 main.f90$ make Compiling for different PA-RISC machinesManaging .mod files Example 9 Example 2-5 makefileCompiling with +pic Creating shared librariesLinking with -b Using the C preprocessor$ f90 +cpp=yes -D Debug cppdirect.f90 Using the C preprocessorProcessing cpp directives Example 13 Example 2-9 cppdirect.f90Creating demand-loadable executables Creating shared executablesSaving the cpp output file HP Fortran environment variables Compiling in 64-bit modeUsing environment variables $ f90 +noshared prog.f90$ f90 +list hello.f90 F90ROOT environment variableSTF90COM64 environment variable HPF90OPTS environment variableMpnumberofthreads environment variable Floating installationFloating installation Lpath environment variableAlternate-path/opt/fortran90.3.6.1 Setting up floating installationDisabling implicit typing Controlling data storageDisabling implicit typing Automatic and static variablesControlling data storage ContainsIncreasing the precision of constants Increasing default data sizes Increasing default data sizesIncreasing default data sizes Sharing data among programs Usr/lib/libpthread.slWhich creates multiple threads Sharing data among programs $ gotosleepModules vs. common blocks $ wakeupIm up Modules vs. common blocks Using the HP WDB debugger DebuggingStripping debugging information Floating-point exceptions Signals recognized by +fpexceptionSignal Handling runtime exceptionsBus error exception Floating-point exceptions= 1.0/0.0 Segmentation violation exception Illegal instruction exceptionBad argument exception Using debugging linesExceptions handled by the on statement Using the on statementExceptions handled by the on statement On REAL8 DIV 0 Call divzerotrapActions specified by on On Double Precision DIV 0 Call divzerotrapExceptions handled by the on statement Example 15 Example5-2 ignore.f90 Ignoring errorsTerminating program execution Example 14 Example5-1 abort.f90On Double Precision Overflow Call trap Calling a trap procedureTrapping floating-point exceptions Trapping integer overflow exceptionsTrapping +Ctrl-C trap interrupts Allowing core dumpsExample 17 Example5-4 callitrap.f90 On Real Overflow Ignore Example 18 Example 5-5 allowcore.f90HP Caliper Using profilersUsing profilers Performance and optimizationProgramprogramarguments Comparing Program PerformanceOpt/ansic/bin/cc -Aa +O3 -o program +Oprofile=collect Program.c$ gprof prog gprof.out Using Options to Control Data CollectionGprof Specifying PBO file names and locations$ f90 +O4 file.f90 Using options to control optimizationUsing +O to set optimization levels Prof+O4 Using the optimization options+O2, -O +O3Packaged optimization options Fine-tuning optimization options$ f90 +02 +Oaggressive +Osize prog.f90 $ f90 +O4 +Oaggressive +Ofltacc prog.f90+Ofltacc=relaxed Is +Onofastaccess at+Ofastaccess at level +O2+Ofltacc=relaxed . This Fast+Onoinitcheck +Onoloopunroll=n +Oinlinelevel num+Onolibcalls +Olibcalls+Opipeline +Onoparminit+Orecovery +Ovectorize option on +Oregreassoc+Onoreturn +Oshortdata=8Conservative vs. aggressive optimization +Onowholeprogrammode+Owholeprogrammode F90 +O3 +Oparallel -c x.f90 y.f90 F90 +O3 -c z.f90 Conservative, aggressive, and default optimizationsParallelizing HP Fortran programs Compiling for parallel executionCalling routines with side effects parallellization Performance and parallelizationProfiling parallelized programs Conditions inhibiting loop parallelizationData dependences Indeterminate iteration countsVector routines called by +Ovectorize Using the +Ovectorize optionVectorization F90 +O3 +Ovectorize prog.f90Vecdmultadd Controlling vectorization locallySaxpy SdotIndustry-wide standard Vectorization Calling Blas library routinesExample 19 Example 6-1 axpy.f90 REAL, External sdotControlling code generation for performance Example 20 Example 7-1 getargs.f90 Accessing command-line argumentsWriting HP-UX applications $ fprog arg1 another argCalling HP-UX system and library routines Using HP-UX file I/OStream I/O using Fstream Performing I/O using HP-UX system callsObtaining an HP-UX file descriptor Using HP-UX file I/OCalling C routines from HP Fortran Data typesData type correspondence for HP Fortran and C Size differences after compiling with +autodbl Unsigned integersLogicals Size differences between HP Fortran and C data typesComplex numbers Complex sqrcomplexCOMPLEX cmxvalExample 21 Example 8-1 passcomplex.f90 Example 22 Example 8-2 sqrcomplex.c Argument-passing conventionsDerived types PointersCall foo%REFptr, %REFiarray, %VALi Integer ptr INTEGER, DIMENSION100 iarrayCase sensitivity Void fooint *ptr, int iarray100, intCase sensitivity Example 23 Example 8-3 sortem.c$HP$ Alias bubblesort = BubbleSort%REF,%VAL Example 24 Example 8-4 testsort.f90Int Memory layout of a two-dimensional array in Fortran and CREAL, DIMENSION2,3,4 ArraysExample 26 Example 8-6 getarray.c Example 25 Example 8-5 passarray.f90Passing a string StringsNull-terminated string Fortran hidden length argumentStrings Following are example C and Fortran programsFile handling Example 27 Example 8-7 passchars.f90Example 28 Example 8-8 getstring.c File handling Example 29 Example 8-9 fnumtest.f90Extern int globals100 Sharing dataInt somedata Extern int somedataHP Fortran directives Using Fortran directivesUsing HP Fortran directives Directive syntaxName SyntaxDescription and restrictions $HP$ Alias name = external-name arg-pass-mode-listLocal and global usage Case sensitivityArgument-passing conventions Example 32 Example 9-2 passstr.f90 StringsFor more information Example 31 Example 9-1 prstr.cListing file Disables the inclusion of source lines in the listing fileSpecified on the command line Example 33 ExampleVendor Directive Cray Compatibility directivesControlling vectorization Compatibility directives recognized by HP FortranCompatibility directives Controlling parallelizationControlling dependence checks Controlling checks for side effectsUsing Fortran directives Compiler limits Command-line options not supportedMigrating to HP Fortran Incompatibilities with HP FortranDouble Precision x = Format field widthsFloating-point constants Intrinsic functionsData types and constants Procedure calls and definitionsKEY= Input/outputDirectives Foo**REALbar, 8 ! foo**barMiscellaneous Migration issuesSource code issues Migration issuesHP Fortran 77 directives supported by f90 options DirectivesF77 options supported by f90 Command-line option issuesIntrinsic functions Conflicting intrinsics and libU77 routine namesData file issues Object code issuesHP-supplied migration tools Approaches to migration$ fid +800 file.f $ fid +es program.f END structure definition Porting to HP FortranCompatibility extensions Compatibility statements+Oparallel or Compiler directivesCompatibility directives Pointer Cray-style+Oparallel or +Ovectorize Intrinsic proceduresNonstandard intrinsic procedures in HP Fortran Directive prefixes recognized by HP FortranUninitialized variables Using porting options$ f90 testloop.f90 Using porting optionsLarge word size One-trip do loopsName conflicts Example 34 Example 11-1 clash.f90External int1 Source formats Names with appended underscoresPorting from Tru64 to HP Fortran Escape sequences+cfc Porting from Tru64 to HP Fortran EnhancementsNew options Nof66alternate for +noonetrip+nopadsrc Altparam Check noboundsoptions for example, -nocheckboundsMiscellaneous enhancements Fortran 2003 FeaturesInteroperability with C Input/output enhancementsObject orientation features Fortran 2003 FeaturesData enhancements 153 Documentation FeedbackGlossary Glossary155 So on. See also row-major orderAlso filename extension 157 Memory faultSee ttv Symbols Index159