Previous: Group F -- Algorithms and Libraries I Up: Group F -- Algorithms and Libraries I Next: Targets of Opportunity
For some application domains, parallel algorithms can be provided by generic mathematical software libraries that are finely tuned for a few architectures and that contain some of the basic algorithms for FFTs, linear algebra kernels, and algorithms for dense and sparse matrix computations. While such libraries may be sufficient for some applications scientists, however, however, they are far from being satisfactory for sophisticated users or for users seeking high performance. Factors that limit the usability of such generic libraries include limited functionality, inappropriate data structures, and lack of algorithm scalability. This situation shows the need for parallel languages that allow sophisticated users to match their algorithms to the architecture at hand, namely, by selecting appropriate data structures and by matching data movements to architectures. For less sophisticated users, it is advantageous to incorporate such features in the compiler as well. In addition to the need for parallel languages with the above flexibility, the group pointed out the need for (i) application-specific libraries that may include mesh generation tools, discretization tools, solution and update tools, and mesh refinement and load-rebalancing tools, and (ii) application-specific languages such as FIDIL for computational fluid dynamics. Applications scientists who are reluctant or unable to make the investment required to create large-scale applications codes that achieve the highest performance possible for each new architecture that comes along must have available generic or application-specific libraries of value for rapidly producing prototype codes that test or verify computational models. This rapid prototyping may then be followed by incremental refinement to enhance performance for a particular architecture. Such refinements should entail further algorithm/architecture matching, including parallel communication utilities for changing data structures and implementing other common communication tasks.
One approach is to fund activities at some institutions where application scientists are working closely enough with systems software groups that are capable of supporting and maintaining the resulting software for a much wider community. Software that has a large enough market should be transferred to an interested industrial partner. Software with a large market should be transferred to an industrial partner.
Sharing mechanisms may not be limited only to complete software packages; templates (or pseudo-code representations) of general algorithms that are language- and architecture-independent may be of great value as well.