|
|

Longstanding Consultancy Experience
in Information Technology


Content Delivery
Selection |
|
Background
Fortran programs are used in the scientific and engineering communities. It is the primary language for some of the most intensive supercomputing tasks, such as weather and climate modeling, computational fluid dynamics, computational chemistry, computational
economics, animal breeding, plant breeding and computational physics. Many of the floating-point benchmarks used to gauge the performance of new computer processors are still written in Fortran CFP2006, the
floating-point component of the SPEC CPU2006 benchmarks.
SYS-ED staff and CETi Technology Partners are recognized experts with the Fortran programming language in mainframe, UNIX, and Linux operating environments:
- Developing maintainable and structured Fortran modules.
- Have Fortran interact with other programming languages.
- Thread Fortran applications for parallel performance on multi-core systems.
- Design and code programs derived from best practices guidelines.
- Process I/O efficiently using Fortran I/O statements.
- Perform matrix operations in Fortran.
- Implement high performance Fortran compilation techniques.
- Code the VOLATILE attribute for interacting with non-Fortran processes.
- Use the ASYNCHRONOUS attribute for specifying that a variable may be subject to asynchronous input/output.
|
|
|
|
Operational Challenge
As a module grows larger it will need to be modularized in order to address the issue of unnecessary global name clashes. By exposing the internal structure the user will have modular access to private data and procedures. Independent as to the size of the module, when the
subfeatures of the module are interconnected, it will be necessary to keep the code as a single module. When there is code inside a public or private module procedure, the typical use of make or a similar tool
results in the recompilation of every file which accesses the module.
- Allowing a complex expression or object to be denoted by a simple symbol.
- Creating enumerators which interoperate with the corresponding C enumeration type.
- Pointers which extend to point to procedures, as well as variables which use a new PROCEDURE statement.
- Allowing for interoperability between Fortran and C in intrinsic types, pointer types, derived types, scalars and arrays.
|
|
|
|
Industry Standard Courses |
|
|
|
|
|
|
|
|
|
Courseware for Teaching |
|
|
|
|
|
|
|
Exercises
The increased size of a module can be addressed by allowing a module procedure to have its interface defined in a module and its body is defined in a separate program unit - submodule. A change in a submodule
cannot alter an interface in the module will not cause the recompilation of program units that use the module.
A submodule can utilize host association to entities in the module, and may have entities of its own in addition to providing implementations of module procedures.
|
Coarrays
|
Coarrays provide an extension to the Fortran language for parallel programming on distributed-memory and shared-memory architectures. The program is treated as if it were replicated a fixed number of times; each replication is an image. An additional set of subscripts provides access from any image to data on another image. Compilers have been optimized to execution on an image and communication between images.
|
|
do concurrent
|
The do concurrent form of the do loop provides the capability to control data dependencies between the iterations of a do loop. This serves to optimize vectorization, loop unrolling, and
multi-threading and standardize directives from different compilers. The construct is for optimizations within a single image; no image control statements for synchronization between images are permitted.
|
|
Contiguous attribute |
When the compiler knows that an array occupies a contiguous memory block such as for an explicit-shape, assumed-size, or allocatable array and some sections of
such an array, then unnecessary operations will result from the compiler being unable to determine whether a data item will always occupy contiguous memory. |
|
|
|
|
Best Practices and Guidelines |
|
|
|
Long integers |
The processor is required to support at least one kind of integer with a range of 18 decimal digits. Typically, this will be supported with 64-bit integers and is needed to ensure portability of software designed to run on machines with very large memories.
|
|
Data statement restrictions lifted |
Subscripts and nested implied-do limits in a data statement can be any constant expression instead of being limited to combinations of constants, implied-do variables, and intrinsic operations.
|
|
Finding a unit when opening a file |
IIn an open statement, newunit= automatically selects a unit number that does not interfere with other unit numbers selected by the program, including
preconnected files. |
|
Unlimited format item
| A list of edit descriptors in parentheses may be preceded by an asterisk, which has the effect of repeating the list indefinitely, as if it were replaced by a
very large integer. |
|