Cholesky Factorization

  • PDF / 11,731,162 Bytes
  • 291 Pages / 565.087 x 755.008 pts Page_size
  • 100 Downloads / 193 Views

DOWNLOAD

REPORT


Definition C* (pronounced “see-star”) refers to two distinct dataparallel dialects of C developed by Thinking Machines Corporation for its Connection Machine supercomputers. The first version () is organized around the declaration of domains, similar to classes in C++, but when code associated with a domain is activated, it is executed in parallel within all instances of the domain, not just a single designated instance. Compound assignment operators such as += are extended in C* to perform parallel reduction operations. An elaborate theory of control flow allows use of C control statements in a MIMD-like, yet predictable, fashion despite the fact that the underlying execution model is SIMD. The revised version () replaces domains with shapes that organize processors into multidimensional arrays and abandons the MIMD-like control-flow theory.

Discussion Of the four programming languages (*Lisp, C*, CM Fortran, and CM-Lisp) provided by Thinking Machines Corporation for Connection Machine Systems, C* was the most clever (indeed, perhaps too clever) in trying to extend features of an already existing sequential language for parallel execution. To quote the language designers: ▸ C* is an extension of the C programming language designed to support programming in the data parallel style, in which the programmer writes code as if a processor were associated with every data element. C* features a single new data type (based on classes in C++), a synchronous execution model, and a minimal number of extensions to C statement and expression

syntax. Rather than introducing a plethora of new language constructs to express parallelism, C* relies on existing C operators, applied to parallel data, to express such notions as broadcasting, reduction, and interprocessor communication in both regular and irregular patterns [, , ].

The original proposed name for the language was *C, not only by analogy with *Lisp, but with a view for the potential of making a similarly data-parallel extension to the C++ language, which would then naturally be called *C++. However, the marketing department of Thinking Machines Corporation decided that “C*” sounded better. This inconsistency in the placement of the “*” did confuse many Thinking Machines customers and others, resulting in frequent references to “*C” anyway, and even to “Lisp*” on occasion.

The Initial Design of C* The basic idea was to start with the C programming language and then augment it with the ability to declare something like a C++ class, but with the keyword class replaced with the keyword domain. As in C++, a domain could have functions as well as variables as members. However, the notion of method invocation (calling a member function on a single specific instance) was replaced by the notion of domain activation (calling a member function, or executing code, on all instances simultaneously and synchronously). Everything else in the language was driven by that one design decision, that one metaphor. Two new keywords, mono and poly, were introduced to describe in w