Technical data
#pragma Directives [3]
• Shared T registers 0–3
If you address these registers in your program (for example, using intrinsic
functions), tasking may not work properly.
If you are multi-streaming on a Cray SV1 system, none of the registers will be
available.
3.8.2 cncall Directive (UNICOS Systems Only)
Scope: Local
The cncall directive allows a loop to be tasked by asserting that subroutine
and function calls within the loop have no loop-related side effects. The cncall
directive is an assertion about data dependence. Unlike the taskloop or
parallel directives, the compiler can disregard a cncall directive if it detects
possible loop-carried dependencies that are not directly related to a call inside
the loop. To force tasking, irrespective of dependence issues, use user-directed
tasking. For more information on the taskloop directive, see Section 3.8.4, page
70. For more information on the parallel directive, see Section 3.8.3, page 70.
The cncall directive should be inserted immediately preceding the loop to be
tasked. The format of this directive is as follows:
#pragma _CRI cncall
When using this directive, ensure that the following criteria are met for each call
within the body of the loop that follows a cncall directive:
• The callee does not modify data in one iteration and reference this same data
in a different iteration of the task loop. This rule applies equally to formal
parameters and static and global variables.
• The callee does not reference data in one iteration that is defined during
another iteration.
• If the callee modifies a formal parameter or a static or global variable, two
iterations cannot modify data at the same storage location unless the variables
at issue are scoped as private. Following the task loop, the content of the
private variables is undefined. The cncall directive does not force the
master thread to execute the last iteration of the task loop.
The following examples use the cncall directive.
Example 1:
S–2179–36 67










