CCSM contains contributions from several different teams of software developers. The goal of this section is to identify specific target architecture requirements so that the various software contributions can be integrated into a system that will run on the desired platforms.
This section is excerpted from the CCSM Software Engineering Plan:
``Past CCSM software development has targeted vector platforms and shared memory platforms with relatively modest attention devoted to parallel performance issues. As the availability of vector platforms to U.S. researchers has waned, a different approach is in order. During the period covered by this plan, the main hardware options available to NCAR and the U.S. climate community are likely to be microprocessor-based, distributed-memory computers and hybrid systems incorporating message passing between shared-memory multiprocessor nodes. Such platforms have complex memory hierarchies, and memory bandwidth and latency issues dominate performance. For the CCSM to meet the goals of the 2000-2005 CCSM Plan, first priority must be placed on making the CCSM run efficiently on these platforms.
Through overseas collaborations CCSM code is in fact likely to be run on both vector and RISC-based machines. Ideally, the code would have the flexibility to run efficiently on both. In practice, this can be difficult to achieve since the choice of optimal data structures, loop ordering, and other significant design decisions may differ depending on whether code is intended for vector or RISC systems.
Since CCSM software engineers do not have access to vector machines as development platforms, it is problematic to consider efficient performance on these platforms as a requirement in the near future. However, it is a priority to write flexible code, and whenever possible, to use data structures that are likely to achieve acceptable performance on either architecture. For excellent performance on a given architecture, this can add considerable complexity, and for some portions of the model, developing two code versions, one scalar and one vector, may be the most practical solution. The availability of development resources may in part dictate the extent to which efficient performance on both types of architectures can be realized.''