Visualization. As the codes involve increasingly large data bases run on remote machines, visualization must provide tools for code performance/debugging and data visualization that run in real time and can be shared between distributed collaborators. Both tasks will require data mining techniques, information visualization, and statistical analysis methods to reduce the amount and dimensionality of data to be rendered. (1) For performance and debugging, visualization should highlight regions of unusual performance and variations from an expected performance pattern based on a model of the code's anticipated behavior. Reduction of the performance data to only the unusual or meaningful regions in time or across nodes would tremendously simplify the debugging and code tuning process for developing massively parallel codes. (2) For real-time data visualization, the concern is to significantly reduce the computational cost and network bandwidth requirements of performing the rendering on the massively parallel architecture and then shipping the large visualization output back to a serial visualization algorithm running on the user's local resource.
Remote steering. Scientists at geographically different locations need the ability to interactively steer a simulation in time and/or space. The software must ensure that each viewer has both a time-coherent view of the parallel data and that steering parameter coherency is ensured across all multiple viewers. A necessary condition is that viewers can attach from any location at any point during a simulation that is robust with respect to such inspection. Finally, the viewer/application interfaces must support a variety of local visualization software packages which have different data and synchronization requirements.
Integrated development environment. Any given user should be able to simply construct an interface for a particular application without having to know anything about the particular programming paradigm or how to construct a visual environment. The interface should allow the user a view of the overall flow of the program. By clicking on the lines connecting the various subprograms, the user can quickly see what input and output variables are being exchanged between the two routines. Further, the user can easily manipulate various subalgorithms to easily construct new code, to adapt existing code, and to access a new subprocess within the context of the entire code.