1: \documentclass[10pt]{article}
2: \pagestyle{plain}
3: \bibliographystyle{plain}
4:
5: \title{Mathematical Software: Past, Present, and
6: Future\thanks{Dedicated to John R. Rice on occasion of his 65th
7: birthday. Contribution of the National Institute of Standards
8: and Technology, not subject to copyright. Mention of commercial
9: products in this paper does not imply recommendation or
10: endorsement by NIST. Conversely, omission of a product's name
11: does not imply unsuitability for use. Author's address:
12: Mathematical and Computational Sciences Division, Information
13: Technology Laboratory, NIST, Stop 8910, 100 Bureau Drive,
14: Gaithersburg, MD 20899-8910, USA}}
15: \author{Ronald F. Boisvert \\
16: National Institute of Standards and Technology}
17: \date{}
18:
19: \begin{document}
20: \maketitle
21:
22: \begin{abstract}
23: This paper provides some reflections on the field of mathematical
24: software on the occasion of John Rice's 65th birthday. I
25: describe some of the common themes of research in this field and
26: recall some significant events in its evolution. Finally, I
27: raise a number of issues that are of concern to future developments.
28: \end{abstract}
29:
30: \section{Introduction}
31:
32: \subsection{The study of mathematical software}
33:
34: The field of mathematical software is concerned with the science
35: and engineering of solving mathematical problems with computers.
36: The primary focus is the development of general-purpose software
37: tools applicable to problems in a variety of disciplines. There
38: are a large number of facets to this work, including the
39: following.
40:
41: \begin{itemize}
42:
43: \item the development and analysis of algorithms for standard
44: mathematical problems which occur in a wide variety of
45: applications
46:
47: \item the practical implementation of mathematical algorithms on
48: computing devices, including study of interactions with
49: particular hardware and software systems
50:
51: \item the environment for the construction of mathematical
52: software, such as computer arithmetic systems, languages, and
53: related software development tools
54:
55: \item software design for mathematical computation systems,
56: including user interfaces
57:
58: \item testing and evaluation of mathematical software, including
59: methodologies, tools, testbeds, and studies of particular systems
60:
61: \item issues related to the dissemination and maintenance of
62: mathematical software
63:
64: \end{itemize}
65:
66: In 1977 John Rice aptly characterized the need for specialized study in
67: this area with the following observation \cite{Rice79}.
68: \begin{quote}\it
69: Many sophisticated scientists produce naive software just as
70: many sophisticated computer programmers produce naive science.
71: \end{quote}
72: Tremendous progress has been made in the mathematical software
73: field in the past 25 years. Yet, there continues to be a wide
74: range of quality in existing software, in both the research and
75: commercial domains. Good mathematical software results from
76: the application of certain principles, methodologies, and
77: practices derived from both applied mathematics and computer
78: science. The
79: study of these principles and practices is central to the field
80: of mathematical software. To this end, typical software
81: engineering practices, while beneficial to the production of
82: mathematical software systems, are not sufficient.
83: Mathematical software operates in the milieu of scientific
84: computing, which has a number of characteristics that distinguish
85: it from other areas. Among these are the following.
86:
87: \begin{itemize}
88: \item {\bf Floating-point arithmetic.} Most scientific
89: computations are performed with floating-point arithmetic.
90: Consequently, rounding errors occur in most arithmetic
91: operations. Mathematical algorithms, therefore, must not only be
92: correct in a strict mathematical sense, but they must control the
93: accumulation of round-off, avoid catastrophic loss of
94: significance from the subtraction of like quantities, and avoid
95: unnecessary overflows and underflows. Such problems are sometimes
96: unavoidable; software systems must be
97: designed so that they do not fail when these anomalies do occur.
98:
99: \item {\bf Approximations.} Floating-point arithmetic certainly
100: implies approximation at a very fine level. However, more
101: substantial approximations occur in mathematical computation.
102: Infinite series are truncated, difficult-to-compute functions are
103: approximated by polynomials, derivatives are approximated by
104: differences, integrals are approximated by finite sums, curved domains
105: are approximated by polygonal ones. The combined effect of such
106: approximations on the final result can be quite difficult to
107: assess. Analysis must be used to show that the correct solution
108: is obtained as the approximations are made more precise (i.e.,
109: that the algorithm is convergent). However, good software must
110: do more. It must provide mechanisms for a user to assess the
111: quality of the result, and to alert the user when the result is
112: suspect. Well engineered software can use such metrics to
113: automatically control the level of approximations, optimally
114: adapting the algorithm to the situation at hand.
115:
116: \item {\bf Infinite processes.} Many mathematical computations
117: consist of applying some infinite process that obtains the
118: desired result only in the limit. Such processes must be
119: truncated for practical use. Considerable research efforts have
120: been involved in finding iterations that converge quickly.
121: Deciding when to stop is always a difficult problem of practical
122: concern to software developers. Good software must employ
123: techniques that detect divergence or too slow convergence and
124: take appropriate action.
125: \end{itemize}
126:
127: Coupled with these fundamental mathematical challenges are
128: practical concerns about portability. How can developers produce
129: software with reliable, reproducible behavior when it must run in
130: very different environments, with different types of processor
131: architectures, arithmetic systems, memory hierarchies, operating
132: systems, and language processors? Such questions are critical in
133: the study of mathematical software.
134:
135: \subsection{The contributions of John R. Rice}
136:
137: At this conference, we are celebrating John Rice's long and
138: influential research career. John has made fundamental
139: contributions to the areas of approximation theory, numerical
140: analysis, mathematical software, and computer science. In the
141: area of mathematical software, his technical contributions have
142: had three overriding themes.
143:
144: \begin{enumerate}
145:
146: \item {\bf Architecture of scientific software systems.} John
147: has participated in the design and development of a variety of
148: widely distributed mathematical software systems
149: \cite{HoMR85, HoMR85a, RiRW84, Rice78, Rice84, RiBo85}.
150: In the course of this
151: work he pioneered a number of design concepts which have
152: influenced many systems. Among these are {\em
153: polyalgorithms} \cite{Rice68}, {\em meta-algorithms}
154: \cite{Rice75}, and {\em software parts} \cite{RiSw87}.
155:
156: \item {\bf Raising the level of abstraction.} Software users are
157: more efficient when they can express their computational needs in
158: the language of their technical field. For applied mathematics,
159: abstractions are based upon concepts of the calculus, not simple
160: arithmetic operations encapsulated in programming languages like
161: Fortran. John Rice's work in high-level components and languages
162: \cite{RiBo85,RiSw87}, intelligent interfaces
163: \cite{HoRV90,HoRV92a,HoRV92}, and problem-solving environments
164: \cite{GaHR94,RiBo96} have served to push abstractions to higher
165: and higher levels.
166:
167: \item {\bf Understanding software via experimentation.}
168: Understanding the behavior of software is necessary in order to
169: make practical decisions regarding algorithm selection
170: \cite{Rice76}. John has often stressed the importance of the use
171: of experimentation in such evaluations. The many small
172: engineering decisions made in the course of translating an
173: abstract algorithm into a working computer program can have an
174: enormous impact on its performance characteristics. John has
175: devoted much time to developing testing and evaluation
176: methodology \cite{BoHR79,HoRi80,RiHD81,Rice79a,WHRJ96}, and
177: applying it to particular situations \cite{DyRR88, DHLR84,
178: HoLR78, Rice83}. Indeed, one of the principle applications of
179: the ELLPACK system \cite{RiBo85} and its successors has been to
180: the performance evaluation of software for partial differential
181: equations.
182:
183: \end{enumerate}
184:
185: John's contributions to the field of mathematical software have
186: been voluminous and far-reaching. (In this paper I have only
187: cited a few examples of his many writings on this subject.)
188: In the remainder of this paper I will enumerate some of the major
189: events in math software, pointing out some of John's key
190: contributions along the way. I will then describe several
191: current issues facing the field and make several hazy predictions
192: of the future.
193:
194:
195: \section{Mathematical Software Past}
196:
197: \subsection{Beginnings}
198:
199: The earliest applications of electronic computers were in science
200: and engineering, for which mathematical computation played a
201: central role. Programming was a very difficult chore, done
202: without modern aids like high-level languages, compilers and
203: debuggers. The first publication of a piece of mathematical
204: software in a research journal probably occurred in 1949, when {\it Mathematical Tables
205: and Other Aids to Computation} printed a UNIVAC code for the
206: solution of Laplace's equation written in machine language \cite{SnLi49}.
207: Such codes were very difficult to produce, and the need for reuse of
208: software was recognized very early on. In 1951, Wilkes, Wheeler
209: and Gill presented one of the earliest program libraries, which
210: was developed for the EDSAC\footnote{The EDSAC (Electronic Delay
211: Storage Automatic Computer) was built in the late 1940s at the
212: Mathematical Laboratory of the University of Cambridge. It was
213: operational from 1949 until 1958.} \cite{WiWG51}.
214:
215: By the 1960s, the introduction of high-level
216: programming languages, e.g. Algol and Fortran, had greatly eased
217: the task of producing reusable mathematical software. The use of
218: such languages was not without controversy, of course. Compiled
219: code was not quite as efficient as hand-tuned assembly code, but
220: most people were willing to accept this in light of the great
221: savings in programmer time. Also, the subprogram structure
222: provided by these languages provided a simple framework for the
223: construction and maintenance of libraries of utilities.
224:
225: In 1960, the Association for Computing Machinery (ACM) began a new
226: editorial department in the {\it Communications of the ACM} (CACM)
227: devoted to the publishing of algorithms.
228: Edited by J.~H.~Wegstein of the National Bureau of Standards (NBS),
229: this section printed the code of contributed Algol procedures
230: (most such codes were quite short). Also, remarks on and
231: certifications of previously published codes were solicited.
232: The first such contribution was a code for numerical quadrature
233: submitted by R.~J.~Herbold of NBS \cite{Herb60}. Each algorithm
234: was given a number, and the set of algorithms later became known
235: as the {\em Collected Algorithms of the ACM} (CALGO).
236:
237: Computer manufacturers also began to develop libraries for their
238: users. The most prominent of these was probably the IBM
239: Scientific Software Package (SSP). A number of laboratories,
240: such as Bell Labs, Boeing, Harwell, and Monsanto, began the
241: development of math software libraries for their internal use.
242: Several organizations, such as SHARE, the IBM user's group, began
243: to collect such utilities for redistribution.
244:
245: Of course, subroutine libraries were not the only focus of
246: researchers in this new field. Some were imagining ways in which
247: these new powerful computers could be used to transform the way
248: in which applied mathematics was practiced.
249: Many of these ideas were discussed at the Symposium on Interactive Systems
250: for Experimental Applied Mathematics held in in Washington, D.C. in August 1967
251: \cite{KlRe68}. The vision there is remarkably clear;
252: many of the participants reported on developments in technologies which would
253: only finally begin to be realized in the 1980s and 1990s.
254: At Purdue, for example, John Rice, Saul Rosen and colleagues
255: designed NAPSS (Numerical Analysis Problem-Solving System), an interactive
256: mathematical problem-solving system which would accept input akin
257: to normal mathematical notation \cite{RiRo66}, and would employ a variety
258: of heuristics to automate numerical analysis. Unfortunately, the resources
259: necessary for such an ambitious system exceeded even the
260: supercomputers of the day (like the CDC 6400), and a fully
261: functional system was never realized.
262:
263:
264: \subsection{A community emerges}
265:
266: Perhaps the first event that provided a real sense of community for
267: researchers interested in the production and dissemination
268: of reusable mathematical software
269: was the {\em Mathematical Software Symposium} held at Purdue
270: University in April 1970. John Rice organized the
271: symposium\footnote{The organizing committee included Robert
272: Ashenhurst, Charles Lawson, M. Stuart Lynn, and Joseph Traub}, which
273: was sponsored by ACM and the Office of Naval Research,
274: and the proceedings were published
275: as a book by Academic Press \cite{Rice71}. Included in the
276: proceedings were 23 papers, four descriptions of selected
277: mathematical software, and more than 40 pages of introductory
278: material prepared by Rice.
279:
280: One of the recommendations from the Symposium was for the
281: establishment of a journal that would publish papers related to
282: mathematical software. John Rice vigorously pursued this
283: possibility\footnote{A committee that included Wayne Cowell,
284: Lloyd Fosdick, Tom Hull, M. Stuart Lynn, and Joseph Traub worked
285: with him.}. After considerable negotiations with ACM and the
286: Society for Industrial and Applied Mathematics (SIAM),
287: ACM agreed to publish the new journal. Papers from an NSF-sponsored
288: conference were used to provide articles to
289: seed the journal. {\em Mathematical Software II} was held at
290: Purdue in May 1974. There were 225 attendees, with 82 papers
291: presented. The best of those papers make up the majority of the
292: first volume of the {\em ACM Transactions on Mathematical Software}
293: (TOMS) which published its first issue in 1975 with John Rice as
294: Editor-in-Chief. John continued in that position until 1993.
295:
296: TOMS was chartered not only to publish traditional research
297: papers, but also algorithms (with included code which would be
298: refereed), certifications, translations, and remarks on
299: previously published algorithms. The Algorithms section of CACM
300: was moved to TOMS, and hence TOMS
301: algorithms were numbered beginning at 493. One of the important
302: features of the new journal was the establishment of a reliable
303: Algorithms Distribution Service for CALGO. The distribution, on
304: magnetic tape, was performed on a cost-recovery basis by IMSL,
305: Inc. Obtaining software in machine-readable form was much more
306: useful than reading code on paper. This also allowed TOMS to
307: adopt the policy of not printing the code of algorithms in the
308: pages of its journal, thus saving much in production costs.
309:
310: A third conference organized by John Rice, {\em Mathematical
311: Software III}, was held at University of Wisconsin in 1977
312: \cite{Rice77}. By the end of the decade, mathematical software
313: had emerged as a viable research area with an active community
314: to support it. After publishing 25 volumes, TOMS remains a
315: vibrant outlet for the work of this community \cite{TOMS00}.
316:
317: \subsection{Software emerges}
318:
319: Another important activity in the 1970s were the numerous efforts
320: to develop carefully constructed, systematized collections of
321: mathematical software. One of the first of these was the NATS
322: project, the National Activity to Test Software, which was
323: conceived in 1970. A joint venture of Argonne National
324: Laboratory, Stanford University, and the University of Texas at
325: Austin, NATS was designed to study problems in producing,
326: certifying, distributing, and maintaining quality numerical
327: software. A key part of this effort was the production of two
328: Fortran software packages, EISPACK \cite{GBDM77,SBDG76} for
329: eigenvalue problems, and FUNPACK \cite{Cody75} for special functions.
330:
331: EISPACK, which first appeared in 1972, was based upon algorithms
332: published in the 1960s in {\em Numerische Mathematik} and later
333: collected by Wilkinson and Reinsch in the {\em Handbook for
334: Automatic Computation} \cite{WiRe71}. Although the core of
335: EISPACK was largely a Fortran translation of these existing Algol
336: codes, the project was enormously influential. It set a new
337: standard for quality transportable mathematical software,
338: rigorously tested in a wide variety of computing environments.
339: Its success inspired the development of many systematized
340: collections, or ``PACKs'', in other areas:
341: LINPACK for linear systems \cite{DBMS79},
342: FISHPAK for separable elliptic problems \cite{SwSw79},
343: DeBoor's B-spline interpolation package \cite{deBo79},
344: MINPACK for nonlinear systems \cite{MoGH80},
345: DEPAC for ordinary differential equations \cite{ShWa80},
346: Fullerton's function library FNLIB \cite{Full77},
347: Swarztrauber's FFTPACK for fast Fourier transforms \cite{Swar82},
348: and QUADPACK for numerical quadrature \cite{PiDK83}.
349:
350: Of all the early ``PACKs'', LINPACK undoubtably saw the most
351: widespread use. One of the keys to LINPACK's success was the
352: decision to base its coding on the newly proposed Basic Linear
353: Algebra Subprograms (BLAS) \cite{LHKK79}. The BLAS performed
354: elementary vector operations, such as norms, dot products,
355: scaling, and vector sums. The innermost loops in LINPACK's
356: column-oriented algorithms occurred inside the BLAS. This
357: allowed optimization of the whole package by simply optimizing
358: the BLAS. This approach proved quite successful, and many
359: machine-specific versions of the BLAS were developed and
360: supported by computer manufacturers.
361:
362: The 1970s also saw great advances in software for ordinary
363: differential equations (ODEs). Gear's code DIFSUB \cite{Gear71}
364: provided a well designed framework for automatic integration of both
365: stiff and non-stiff problems using linear multistep methods.
366: Shampine and Gordon's
367: ODE \cite{ShGo75} did the same for Runge-Kutta methods. Many
368: subsequent packages were built using these basic designs. Other
369: influential packages included COLSYS for two-point boundary-value
370: problems \cite{AsCR79} and DASSL\footnote{DASSL won the 1991
371: Wilkinson Prize for Numerical Software} for differential
372: algebraic systems \cite{Petz82}.
373:
374: A number of high quality multi-purpose libraries also had their
375: start in the 1970s. In 1970, six British computing centers began
376: an effort to develop a library for their ICL 1906A/S computers.
377: The next year Mark 1 of the Nottingham Algorithm's
378: Group (NAG) library was released. Implementations for other
379: systems followed, and in 1976 a not-for-profit company, Numerical
380: Algorithms Group, Ltd., was formed to continue development and
381: distribution. The NAG effort continues today \cite{NAG00}. The
382: first commercial math library effort was also begun in 1970 with
383: the incorporation in Houston, Texas of IMSL, Inc. by Charles W.
384: Johnson and Edward Battiste. By the time the company showed its
385: first profit in 1976, there were 430 library subscribers; the IMSL
386: library remains a viable commercial product \cite{IMSL00}.
387: Bell Laboratories also developed a library, PORT, whose single-source
388: approach to portability influenced many subsequent efforts
389: \cite{FoHS78}.
390:
391: The development of ELLPACK, a system for elliptic boundary-value
392: problems, also began in the mid 1970s. This effort, which was
393: led by John Rice, was a cooperative project of Purdue University,
394: the University of Texas at Austin, Yale University, and others.
395: In ELLPACK, the solution process was partitioned into a number of
396: distinct phases (domain processing, discretization, indexing,
397: linear system solution, and output), and the interfaces between
398: these phases were carefully defined. This design allowed the
399: development of a large library of components which could be
400: easily composed to build algorithms for solving particular
401: problems. ELLPACK also proved to be an excellent testbed for the
402: evaluation of software for elliptic problems. To ease the use of
403: the system, John Rice designed a very-high-level language to describe
404: the problem to be solved, and to select the components to be used
405: to solve it. The system first became fully operational in 1978
406: \cite{RiBo85}. Many of the basic concepts in ELLPACK's design,
407: such as high-level user interfaces and plug-and-play software
408: parts technology, are in common use in modern problem-solving
409: environments.
410:
411: The development of mathematical software in the 1970s and early 1980s
412: is described in detail in the book {\em Sources and Development of
413: Mathematical Software} edited by Wayne Cowell \cite{Cowe84}.
414:
415: \subsection{Increased access}
416:
417: By the beginning of the 1980s a substantial collection of
418: mathematical software, mostly in the form of Fortran subprograms,
419: was available for use. The user base for this software had grown
420: substantially, and with it came a new problem: how to locate that
421: needed software component. The National Bureau of Standards (now
422: NIST) developed an extensive catalog of such software. Their
423: Guide to Available Mathematical Software (GAMS), based upon a
424: detailed tree-structured problem-oriented classification system \cite{BoHK85},
425: allowed readers to see which components of which libraries and
426: packages, both public domain and commercial, were available to
427: solve each problem. The catalog remains available today as an
428: online resource \cite{NIST00}.
429:
430: Another barrier to the widespread use of software developed by
431: the research community was simply the process of obtaining the
432: code. One had to locate the author, request a magnetic tape,
433: and attempt to decipher its format. Useful software was often
434: lost to the community when an author changed institutions and
435: there was no longer support for distributing it. In 1985, Jack
436: Dongarra, then at Argonne National Labs, and Eric Grosse at Bell
437: Labs, started a software repository they called {\em netlib}
438: \cite{DoGr87}, which pioneered the use of computer networks in
439: software distribution. Software could be obtained automatically
440: by return email after
441: sending requests to an address whose email was processed by a Unix
442: daemon. The ready availability of such software changed the way
443: in which many researchers worked. Many more made routine use of
444: high quality software, and many others were freed of the
445: necessity of maintaining their own private repositories. Now
446: Web-accessible and supported by the University of Tennessee at
447: Knoxville and Bell Labs, with mirrors worldwide, {\em netlib}
448: remains the premier repository of software developed by the
449: mathematical software community \cite{BDGR95}.
450:
451: The 1980s also saw the first commercial success for general-purpose
452: interactive systems for mathematics. A system for matrix
453: computations developed as a teaching aid during the period 1977-84
454: by Cleve Moler at the University of New Mexico, was
455: commercialized as a tool for control system engineers. Today MATLAB is
456: a very popular system for scientific computing \cite{Matl00}.
457: The overall structure of modern
458: interactive mathematics systems was greatly influenced by the
459: system Mathematica developed by Stephen Wolfram in 1988
460: \cite{Wolf99}. Mathematica was the first commercial system to
461: integrate symbolic, numerical, and graphical capabilities into a
462: single package. The growing availability of personal computers and
463: workstations was an important factor in the success of these
464: systems. With these tools, the use of mathematical software was
465: beginning to expand to those with little experience in numerical
466: methods or even programming.
467:
468: \subsection{New architectures}
469:
470: The 1980s also brought vector and parallel computers into widespread
471: use, and with them additional challenges to the design of
472: mathematical software. Vector processor vendors developed
473: specialized math libraries tuned for their systems, mainly
474: containing software for linear systems and FFTs. These solutions
475: emerged because the performance of linear algebra software such
476: as LINPACK was disappointing on vector register architectures
477: like the Cray and Convex. The main reason for this was the fact
478: that moving data from memory to vector registers was very costly,
479: and that LINPACK's column-oriented algorithms, based on the BLAS,
480: necessitated more data movement than was really necessary.
481:
482: In 1984 John Rice hosted a workshop at Purdue (``ParVec
483: Workshop Number 4'') in which a variety of schemes for developing portable
484: high-performance software for vector parallel systems were
485: proposed \cite{Rice84a}.
486: Jack Dongarra and Sven Hammarling proposed the development of
487: new classes of BLAS:
488: Level 2 BLAS for matrix-vector operations, and Level 3 BLAS for
489: matrix-matrix operations. Encapsulating $O(n^2)$ and $O(n^3)$
490: operations, respectively, as fundamental operations would provide
491: much more opportunity to optimize core operations on different
492: processors. These new BLAS \cite{DDHD90,DDHH88} would provide
493: the basis for a major new linear algebra package released in
494: 1992. LAPACK \cite{ABBB99}, which included the functionality of
495: both EISPACK and LINPACK, used block-oriented algorithms
496: in which the fundamental operations were now matrix operations
497: encapsulated in the Level 3 BLAS. These have proven to be highly
498: efficient on modern vector processors and symmetric multiprocessors.
499: Every major computer manufacturer now supports tuned BLAS for
500: their systems and incorporates LAPACK in their math library.
501: Community efforts are currently underway to extend the BLAS in
502: new directions, such as sparse matrix operations \cite{BLAST00}
503:
504: In the late 1980s multiprocessor systems of widely differing design
505: were becoming routinely available, and with them a host of new
506: programming models, supported by specialized message-passing
507: primitives. Developing portable software for the class of
508: distributed memory (multiple instruction multiple data, or MIMD)
509: systems became a new challenge. The PVM system developed
510: in 1991 provided a useful abstraction
511: for parallel programming and was very widely adopted
512: \cite{GBDJ94}. Its implementation on many parallel machines
513: demonstrated the usefulness and feasibility of a common
514: message-passing infrastructure. This led to a grass root message-passing
515: standardization effort. The resulting Message Passing Interface
516: (MPI) transformed the landscape for distributed parallel
517: computing \cite{GSNL98}.
518:
519: One of the first portable math software libraries for distributed
520: architectures was ScaLAPACK, a distributed memory counterpart of
521: LAPACK linear system solvers \cite{BCCD97}. This package became
522: the core of several multi-purpose distributed memory math
523: software libraries which first appeared in the 1990s. Among
524: these are the NAG Parallel Library \cite{NAG00}, IBM's PESSL
525: \cite{IBM97}, and the European PINEAPL effort \cite{PINE00}.
526:
527: The increasing complexity of scientific software systems being
528: developed in the 1990s led to an interest in new software
529: architectures. Object-oriented approaches to the development of
530: mathematical software began to be seriously considered. The
531: notorious inefficiencies of pure object-oriented design, and the
532: lack of language standardization made such pursuits difficult.
533: Nevertheless, approaches that allowed many of the advantages of
534: object-oriented design without sacrificing efficiency were
535: developed. LAPACK++, a subset of the linear systems solvers in
536: LAPACK written in C++, was one of the first such successful
537: packages \cite{DoPW93}. Today object-oriented approaches are
538: routinely used in scientific computing.
539:
540: \subsection{Expanding vision}
541:
542: By the 1990s, rapidly increasing computer power was leading to new visions for
543: the future of mathematical software systems. During that period,
544: for example, John Rice and colleagues led in the establishment of
545: a new community of researchers interested in exploiting the
546: promise of expert systems for numerical computing. In a series
547: of conferences held at Purdue \cite{HoRV90,HoRV92a,HoRV92}, the
548: use of AI approaches for such tasks as algorithm selection,
549: automatic programming, and process management were explored.
550:
551: By this time, computation had become an essential
552: ingredient in the practice of science and engineering. Interest
553: in computational science as a new field of study was beginning,
554: and interdisciplinary programs for training its practitioners
555: were being established in many universities. John Rice and
556: others began to develop a new vision for mathematical software
557: systems to support computational science research. These
558: systems, called {\em problem-solving environments} \cite{GaHR94,
559: RiBo96}, would provide natural graphical user interfaces in which
560: scientists describe their problems using the vocabulary of
561: their native discipline. They would provide access to rich
562: libraries of problem-solving components enabling Web-based
563: parallel and distributed computation. Users would be able to
564: interact with ongoing computations, to easily visualize results,
565: to manage a large database of experimental results, and to ask
566: advice of expert advisory systems. Many small-scale special-purpose
567: systems now under development and use can be classified as
568: problem-solving environments, and research groups throughout the
569: world are working on infrastructure necessary for the routine
570: construction and use of such systems. Work at Purdue on parallel
571: ELLPACK \cite{HoRP89}, Web\-ELLPACK \cite{MWHR97}, and PYTHIA
572: \cite{WHRJ96} are serving to address issues in PSE design.
573: Examples of current work in network-based scientific computing
574: are Netsolve \cite{CaDo98}, the NEOS optimization server
575: \cite{CzMM98}, and the computational grid \cite{FoKe97}.
576:
577: The vision of scientific computation in heterogeneous distributed
578: environments places stringent requirements on the portability and
579: interoperation of scientific software that are extremely
580: difficult to achieve \cite{BCPW97}. Such needs have sparked interest
581: in the use of common virtual environments such as Java\footnote{Java is a
582: trademark of Sun Microsystems.} for
583: computational science and engineering. The Java language and its
584: environment (the Java Virtual Machine), which has become
585: available on nearly every computing platform, provides a fixed
586: floating-point model, threads, remote execution, standard GUIs,
587: and other facilities within a simple object-oriented programming
588: language. While these are the main facilities necessary for the
589: construction of problem-solving environments, there has been some
590: reluctance to adopt Java within the scientific community due to
591: concerns about efficiency and the lack of several programming
592: conveniences important to scientists and engineers \cite{BDPR98}.
593: Community efforts such as the Java Grande Forum are seeking to
594: improve this situation \cite{JGFN00}.
595:
596: Virtual environments do not necessarily solve the problem of
597: performance portability, since virtual machine instructions must
598: be mapped on to local computer hardware for execution. Modern
599: computing hardware is extremely complex, characterized by
600: multiple processing units, vector pipes, register farms, several
601: levels of cache (with increasing access times), local memory,
602: remote memory, and disk storage. Getting the highest performance
603: possible requires that the programmer take into account all the
604: special properties of the system in use. This leads to extremely
605: complex software even for the simplest of tasks. Matrix
606: multiplication can turn into a 10,000-line polyalgorithm. Recent
607: approaches have provided new hope for overcoming this
608: software development nightmare. Clint Whaley and Jack Dongarra
609: have recently developed a system, called ATLAS, for Automatically
610: Tuned Linear Algebra Subprograms \cite{WaDo98}. ATLAS generates highly
611: efficient BLAS for a given architecture using an experimental
612: approach. By running many hundreds of tests, ATLAS determines
613: the most efficient way to implement a given operation. The
614: result is consistently on par with, and often exceeding, code
615: which takes expert programmers weeks to develop.
616: Matteo Frigo and Stephen Johnson have taken
617: a similar approach in the computation of fast Fourier transform
618: \cite{FrJo98}. For FFTs, hardware also interacts with the prime
619: factorization of the sequence length $n$ to add further
620: complication. FFTW, the Fastest Fourier Transform in the West,
621: uses heuristics and experimentation to develop a just-in-time
622: strategy for fast computation for a given $n$ on a given
623: processor.\footnote{FFTW won the 1999 Wilkinson Prize for
624: numerical software.}
625:
626:
627: \section{ Mathematical Software Present}
628:
629: In this section I point out a variety of meta-issues that face
630: mathematical software researchers today.
631:
632: \subsection{Mass-market software}
633:
634: Until recently mathematical software was produced mostly by experts in
635: numerical analysis as a byproduct of their research in algorithms.
636: Users of this software also were fairly sophisticated, with some
637: experience in numerical
638: algorithm development themselves. They had an appreciation of the
639: limitations of numerical algorithms, and the necessity of careful
640: verification of results, even when using software developed by experts.
641:
642: Today's community of mathematical software developers and users is much
643: larger, and much more diverse. The great demand for mathematical
644: computations has made mass-marketed mathematical software
645: profitable. Commercially supported
646: mathematical and statistical software is now widely available, with high-level
647: interfaces that allow use by non-programmers. Such users often do not have
648: the background necessary to recognize the difference between a difficult
649: problem and a routine one. The mathematical landscape is still littered
650: with pitfalls, and these users may be too trusting of the results produced
651: by the scientific software systems that they use. Programmers who add
652: mathematical and statistical capabilities to commercial software systems
653: are no longer experts in numerical analysis. They may be content to code
654: up a formula from a book without giving thought to its numerical properties.
655: The problem may be even more severe in systems that are not overtly
656: mathematical in nature. Mathematical computations are increasingly being
657: done in embedded devices, coded by programmers whose mathematical
658: sophistication may be suspect.
659:
660: As a result, in spite of tremendous progress in numerical methods and
661: software, many users of modern mathematical software are at risk. There is
662: now a desperate need for numerical analysts to develop and apply
663: methodologies for the validation of mathematical and statistical software.
664: Techniques, tools, reference data, and reference software are needed to
665: support critical evaluations of mathematical software by developers and
666: users \cite{Bois97}.
667: Unfortunately, there is little interest and support within the
668: research community for such activities.
669:
670: Those software developers who seek advice regarding numerical software
671: production are likely to look to popular sources like Numerical Recipes
672: \cite{PTVF93}. Books like this provide a reasonably good introduction to
673: numerical methods, and the programs they include provide good examples of
674: the basic techniques. Programs like these are often incorporated
675: wholesale into applications, in spite of the fact that they are typically
676: less efficient, robust, and reliable than state-of-the-art mathematical
677: software. The mathematical software community needs more popularizers
678: who can bring the message of good numerical software design to those in
679: other fields.
680:
681: \subsection{Tower of Babel}
682:
683: For many years there was one language for scientific computing: Fortran.
684: This greatly simplified the development and reuse of mathematical software
685: components. Today we are faced with a plethora of programming languages
686: in use for scientific computing. Though officially obsolete, Fortran 77 is
687: still the language of
688: many. Good compilers are now available for Fortran 90, and many have
689: been extended to support Fortran 95, the current Fortran
690: standard, although their adoption by programmers has been slow in coming. The C language
691: has proven much more popular, for which excellent compilers are now
692: available. Most GAMS users who cannot find the software they seek are
693: looking for C procedures. C++, the object-oriented extension to C, is the
694: choice for a growing number of new mathematical modeling projects.
695: Unfortunately, C++ has not, until recently, had an agreed-to standard, and,
696: as a result, developing portable software has been difficult. Java, the
697: popular network-aware object-oriented programming language developed by Sun,
698: is being seriously considered by many, although its performance and language
699: features leave much to be desired. The fact that Java is now being widely
700: taught in universities insures its future. Finally, many software components
701: are being developed in the very-high-level languages used in specialized
702: systems; MATLAB is the primary example.
703:
704: We are clearly facing a transition in computer languages for science and
705: engineering computation. Numerical analysts no longer have much influence
706: on the choice of language of those doing numerical computing.
707: Language choices are more often made based
708: on other considerations, such as the need for convenient and portable
709: graphical user interfaces, visualization tools, and other critical
710: system services. While such services are largely
711: unavailable to Fortran programmers wishing to develop portable systems,
712: they are conveniently at hand in C,
713: C++, and Java. The increased portability afforded by the widespread
714: availability of Java Virtual Machines on Windows, Unix, and Apple
715: platforms, has made Java a very attractive option. While
716: mixed-language programming is possible, and does provide the ability
717: to reuse legacy Fortran software, this option is not popular among users.
718: It adds complexity to the software project, while making the code more
719: difficult to transport.
720:
721: Unfortunately, there is almost no support for the migration of the existing base
722: of Fortran mathematical software components to other languages.
723: As a result, this well-engineered software is being increasingly bypassed
724: in favor of inferior home-grown solutions.
725:
726: \subsection{The risks of self-publishing}
727:
728: The rise of the Internet has greatly eased the exchange of information
729: among researchers. It is simple and convenient for research groups
730: to develop a Web page to distribute software and documentation to potential
731: users. While this has led to increased access to research software, it
732: places the long-term maintenance of the output of the research community
733: in jeopardy. Project Web pages on departmental servers are not permanent
734: fixtures. Nevertheless, many researchers are using such facilities in
735: place of submitting their software to more permanent archives such as
736: {\em netlib} or the {\em Collected Algorithms of the ACM}. There
737: is a danger that much of the currently available expertise embedded in such
738: software will be lost to future researchers.
739:
740:
741: \section{Mathematical Software Future}
742:
743: In this section, I offer a few predictions regarding future
744: mathematical software research and usage.
745:
746: \vspace{1em}
747:
748: \noindent
749: {\bf Prediction:} Within five years ACM will cease print publication of TOMS.
750:
751: \vspace{0.75em}
752:
753: Subscriptions to TOMS have been dropping at the rate of about
754: 5 percent per year for some time. Other ACM journals, and indeed
755: most other mathematics and computer science journals, are
756: experiencing the same phenomenon. One of the reasons for this is
757: the proliferation of specialized journals, principally developed
758: by commercial publishers.
759:
760: For some time, ACM has been considering mechanisms for maintaining
761: their publication program as a viable service to the community.
762: The solution to this problem is found in the ACM Digital Library
763: (ACMDL) which premiered in 1998 \cite{ACM00}. The ACMDL provides
764: its subscribers with online access to {\em all} ACM journal articles
765: and conference proceedings published since 1985 at a subscription
766: fee which is less than the cost of three printed journals. Currently
767: this accounts for more than 350,000 pages of text. Acceptance of the
768: ACMDL by members and subscribers has been overwhelming, providing ACM
769: with the additonal revenue to begin the work of extending the ACMDL
770: holdings to include
771: all material published by ACM since its inception in 1947.
772: At the same time, the success of the ACMDL has contributed to
773: a further 25 percent drop in print subscriptions in 1999. If present
774: trends continue, printed versions of ACM journals will be no longer
775: be sustainable in five years time. Instead, they will be superceded
776: by their electronic counterparts.
777:
778: The ACMDL will serve to blur the distinctions between individual ACM journals.
779: The concept of a journal will be replaced by that of an input stream to the
780: ACMDL controlled by a certification authority, i.e., a board of editors
781: supported by volunteer referees. In such an environment, it will be much
782: easier (and much less financially risky) for ACM to initiate new refereed
783: input streams, and to phase out those which have become less productive.
784: Rather than subscribe to individual journals, ACMDL subscribers will have
785: access to an individually tailored notification service which will alert
786: them to the availability of new articles in their areas of interest.
787:
788: Publications in the ACMDL will not be restricted to articles with a severe
789: page limit. Extended appendices will be easily accommodated, as will other
790: artifacts such as software, audio, video, etc.
791:
792: \vspace{1em}
793:
794: \noindent
795: {\bf Prediction:} Users will no longer install mathematical software on their
796: workstations.
797:
798: \vspace{0.75em}
799:
800: The need for instantaneous distribution and use of mathematical software
801: components in heterogenous network environments will
802: put new pressures for software portability. A key element of the solution will
803: be standardized virtual environments in which software can execute. Java is
804: an example of such an environment. Its widespread availability also provides a
805: new model for software distribution. Complex conglomerations of source code
806: will no longer need to be explicitly downloaded and installed on the local
807: systems in advance of their use. Instead pre-compiled bytecodes for the virtual
808: machine will be able to be downloaded from sites of developers or vendors on
809: demand. This also provides a solution to the problem of distributing patches
810: and updates to software. Rather than purchasing an entire library, software
811: users will have the option of subscribing to a service, paying only for the
812: portions of the library that they actually use.
813:
814: Another new model for software reuse in a network environment is based on a
815: remote execution paradigm. In this case, problem-solving services are made
816: available to users over the network. When a problem need be solved, a
817: message containing a high-level specification of the problem is sent to
818: the service provider, who provides both the software and the execution cycles
819: needed to solve it. This model is probably more appropriate for access to
820: large scale systems, like finite-element modeling packages.
821:
822: \vspace{1em}
823:
824: \noindent
825: {\bf Prediction:} The percentage of people directly using math software
826: libraries will decrease.
827:
828: \vspace{0.75em}
829:
830: The wide availability of problem-solving environments (PSEs) for various domains
831: will bring computational capabilities to an even wider audience than today.
832: These users will make use of the services of the PSE, blissfully unaware
833: of the complex system, involving software libraries, expert systems, and remote
834: execution, which are being marshalled on their behalf.
835:
836: However, if this vision is to be realized, a new class of software designers
837: must be trained. They must be well-versed in numerical analysis, mathematical
838: algorithms, modern software design, and high-performance computing and
839: communications. Additional research in mathematical software must be
840: performed to provide new methods for improving the robustness and
841: adaptibility of mathematical software systems, and to address new problem
842: areas. And finally, new methods
843: for assessing the correctness and reliability of complex mathematical software
844: systems must be devised and deployed.
845:
846: Mathematical software is still a vital and vibrant research area that will
847: increase in importance in the coming decades. We are grateful to John Rice for
848: his vision and leadership in getting us here.
849:
850: %%%{\small \bibliography{JohnRice}}
851:
852: {\small
853: \begin{thebibliography}{10}
854:
855: \bibitem{ACM00}
856: {ACM Digital Library}.
857: \newblock Association for Computing Machinery, New York.
858: \newblock See {\tt http://www.acm.org/dl/}.
859:
860: \bibitem{ABBB99}
861: E.~Anderson, Z.~Bai, C.~Bischof, S.~Blackford, J.~Demmel, J.~Dongarra, J.~Du
862: Croz, A.~Greenbaum, S.~Hammarling, A.~McKenney, and D.~Sorensen.
863: \newblock {\em {LAPACK} User's Guide}.
864: \newblock {SIAM} Publications, Philadelphia, third edition, 1999.
865: \newblock See also {\tt http://www.netlib.org/lapack/}.
866:
867: \bibitem{AsCR79}
868: U.~Ascher, J.~Christiansen, and R.~D. Russell.
869: \newblock A collocation solver for mixed order systems of boundary value
870: problems.
871: \newblock {\em Mathematics of Computation}, 33:659--679, 1979.
872:
873: \bibitem{BCPW97}
874: L.~S. Blackford, A.~Cleary, A.~Petitet, R.~C. Whaley, J.~Demmel, I.~Dhillon,
875: H.~Ren, K.~Stanley, J.~Dongarra, and S.~Hammarling.
876: \newblock Practical experience in the numerical dangers of heterogeneous
877: computing.
878: \newblock {\em {ACM} Transactions on Mathematical Software}, 23(12):133--147,
879: 1997.
880:
881: \bibitem{BCCD97}
882: S.~Blackford, J.~Choi, A.~Cleary, E.~D'Azevedo, J.~Demmel, I.~Dhillon,
883: J.~Dongarra, S.~Hammarling, G.~Henry, A.~Petitet, K.~Stanley, D.~Walker, and
884: R.~C. Whaley.
885: \newblock {\em {ScaLAPACK} USers' Guide}.
886: \newblock {SIAM} Publications, Philadelphia, 1997.
887: \newblock See also {\tt http://www.netlib.org/scalapack/}.
888:
889: \bibitem{BLAST00}
890: {BLAS Technical Forum}.
891: \newblock See {\tt http://www.netlib.org/cgi-bin/checkout/blast/\-blast.pl}.
892:
893: \bibitem{BoHR79}
894: R.~Boisvert, E.~N. Houstis, and J.~R. Rice.
895: \newblock A system for performance evaluation of partial differential equations
896: software.
897: \newblock {\em IEEE Trans. Software Eng}, 5:418--425, 1979.
898:
899: \bibitem{Bois97}
900: Ronald~F. Boisvert, editor.
901: \newblock {\em The Quality of Numerical Software: Assessment and Enhancement}.
902: \newblock Chapman and Hall, London, 1997.
903:
904: \bibitem{BDPR98}
905: Ronald~F. Boisvert, Jack~J. Dongarra, Roldan Pozo, Karin~A. Remington, and
906: G.~W. Stewart.
907: \newblock Developing numerical libraries in {Java}.
908: \newblock {\em Concurrency: Practice and Experience}, 10(11-13):1117--1129,
909: 1998.
910:
911: \bibitem{BoHK85}
912: Ronald~F. Boisvert, Sally~E. Howe, and David~K. Kahaner.
913: \newblock {GAMS}---a framework for the management of scientific software.
914: \newblock {\em {ACM} Transactions on Mathematical Software}, 11:313--355, 1985.
915:
916: \bibitem{BDGR95}
917: Shirley Brown, Jack Dongarra, Eric Grosse, and Tom Rowan.
918: \newblock The netlib mathematical software repository.
919: \newblock {\em D-LIB Magazine}, September 1995.
920: \newblock See {\tt http://www.dlib.org/dlib/september95/09contents.html}.
921:
922: \bibitem{CaDo98}
923: Henri Cassanova and Jack Dongarra.
924: \newblock Applying {Netsolve's} network-enabled server.
925: \newblock {\em IEEE Computational Science \& Engineering}, 5(3):57--67,
926: July-September 1998.
927:
928: \bibitem{Cody75}
929: W.~J. Cody.
930: \newblock The {FUNPACK} package of special function subroutines.
931: \newblock {\em {ACM} Transactions on Mathematical Software}, 1:13--25, 1975.
932:
933: \bibitem{IBM97}
934: International Business~Machines Corporation.
935: \newblock {\em Parallel Engineering and Scientific Subroutine Library for
936: {AIX}, Guide and Reference}, 1997.
937:
938: \bibitem{Cowe84}
939: Wayne~R. Cowell, editor.
940: \newblock {\em Sources and Development of Mathematical Software}.
941: \newblock Prentice-Hall, Englewood Cliffs, {NJ}, 1984.
942:
943: \bibitem{CzMM98}
944: Joseph Czyzk, Michael~P. Mesnier, and Jorge~J. Mor\'{e}.
945: \newblock The {NEOS} server.
946: \newblock {\em IEEE Computational Science \& Engineering}, pages 68--75, 1998.
947: \newblock See also {\tt http://www-fp.mcs.anl.gov/otc/}.
948:
949: \bibitem{deBo79}
950: Carl de~Boor.
951: \newblock {\em A Practical Guide to Splines}, volume~27 of {\em Applied
952: Mathematical Sciences}.
953: \newblock Springer--Verlag, New York, 1978.
954:
955: \bibitem{DoPW93}
956: J.~Dongarra, R.~Pozo, and D.~Walker.
957: \newblock {LAPACK++}: A design overview of object-oriented extensions for high
958: performance linear algebra.
959: \newblock In {\em Proceedings of Supercomputing '93}, pages 162--171. IEEE
960: Computer Society, 1993.
961: \newblock See also {\tt http://www.netlib.org/lapack++/}.
962:
963: \bibitem{DBMS79}
964: J.~J. Dongarra, J.~R. Bunch, C.~B. Moler, and G.~W. Stewart.
965: \newblock {\em {LINPACK} Users' Guide}.
966: \newblock {SIAM} Publications, Philadelphia, 1979.
967:
968: \bibitem{DoGr87}
969: Jack Dongarra and Eric Grosse.
970: \newblock Distribution of mathematical software via electronic mail.
971: \newblock {\em Communications of the {ACM}}, 30(5):403--407, 1987.
972:
973: \bibitem{DDHD90}
974: Jack~J. Dongarra, Jeremy~Du Croz, Sven Hammarling, and Iain~S. Duff.
975: \newblock An set of level 3 basic linear algebra subprograms.
976: \newblock {\em {ACM} Transactions on Mathematical Software}, 16:1--17, 1990.
977:
978: \bibitem{DDHH88}
979: Jack~J. Dongarra, Jeremy~Du Croz, Sven Hammarling, and Richard~J. Hanson.
980: \newblock An extended set of {FORTRAN} basic linear algebra subprograms.
981: \newblock {\em {ACM} Transactions on Mathematical Software}, 14:1--17, 1988.
982:
983: \bibitem{DHLR84}
984: W.~R. Dyksen, E.~N. Houstis, R.~E. Lynch, and J.~R. Rice.
985: \newblock The performance of the collocation and {Galerkin} methods with
986: {Hermite} bicubics.
987: \newblock {\em {SIAM} Journal on Numerical Analysis}, 21:695--715, 1984.
988:
989: \bibitem{DyRR88}
990: W.~R. Dyksen, C.~J. Ribbens, and J.~R. Rice.
991: \newblock The performance of numerical methods for elliptic problems with mixed
992: boundary conditions.
993: \newblock {\em Numerical Methods for Partial Differential Equations},
994: 4:347--361, 1988.
995:
996: \bibitem{FoKe97}
997: Ian Foster and Carl Kesselman.
998: \newblock Globus: A metacomputing infrastructure toolkit.
999: \newblock {\em International Journal of Supercomputer Applications},
1000: 11(2):115--128, 1997.
1001:
1002: \bibitem{FoHS78}
1003: P.~A. Fox, A.~D. Hall, and N.~L. Schryer.
1004: \newblock The {PORT} mathematical subroutine library.
1005: \newblock {\em {ACM} Transactions on Mathematical Software}, 4:104--126, 1978.
1006:
1007: \bibitem{FrJo98}
1008: Matteo Frigo and Steven~G. Johnson.
1009: \newblock {FFTW}: An adaptive software architecture for the {FFT}.
1010: \newblock In {\em Proceedings of the IEEE International Conference on
1011: Acoustics, Speech, and Signal Processing}, volume~3, pages 1381--1384. IEEE
1012: Computer Society, 1998.
1013: \newblock Also see {\tt http://www.fftw.org/}.
1014:
1015: \bibitem{Full77}
1016: Wayne~F. Fullerton.
1017: \newblock Portable special function routines.
1018: \newblock In Wayne Cowell, editor, {\em Portability of Numerical Software},
1019: pages 452--483. Springer--Verlag, New York, 1977.
1020: \newblock See also {\tt http://www.netlib.org/fnlib/}.
1021:
1022: \bibitem{GaHR94}
1023: E.~Gallopoulos, E.~N. Houstis, and J.~R. Rice.
1024: \newblock Computer as thinker/doer: Problem-solving environments for
1025: computational science.
1026: \newblock {\em IEEE Computational Science \& Engineering}, 1(2):11--23, Summer
1027: 1994.
1028:
1029: \bibitem{GBDM77}
1030: B.~S. Garbow, J.~M. Boyle, J.~J. Dongarra, and C.~B. Moler.
1031: \newblock {\em Matrix Eigensystem Routines -- {EISPACK} Guide Extension},
1032: volume~51 of {\em Lecture Notes in Computer Science}.
1033: \newblock Springer--Verlag, New York, 2nd edition, 1977.
1034:
1035: \bibitem{Gear71}
1036: C.~William Gear.
1037: \newblock {\em Numerical Initial Value Problems in Ordinary Differential
1038: Equations}.
1039: \newblock Prentice-Hall, Englewood Cliffs, {NJ}, 1971.
1040:
1041: \bibitem{GBDJ94}
1042: Al~Geist, Adam Beguelin, Jack Dongarra, Weicheng Jiang, Robert Mancheck, and
1043: Vaidy Sunderam.
1044: \newblock {\em {PVM}: Parallel Virtual Machine}.
1045: \newblock {MIT} Press, 1994.
1046: \newblock See also {\tt http://www.netlib.org/pvm/}.
1047:
1048: \bibitem{GSNL98}
1049: William Gropp, Marc Snir, Bill Nitzberg, and Ewing Lusk.
1050: \newblock {\em MPI: The Complete Reference}.
1051: \newblock Scientific and Engineering Computation Series. {MIT} Press, 1998.
1052:
1053: \bibitem{NIST00}
1054: {Guide to Available Mathematical Software}.
1055: \newblock National Institute of Standards and Technology.
1056: \newblock See {\tt http://math.nist.gov/gams/}.
1057:
1058: \bibitem{Herb60}
1059: R.~J. Herbold.
1060: \newblock {QuadI}.
1061: \newblock {\em Communications of the {ACM}}, 3(2):74, February 1960.
1062:
1063: \bibitem{HoLR78}
1064: E.~N. Houstis, R.~E. Lynch, and J.~R. Rice.
1065: \newblock Evaluation of numerical methods for elliptic partial differential
1066: equations.
1067: \newblock {\em Journal Computational Physics}, 27:323--350, 1978.
1068:
1069: \bibitem{HoMR85}
1070: E.~N. Houstis, W.~F. Mitchell, and J.~R. Rice.
1071: \newblock Algorithm 637 {GENCOL}: Collocation on general domains with bicubic
1072: {Hermite} polynomials.
1073: \newblock {\em {ACM} Transactions on Mathematical Software}, 11:413--415, 1985.
1074:
1075: \bibitem{HoMR85a}
1076: E.~N. Houstis, W.~F. Mitchell, and J.~R. Rice.
1077: \newblock Algorithm 638 {INTCOL} and {HERMCOL}: Collocation on rectangular
1078: domains with bicubic {Hermite} polynomials.
1079: \newblock {\em {ACM} Transactions on Mathematical Software}, 11:416--418, 1985.
1080:
1081: \bibitem{HoRP89}
1082: E.~N. Houstis, J.~R. Rice, and T.~S. Papatheodorou.
1083: \newblock Parallel {ELLPACK}: An expert system for parallel processing of
1084: partial differential equations.
1085: \newblock {\em Mathematics and Computers in Simulation}, 31:497--508, 1989.
1086:
1087: \bibitem{HoRV90}
1088: E.~N. Houstis, J.~R. Rice, and R.~Vichnevetsky, editors.
1089: \newblock {\em Intelligent Mathematical Software Systems}.
1090: \newblock North-Holland, Amsterdam, 1990.
1091:
1092: \bibitem{HoRV92a}
1093: E.~N. Houstis, J.~R. Rice, and R.~Vichnevetsky, editors.
1094: \newblock {\em Artificial Intelligence, Expert Systems and Symbolic Computing}.
1095: \newblock North-Holland, Amsterdam, 1992.
1096:
1097: \bibitem{HoRV92}
1098: E.~N. Houstis, J.~R. Rice, and R.~Vichnevetsky, editors.
1099: \newblock {\em Expert Systems for Scientific Computing}.
1100: \newblock North-Holland, Amsterdam, 1992.
1101:
1102: \bibitem{HoRi80}
1103: E.~N. Houstis and J.R. Rice.
1104: \newblock An experimental design for the computational evaluation of elliptic
1105: partial differential equation solvers.
1106: \newblock In {\em The Production and Assessment of Numerical Software}, pages
1107: 57--66. Academic Press, 1980.
1108:
1109: \bibitem{IMSL00}
1110: {IMSL} libraries.
1111: \newblock Visual Numerics, Inc., Houston.
1112: \newblock See {\tt http://www.vni.com/}.
1113:
1114: \bibitem{JGFN00}
1115: {Java Grande Forum Numerical Working Group}.
1116: \newblock {National Institute of Standards and Technology}.
1117: \newblock See {\tt http://math.nist.gov/javanumerics/}.
1118:
1119: \bibitem{KlRe68}
1120: Melvin Klerer and Juris Reinfelds, editors.
1121: \newblock {\em Interactive Systems for Experimental Applied Mathematics}.
1122: \newblock Academic Press, New York, 1968.
1123: \newblock This is the proceedings of the ACM Symposium on Interactive Systems
1124: for Experimental Applied Mathematics held in Washington, DC in 1967.
1125:
1126: \bibitem{LHKK79}
1127: C.~Lawson, R.~Hanson, D.~Kincaid, and F.~Krogh.
1128: \newblock Basic linear algebra subprograms for {Fortran} usage.
1129: \newblock {\em {ACM} Transactions on Mathematical Software}, 5:308--323, 1979.
1130:
1131: \bibitem{MWHR97}
1132: Shahani Markus, Sanjiva Weerawarana, Elias~N. Houstis, and John~R. Rice.
1133: \newblock Scientific computing via the web: The net pellpack {PSE} server.
1134: \newblock {\em IEEE Computational Science \& Engineering}, 4(3), July-September
1135: 1997.
1136:
1137: \bibitem{Matl00}
1138: {MATLAB}.
1139: \newblock The MathWorks, Inc.
1140: \newblock See {\tt http://www.mathworks.com/}.
1141:
1142: \bibitem{MoGH80}
1143: J.~J. Mor\'{e}, B.~S. Garbow, and K.~E. Hillstrom.
1144: \newblock User guide for {MINPACK-1}.
1145: \newblock Technical Report ANL-80-74, Argonne National Laboratory, Argonne, IL,
1146: 1980.
1147: \newblock See also {\tt http://www.netlib.org/minpack/}.
1148:
1149: \bibitem{NAG00}
1150: {NAG} libraries.
1151: \newblock Numerical Algorithms Group, Ltd., Oxford.
1152: \newblock See {\tt http://www.nag.co.uk/}.
1153:
1154: \bibitem{Petz82}
1155: Linda Petzold.
1156: \newblock A description of {DASSL}: a differential/algebraic systems solver.
1157: \newblock {\em IMACS Transactions on Scientific Computation}, 1, 1982.
1158:
1159: \bibitem{PiDK83}
1160: R.~Piessens, E.~de~Donker, and D.~Kahaner.
1161: \newblock {\em {QUADPACK} -- A Subroutine Package for Automatic Integration}.
1162: \newblock Springer--Verlag, New York, 1983.
1163: \newblock See also {\tt http:www.netlib.org/quadpack/}.
1164:
1165: \bibitem{PINE00}
1166: {PINEAPL}: A {European} project in {HPCN}.
1167: \newblock Numerical Algorithms Group, Ltd., Oxford.
1168: \newblock See {\tt http://www.nag.co.uk/projects/PINEAPL/}.
1169:
1170: \bibitem{PTVF93}
1171: William~H. Press, Saul~A. Teukolsky, William~T. Vetterling, and Brian~P.
1172: Flannery.
1173: \newblock {\em Numerical Recipes in C: The Art of Scientific Computing}.
1174: \newblock Cambridge University Press, 1993.
1175:
1176: \bibitem{RiBo96}
1177: J.~R. Rice and R.~F. Boisvert.
1178: \newblock From scientific software libraries to problem-solving environments.
1179: \newblock {\em IEEE Computational Science and Engineering}, 3(3):44--53, Fall
1180: 1996.
1181:
1182: \bibitem{RiHD81}
1183: J.~R. Rice, E.~N. Houstis, and W.~R. Dyksen.
1184: \newblock A population of linear, second order, elliptic partial differential
1185: equations on rectangular domains.
1186: \newblock {\em Mathematics of Computation}, 36:475--484, 1981.
1187:
1188: \bibitem{RiRW84}
1189: J.~R. Rice, C.~Ribbens, and W.~Ward.
1190: \newblock Algorithm 622: A simple macro processor.
1191: \newblock {\em {ACM} Transactions on Mathematical Software}, 10:410--416, 1984.
1192:
1193: \bibitem{Rice68}
1194: John~R. Rice.
1195: \newblock On the construction of polyalgorithms for automatic numerical
1196: analysis.
1197: \newblock In {\em Interactive Systems for Experimental Applied Mathematics},
1198: pages 301--313. Academic Press, New York, 1968.
1199:
1200: \bibitem{Rice71}
1201: John~R. Rice, editor.
1202: \newblock {\em Mathematical Software}.
1203: \newblock Academic Press, New York, 1971.
1204:
1205: \bibitem{Rice75}
1206: John~R. Rice.
1207: \newblock A metalgorithm for adaptive quadrature.
1208: \newblock {\em Journal of the Association for Compputing Machinery}, 22:61--82,
1209: 1975.
1210:
1211: \bibitem{Rice76}
1212: John~R. Rice.
1213: \newblock The algorithm selection problem.
1214: \newblock In Rubicoff and Yovits, editors, {\em Advances in Computers},
1215: volume~15. Academic Press, 1976.
1216:
1217: \bibitem{Rice77}
1218: John~R. Rice, editor.
1219: \newblock {\em Mathematical Software {III}}.
1220: \newblock Academic Press, New York, 1977.
1221:
1222: \bibitem{Rice78}
1223: John~R. Rice.
1224: \newblock Algorithm 525: {ADAPT} - adaptive smooth curve fitting.
1225: \newblock {\em {ACM} Transactions on Mathematical Software}, 4:1--30, 1978.
1226:
1227: \bibitem{Rice79a}
1228: John~R. Rice.
1229: \newblock Methodology for the algorithm selection problem.
1230: \newblock In {\em Performance Evaluation of Numerical Software}, pages
1231: 301--307. North-Holland, 1979.
1232:
1233: \bibitem{Rice79}
1234: John~R. Rice.
1235: \newblock Software for numerical computation.
1236: \newblock In P.~Wegner, editor, {\em Research Directions in Software
1237: Technology}. MIT Press, 1979.
1238:
1239: \bibitem{Rice83}
1240: John~R. Rice.
1241: \newblock Performance analysis of 13 methods to solve the {Galerkin} method
1242: equations.
1243: \newblock {\em Linear Algebra and Applications}, 53:533--535, 1983.
1244:
1245: \bibitem{Rice84}
1246: John~R. Rice.
1247: \newblock Algorithm 625: A two dimensional domain processor.
1248: \newblock {\em {ACM} Transactions on Mathematical Software}, 10:443--452, 1984.
1249:
1250: \bibitem{Rice84a}
1251: John~R. Rice.
1252: \newblock The {BLAS}, linear algebra modules and supercomputers.
1253: \newblock Technical Report CSD-TR-501, Purdue University Department of Computer
1254: Science, 1984.
1255:
1256: \bibitem{RiBo85}
1257: John~R. Rice and Ronald~F. Boisvert.
1258: \newblock {\em Solving Elliptic Problems Using {ELLPACK}}, volume~2 of {\em
1259: Springer Series in Computational Mathematics}.
1260: \newblock Springer--Verlag, New York, 1985.
1261:
1262: \bibitem{RiRo66}
1263: John~R. Rice and Saul Rosen.
1264: \newblock {NAPSS -- A Numerical Analysis Problem Solving System}.
1265: \newblock In {\em Proceedings of the ACM National Conference}, pages 51--56,
1266: 1966.
1267:
1268: \bibitem{RiSw87}
1269: John~R. Rice and H.~D. Schwetman.
1270: \newblock Interface issues in a software parts technology.
1271: \newblock In {\em Software Reusability}. IEEE Computer Society Press, 1987.
1272:
1273: \bibitem{ShGo75}
1274: L.~F. Shampine and M.~K. Gordon.
1275: \newblock {\em Computer Solution of Ordinary Differential Equations}.
1276: \newblock W. H. Freeman and Co., San Francisco, 1975.
1277:
1278: \bibitem{ShWa80}
1279: L.~F. Shampine and H.~A. Watts.
1280: \newblock Design of a user oriented package of {ODE} solvers.
1281: \newblock Technical Report SAND79-2374, Sandia Laboratories, Albuquerque, NM,
1282: 1980.
1283:
1284: \bibitem{SBDG76}
1285: B.~T. Smith, J.~M. Boyle, J.~J. Dongarra, B.~S. Garbow, Y.~Ikebe, and V.~C.
1286: Klema.
1287: \newblock {\em Matrix Eigensystem Routines -- {EISPACK} Guide}, volume~6 of
1288: {\em Lecture Notes in Computer Science}.
1289: \newblock Springer--Verlag, New York, 2nd edition, 1976.
1290:
1291: \bibitem{SnLi49}
1292: Frances~E. Snyder and Hubert~M. Livingston.
1293: \newblock Coding of a {Laplace} boundary value problem for the {UNIVAC}.
1294: \newblock {\em Mathematical Tables and Other Aids to Computation}, 3:341--350,
1295: January 1949.
1296:
1297: \bibitem{SwSw79}
1298: P.~N. Swarztrauber and R.~A. Sweet.
1299: \newblock Algorithm 541: Efficient {Fortran} subprograms for the solution of
1300: elliptic partial differential equations.
1301: \newblock {\em {ACM} Transactions on Mathematical Software}, 5:352--364, 1979.
1302: \newblock See also {\tt http://www.netlib.org/fishpak/}.
1303:
1304: \bibitem{Swar82}
1305: Paul~N. Swarztrauber.
1306: \newblock Vectorizing the {FFT}s.
1307: \newblock In Garry Rodrigue, editor, {\em Parallel Computation}, pages 51--84.
1308: Academic Press, New York, 1982.
1309: \newblock See also {\tt http://www.netlib.org/fftpak/}.
1310:
1311: \bibitem{TOMS00}
1312: {ACM Transactions on Mathematical Software}.
1313: \newblock Association for Computing Machinery, New York.
1314: \newblock See {\tt http://www.acm.org/toms/}.
1315:
1316: \bibitem{WHRJ96}
1317: S.~Weerawarana, E.~N. Houstis, J.~R. Rice, A.~Joshi, and C.E. Houstis.
1318: \newblock {PYTHIA}: A knowledge based system to select scientific algorithms.
1319: \newblock {\em {ACM} Transactions on Mathematical Software}, 22:447--468, 1996.
1320:
1321: \bibitem{WaDo98}
1322: R.~C. Whaley and J.~Dongarra.
1323: \newblock Automatically tuned linear algebra software.
1324: \newblock In {\em Proceedings of Supercomputing '98}. IEEE Computer Society,
1325: 1998.
1326: \newblock Also see {\tt http://www.netlib.org/atlas/}.
1327:
1328: \bibitem{WiWG51}
1329: M.~V. Wilkes, D.~J. Wheeler, and S.~Gill.
1330: \newblock {\em The Preparation of Programs for an Electronic Digital Computer}.
1331: \newblock Addison Wesley Press, Cambridge, MA, 1951.
1332:
1333: \bibitem{WiRe71}
1334: J.~H. Wilkinson and C.~Reinsch, editors.
1335: \newblock {\em Linear Algebra}, volume~II of {\em Handbook for Automatic
1336: Computation}.
1337: \newblock Springer--Verlag, New York, 1971.
1338:
1339: \bibitem{Wolf99}
1340: Stephen Wolfram.
1341: \newblock {\em The Mathematica Book}.
1342: \newblock Cambridge University Press, 1999.
1343:
1344: \end{thebibliography}
1345:
1346: }
1347:
1348: \end{document}
1349:
1350: