A second identifier that accesses the same memory location as some other identifier. In Fortran, you can explicitly create aliases using the EQUIVALENCE statement and by use of the TARGET attribute and pointer assignment. An alias also occurs when the same variable is passed to a procedure in two or more argument positions.
In Fortran work, a specially-formatted comment line that describes the source program to the compiler. For example, the line C*$* ASSERT NO EQUIVALENCE HAZARD tells the compiler that the code in the following loop never addresses the same memory location under two different, equivalenced, identifiers. (Note that the general term assertion has several other meanings in general data processing speech.)
A dependence that the compiler assumes may exist, but about which it has no information. An assumed dependence can prevent the compiler from performing many kinds of optimization.
A portion of a parallel section that can be executed by only one process at a time. You use critical sections to ensure that shared static variables are updated in an orderly way.
When the value assigned to a variable within a loop does not depend on any value calculated in a different iteration of the loop, the variable has data independence. The compiler needs to verify data independence in order to parallelize a loop.
When the value of one variable depends on the value of another variable, there is a dependence between them. The compiler locates and analyzes data dependences in order to be able to optimize the program correctly.
A specially-formatted comment line that directs the compiler to treat the program in a particular way. For example the line C*$*IPA enables interprocedural analysis (IPA) over the following code. See also assertion.
In general, a driver is a program that controls or manages something, for example a device driver. Speaking of programming languages, a driver is the program that directs the steps of compilation and linking. The f90 program is the compiler driver for a Fortran 90 compilation.
Linked in name only, so that the executable file contains only the information needed to locate the code of a procedure—the name of the DSO that contains it and the name of the entry point. When the executable program is loaded, the DSO is also loaded, and the linkage between them is fixed in memory only.
The name of a subroutine or function that is not defined in an object module, but that is called from that module. External names are recorded as strings in the object module, and can be displayed using the nm command.
An intrinsic function that can be called with arguments of various data types; for example, SIN can be applied to any numeric type. In a CALL, the compiler invokes the correct specific intrinsic function based on the type of arguments used. A generic function's name cannot be passed as an argument because the compiler cannot determine which specific name to pass. See specific function, intrinsic procedure.
The process of replacing a reference to a function with a copy of the function itself. This is done as an optimization, to remove the overhead of calling the function; however it expands the size of the program, which can slow the program down due to cache contention.
The process of inspecting the text of a function with respect to the code from which it is called, in order to get information about the relationships between the arguments and result of a function, and the variables used by the function's caller. This information can enable optimizations that are not otherwise possible.
A function or subroutine that is defined as part of the Fortran language, for example SIN or LEN. Unlike language keywords, names of intrinsic procedures are not reserved; they can be preempted by user procedures or variables. See generic function, specific function.
To modify two or more nested loops exchanging the loop variables of an inner and an outer loop, in order to remove a data dependence or to reduce the stride of array indexing.
A Boolean expression, usually in an IF statement, that appears within a loop of some kind yet always has the same value when evaluated because it does not test any variables that are assigned within the loop. Such a loop and the IF that contains it can be moved outside the loop, saving time.
A program unit that is compiled with the expectation that program execution will commence in that module. Only one main module can be linked into any executable.
An optimization in program logic that makes the program take better advantage of multiple CPUs when they are available.
A passage of Fortran code that can be executed in parallel by multiple, concurrent processes. A parallel section can be designated using PCF directives. A single DO loop can be made into a parallel section using the C$DOACROSS directive.
Any detail of compiler or run-time operation that is not defined by the Fortran 90 language standard.
The name of a subroutine or function that is defined in an object module and that can be called from other, separately-compiled, modules. Public names are recorded as strings in the object module, and can be displayed using the nm command.
A mathematical relationship in which the current value of an expression depends on at least one prior value (Xt = f(Xt-1)). Loops that calculate recurrences are difficult to parallelize.
A mathematical operation that produces a value as a function of a set of values, for example, taking the sum of all elements of an array. When a reduction is calculated in a loop, it can be difficult to parallelize the loop.
An optimization that affects the use of scalar, that is, single, variables or the use of a single CPU. Compare to parallel optimization, which affects the use of multiple CPUs.
An intrinsic function that has specific requirements as to the data types of its arguments and its result; for example, CSIN requires a COMPLEX argument. See generic function, intrinsic procedure.
Linked as a physical part of an executable file. The linkage between calls and subprograms is completely fixed at link time. See dynamically linked.
The distance in memory units between array indexes in successive iterations of a loop. The stride depends on which array index varies fastest, and the increment for the index. A stride of 1 visits successive array elements, and has the best performance in cache memory.
An independently-scheduled point of execution. This term has many uses in data processing, for example “POSIX Thread” is one standardized programming interface for creating and controlling threads not yet supported by IRIX. In Fortran 90 and IRIX, a thread is implemented by a lightweight process created by the system call sproc().
A portion of a parallel section that you designate to be used in a particular way by concurrent processes. All concurrent processes in the parallel section synchronize at the end of the work-sharing construct.