Appendix A. Power Fortran Assertions

This appendix summarizes the Power Fortran assertions in alphabetical order. When viewing this Guide online, you can use the cross-references in the following table as hypertext links to the descriptive paragraphs.

Table A-1. Power Fortran Assertions

Assertion

Summary

Discussion

C*$* ASSERT CONCURRENT CALL

Click here

Click here

C*$* ASSERT DO (CONCURRENT)

Click here

Click here

C*$* ASSERT DO (SERIAL)

Click here

Click here

C*$* ASSERT DO PREFER (CONCURRENT)

Click here

Click here

C*$* ASSERT DO PREFER (SERIAL)

Click here

Click here

C*$* ASSERT [NO] LAST VALUE NEEDED

Click here

 

C*$* ASSERT NO RECURRENCE

Click here

Click here

C*$* ASSERT NO SYNC

Click here

 

C*$* ASSERT PERMUTATION

Click here

Click here

C*$* ASSERT RELATION

Click here

Click here


C*$* ASSERT CONCURRENT CALL

C*$* ASSERT CONCURRENT CALL tells Power Fortran to ignore assumed dependencies that are due to a subroutine call or a function reference. However, you must ensure that the subroutines and referenced functions are safe for parallel execution. This assertion applies to all subroutine and function references in the immediately following loop.

C*$* ASSERT DO (CONCURRENT)

C*$* ASSERT DO (CONCURRENT) tells Power Fortran to ignore assumed data dependencies. Normally, does not run loops containing assumed data dependencies in parallel. C*$* ASSERT DO (CONCURRENT) tells Power Fortran to go ahead and run such loops in parallel.


Note: If Power Fortran identifies a loop as containing definite (as opposed to assumed) data dependencies, it does not run the loop in parallel even if a C*$* ASSERT DO (CONCURRENT) assertion precedes the loop.


C*$* ASSERT DO (SERIAL)

C*$* ASSERT DO (SERIAL) tells Power Fortran to run the immediately following loop serially. Power Fortran does not try to convert the specified loop to run in parallel. Nor does it try to run any enclosing loop in parallel. However, Power Fortran can still convert any loops nested inside the following loop to run in parallel.

C*$* ASSERT DO PREFER (CONCURRENT)

C*$* ASSERT DO PREFER (CONCURRENT) runs a the immediately following nested loop in parallel whenever possible. Power Fortran runs other nested loops in parallel only if a condition prevents running the selected loop in parallel.

Power Fortran does not generate parallel code if you use the –noconcurrentize driver option or the C*$* NOCONCURRENTIZE directive.

C*$* ASSERT DO PREFER (SERIAL)

C*$* ASSERT DO PREFER (SERIAL) indicates that you want to execute the immediately following loop in serial mode. This assertion directs Power Fortran to leave the loop alone, regardless of the setting of the optimization level. You can use this assertion to control which loop (in a nest of loops) Power Fortran chooses to run in parallel.

C*$* ASSERT [NO] LAST VALUE NEEDED

Power Fortran gives each instance of the parallel loop its own, temporary copy of the iteration variable to use. Power Fortran generates code so that the instance of the loop that represents the “last” iteration (which may or may not execute last in actual time sequence) assigns its final value for the iteration variable to the actual variable, so that this “last” value will be available to the serial code that follows the loop.

C*$* ASSERT NO LAST VALUE NEEDED specifies that the final values from loops are not used, so last-value assignments are unnecessary. This assertion is active until reset or until the end of the program.

C*$* ASSERT NO RECURRENCE

C*$* ASSERT NO RECURRENCE(variable) tells Power Fortran to ignore all data dependencies associated with variable. Power Fortran ignores not just assumed dependencies (as with C*$* ASSERT DO (CONCURRENT)) but also real dependencies. Use this assertion to force Power Fortran to parallelize a loop when other, gentler means have failed. Use this assertion with caution, as indiscriminate use can result in illegal parallel code.

C*$* ASSERT NO SYNC

Sometimes when Power Fortran concurrentizes a loop, it adds unnecessary synchronization directives or other synchronization code. You can use the C*$* ASSERT NO SYNC assertion to eliminate synchronization overhead.

C*$* ASSERT PERMUTATION

The C*$* ASSERT PERMUTATION(array) assertion tells Power Fortran that array contains no repeated values. This assertion permits Power Fortran to run in parallel certain kinds of loops that use indirect addressing.

C*$* ASSERT RELATION

The C*$* ASSERT RELATION(name.xx.name) assertion indicates the relationship between two variables or between a variable and a constant. name is the variable or constant, and xx is any of the following: GT, GE, EQ, NE, LT, or LE. This assertion applies only to the immediately following loop.