In past lives, I have designed and implemented business applications, real-time control systems, card-key access systems, acoustic-navigation systems, and various translators and device drivers. I have used IBM-360, HP-1000, CDC-3300, PDP-12, CDC Cyber, 8080, Z80, 6800, 80x86, 680x0, Pyramid, SPARC, and of course Sequent hardware, and programmed in each machine's assembler, FORTRAN, Algol, SNOBOL, COBOL, Pascal, C, lex/yacc, C++, and countless spreadsheets and scripting languages. Despite this diversity, there are a -lot- of, well, patterns that keep appearing.
Unfortunately, many of these patterns are locked tightly in the heads and source code of the practitioners. A recurring tragedy is that these patterns are often distorted or destroyed as software is maintained and modified. We need a way of setting down and communicating these patterns.
I was introduced to pattern languages in an IEEE forum featuring Ward Cunningham, Norm Kerth, and Rik Smoody. I immediately bought Christopher Alexander's works and read them, and found out that my house strays somewhat from the Timeless Way. After quelling (at least for now) the urge to immediately install a second set of windows in every room, I started thinking about software-related patterns. With much encouragement and assistance from Ward Cunningham and Steve Peterson, I made a first attempt at setting some parallel-performance-improvement patterns down on paper.
My ambition is to codify the large body of parallel-performance knowledge in a way that allows practitioners who are not necessarily parallel-performance-programming experts to locate the tools they need to attack their specific problem with minimal time, effort, and aggravation. I believe that good organization (perhaps following a fault-tree model) and indexing of the material combined with hypertext is required in order to meet this goal.
I draw much of my inspiration for this effort from Gradshteyn's and Ryzhik's Table of Integrals, Series, and Products (G&R). This tome contains 1160 pages of equations with perhaps 6-8 equations per page. I don't know how much time went into this book, but the original author (Rhyzhik) died during World War II after having published the first two editions in Russian. The second author (Gradshteyn) died sometime before the early 1960s, in the midst of preparing the fourth edition, which was completed by Geronimus and Tseytlin. Jeffrey produced the first English translation in 1963, and produced a subsequent English edition (of which I have a copy) in 1980.
Even with today's symbolic mathematics packages (e.g., Macsyma, Mathematica, and Maple), G&R is still a must for people doing heavy-duty mathematical work. One of the reasons for its usefulness and longevity is its method for converting an equation to a canonical form and then indexing these canonical forms.
My hope is to find a similar canonicalization for parallel-performance patterns that non-experts can use effectively and that can adapt to the inevitable rapid changes in computer architecture. A first attempt toward this goal may be found in the Portland Pattern Repository.