| OCR Text |
Show 20 generate-and-test problem-solving methods. A more realistic reason for pursuing OR-parallel logic programming is that its conceptual simplicity makes it a good candidate for a "first cut" at parallel logic programming in general. Unrestricted and restricted AND-parallelism seem somewhat difficult to realize because the inherent problems are daunting. By contrast. it is quite easy to implement OR-parallel logic programs if efficiency is not a concern. Currently. serious research in OR-parallel logic programming is being conducted by three research groups (not including the author). The Swedish Institute of Computer Science (SICS) is the site of the most active group. which is investigating schemes for exploiting standard multiprocessors as well as novel architectures. David H. D. Warren (of the Warren Abstract Machine) is continuing his efforts toward faster logic programs by considering OR-parallel approaches. Finally, researchers Argonne National Laboratory have been investigating OR-parallel logic programs and have developed a true multiprocessing implementation. These three groups have combined their efforts in a loose consortium optimistically termed the Gigalips Project. Their contributions, as well as others'. will be noted in more detail below. 2.3 Special Problems of Pure OR-Parallel Logic Programs There are two major stumbling blocks to efficient OR-parallel logic programming. The first problem is the multiple-binding environment problem. which has made the implementation of OR-parallel logic programming on genuine multiprocessors a challenging task. The second is the task migration problem, which affects the ability of all processor to keep busy doing useful work with minimal overhead. These two problems are intimately connected. The solution to the environment problem dictates the efficiency of the migration problem, and the desire for fast task migration places a severe constraint on the method used for handling the environment. 2.3.1 The Multiple-Binding Environment Problem A variable in a logic program is represented by a value ceU which typically contains a value (if it fits in the cell), a pointer to a value on the heap, a reference to |