| OCR Text |
Show 18 goals complete, a join operation is perlormed and the solutions (bindings) which ar identical across all solutions are kept. Sets of compatible variable bindings are produced. Logic programs based on the sync method use join AND-parallelism [31]. A second kind of unrestricted AND-parallelism is reconciliation AND-paraUelism [36]. In this method, all goals are solved concurrently, and information about bindings made by a goal (in a local environment) is broadcast to other processes. If a process receives a broadcast of a value for one of its variables, it can determine whether that binding is, in fact, part of a solution which it could produce. If not, the original goal must abandon the solution of which that binding was a part. This activity is termed reconciling the bindings. When all goals have completed, the resulting bindings are guaranteed to be compatible. Both of these methods for exploiting unrestricted AND-parallelism suffer from a potentially huge combinatorial explosion. Because of this, they are considered too inefficient for implementation. Only one serious effort has been proposed [33]. A more restricted method of exploiting concurrent goal solution is committed-choice AND-paraUelism. This method restricts parallelism by removing the non-determinism which is so elegantly described in logic programming. By assuming that only one solution will be found, much of the combinatorial explosion of unrestricted AND-parallelism is avoided. Furthermore, since it is known that all goals of a clause are working on a single solution, they can incrementally cooperate to construct that solution. These methods generally rely on some sort of guard [26] on each clause to select the single clause for each procedure invocation. Examples of languages which use committed-choice AND-parallelism are Parlog [21] and its ancestor IC-Prolog, Concurrent Prolog and its restricted descendant Flat Concurrent Prolog (FCP) [43], and Guarded Horn Clause (GCH) [49]. At least one system based on this type of language as been implemented on a genuine multiprocessor [46]. Pipeline AND-parallelism is another scheme by which goals are solved concurrently. A pipeline is arranged to connect goals which share variables, and the first goal in the pipeline is designated the producer of bindings for the variable. As soon |