Home
        Using Attributed Variables in the Implementation of
         Contents
1.      Dynamic De   pendent And parallel Scheme     model of K  Shen  26   In a very simplified form  the DDAS model is an extension to  goal level  independent and parallel models  which allows fine grained synchronization of tasks  implementing a form of    depen   dent    and parallelism  Parallelism in this model is controlled by means of    Ex   tended Conditional Graph Expressions     ECGE for short  which are of the form     conditions   gt  goals    As such  these expressions are identical to those used in  standard independent and parallelism  if the conditions hold  then the goals can be  executed in parallel  else  they are to be executed sequentially  The main difference  is that a new builtin is added  dep 1  This builtin can appear as part of the con   ditions of an ECGE  Its effect is to mark the variable s  appearing in its argument  specially as    shared    or    dependent    variables  This character is in effect during  the execution of the goals in the ECGE and disappears after they succeed  Only the  leftmost active  i e  non finished  goal in the ECGE  the    producer     is allowed to  bind such variables  Other goals which try to bind such variables  the    consumers       must suspend until the variable is bound or they become leftmost  i e  all the goals  to their left have finished   In order to support this model in K amp P we assume a  source to source transformation  using term_expansion 2  of ECGEs  an ECGE is  turned into a Prolog if then else s
2.      N gt 0   T    NINs   consumer   HIT         Ni is N 1    consumer  T    producer  N1 Ns         Of course  an equivalent distributed producer consumer situation  in which the  elements are consumed in the same order as they are produced  as in the program  above  can be easily implemented making direct use of the Linda primitives using  the query        N 10  lproducer N   amp   alba  lconsumer     and the following program     lproducer N     lproducer N 1   lconsumer    lconsumer 1      lproducer 0 C        lconsumer C      linda  out  message  C end    linda rd message C T     lproducer N C     lconsumer_data T C      N gt 0    linda  out  message  C number N       lconsumer_data end _     Ni is N 1  lconsumer_data number N  C      Ci is C i  C1 is Ctl    lproducer  N1 C1   lconsumer  C1         However  arguably this program lacks the elegance of the shared variable commu   nication based program  for example  if we want to run simultaneously several  instances of producers and consumers  the generation of new identifiers for the mes   sages must be explicitly encoded  The shared variable communication approach  sketched allows in some ways having the best of both worlds or  in any case  being  able to choose between them  It certainly provides the expected functionality  Its  performance of course depends heavily on the performance of the blackboard im   plementation  However  this is certainly also the case if the Linda primitives are  used directly     5 Implement
3.   6th  Intl Symposium on  Programming Language Implementation and Logic Programming  September  1994     S  K  Debray  N  W  Lin  and M  Hermenegildo  Task Granularity Analysis in  Logic Programs  In Proc  of the 1990 ACM Conf  on Programming Language  Design and Implementation  pages 174 188  ACM Press  June 1990     A  Colmerauer et Al  Prolog I  Reference Manual and Theoretical Model   Groupe D   intelligence Artificielle  Facult   Des Sciences De Luminy  Marseilles   1982     European Computer Research Center  Eclipse User   s Guide  1993     S  Gregory  Parallel Logic Programming in PARLOG  the Language and its  Implementation  Addison Wesley Ltd   Wokingham  England  1987     M  Hermenegildo  A Simple  Distributed Version of the  amp  Prolog System  CLIP  TR  School of Computer Science  Technical University of Madrid  UPM   1994   Available from http   www clip dia fi upm es     M  Hermenegildo  D  Cabeza  and M  Carro  On the Uses of Attributed Vari   ables in Parallel and Concurrent Logic Programming Systems  CLIP TR   School of Computer Science  Technical University of Madrid  UPM   1994   Available from http   www clip dia fi upm es     M  Hermenegildo and K  Greene  The  amp  prolog System  Exploiting Indepen   dent And Parallelism  New Generation Computing  9 3 4  233 257  1991     C  Holzbaur  Metastructures vs  Attributed Variables in the Context of Exten   sible Unification  In 1992 International Symposium on Programming Language  Implementation and Logic Progr
4.   Lan   guages in Distributed Environments    We now describe a concrete application of our ideas  Our objective in this example  is to combine the two main approaches currently used in concurrent logic program   ming  and which are seen traditionally as unrelated     shared variable    systems  in  which communication among parallel tasks is done through logical variables  e g   Concurrent Prolog  25   PARLOG  12   GHC  30   Janus  24   AKL  20   Oz  27    etc    and    distributed    or    blackboard    systems  in which communication is done  through explicit built ins which access shared channels or global data areas  e g   Multi Prolog  2   Shared Prolog  3   and Prologs incorporating Linda  7   being one  of the most popular Linda implementations the one bundled with SICStus  1    In  order to do that  we will sketch a method for implementing communication through  shared variables by means of a blackboard  We assume the availability of the prim   itives introduced in the first sections  We also assume that we want to implement a  simple concurrent  constraint  language which basically has a sequential operator   a parallel operator  which  since we are in a distributed environment could actually  mean execution in another node of the net   and    ask    and    tell    unification prim   itives  The sort of system that we have in mind could perhaps be a local area net   where the nodes are workstations  The incorporation of the sequential operator  to  mark goals that s
5.  The true motivation for explicit  encodings is that it enables the user to freely define the combination and interaction  of such delay primitives with other uses of the attributed variables such as the im   plementation of a constraint solver  Note that such a solver may also itself perform  some delaying  for example when dealing with non linear constraints     3 Kernel Concurrent Primitives    We now introduce a simple concurrent parallel language that we call    Kernel  amp    Prolog     K amp P   The purpose of this language is to provide a small set of basic  operators which will allow the implementations that we would like to propose  This  language is essentially identical to the kernel language used in the shared memory   15  and distributed  13  implementations of the  amp  Prolog system  but it is described  here for the first time    Essentially  the K amp P language subsumes Prolog and includes all the attributed  variable primitives described in Section 2  In addition  it provides the following  operators which provide for creation of processes  assignment of computational re   sources to them  and synchronization     e  amp  2     Standard fork join parallel conjunction operator  the one used  for  example  by the  amp  Prolog parallelizing compiler  4    It performs a parallel     fork    of the two literals involved and waits for the execution of both literals  to finish  i e  the join   If no processors are available  then the two literals  may be executed 
6.  it is attached  In general  a number of other primitives are often provided  which allow pretty printing and dumping of the results in a user   understandable  format     2 2 Attributed Variables And Coroutining     an Example    The following example  due to  17  serves both to illustrate the use of the primitives  introduced in the previous section and also to recover the functionality of freeze 2   10  since attribute variables are  as mentioned before  most easily implemented in  practice by    cannibalizing    an existing implementation of freeze     freeze X  Goal      attach_attr V  frozen V Goal     X  V     combine_attr frozen Vi G1    frozen V2 G2       detach_attr V1    detach_attr  V2    Vi   V2   attach_attr V1   frozen V1  G1 G2        verify_attr frozen V Goal  Val      detach_attr V    V   Val   call  Goal         The call to attach_attr ties the term representing the frozen goal to the relevant  variable  When the variable is bound the unification routine escapes to the user   defined generic handler verify_attr which in turn performs the meta call  Note  the definition of combine_attr needed for handling the case where two variables  which have frozen goals attached are unified  a conjunction of the goals is attached  to the resulting variable    Note that the explicit encoding of delay primitives such as freeze 2 and their  incorporation into the attributed variable handling mechanism is not to be under   stood as a mere substitute for the original C code 
7.  language also provides as base primitives a  Linda like  7  library  and a lower level Unix socket interface both of which reproduce  the functionality of those of SICStus Prolog  In fact  in distributed environments the  primitives described above are implemented using the Linda library  13   However   the Linda interface can also be used directly  there is a server process which handles  the blackboard  Prolog client processes can write  using out 1   read  using rd 1      2Note that the goals do not need in any way to be independent     this is only necessary if certain  efficiency properties of the parallel execution are to hold  However  unlike in the source language   in the kernel language care must be taken to lock properly concurrent accesses to shared variables   see locking primitives     3This is implemented by having a private goal stack for each agent  from which other nodes  cannot pick work  and putting the goal being scheduled on the private goal stack of the appropriate  agent     and remove  using in 1  data  i e  Prolog terms  to and from the blackboard  If  the data is not present on the blackboard  the process suspends until it is available   Alternatively  other primitives  in_noblock 1 and rd_noblock 1  do not suspend  if the data is not available     they fail instead and thus allow taking an alternative  action if the data is not in the blackboard  The input primitives can also wait on  disjunctions of terms     4 Implementing Concurrent  Constraint
8.  when it becomes idle  For example       p X   amp   node   q X       will fork the task p X  in parallel with the rest of the computation and  assign it to node node   The second argument can be a variable  If the variable  is instantiated at the time the literal is reached  its value is used to determine  its placement  If the variable is unbound at that time  then the goal is not  assigned to any particular node and the variable is bound to the node id  of  the node that picks up the task  when it does so     e  amp  amp   2        fair    placement fork operator  It performs a parallel fork of the  literal involved  assigning it to a given node and finding  or  if not available   creating  a thread for it in that node     e wait X   This primitive suspends the current execution thread until X is  bound  X can also contain a disjunction of variables  in which case execu   tion waits for either one of such variables to be bound     e lock X L  unlock L   This primitive gets releases a lock L  on the term X      Note that in the discussion above a  parallel  conjunction of literals can always  be used in place of a literal  i e  the expression       a b   amp   c  d amp  e  f        is supported  Also  note that the    placement    primitives   amp   2 and  amp  amp   2  and the  wait  lock primitives are sufficient to express all the other primitives    In addition to the    placement    operators described above  which can be directly  used in distributed environments  the
9. Proceedings of the 1995 International Conference on Logic Programming    Using Attributed Variables in  the Implementation of Concurrent  and Parallel Logic Programming    Systems     M  Hermenegildo  D  Cabeza  M  Carro  Computer Science Department   Technical University of Madrid  UPM   Spain   herme  dcabeza mcarro  fi upm es    Abstract    Incorporating the possibility of attaching attributes to variables in a logic program   ming system has been shown to allow the addition of general constraint solving  capabilities to it  This approach is very attractive in that by adding a few primi   tives any logic programming system can be turned into a generic constraint logic  programming system in which constraint solving can be user defined  and at source  level     an extreme example of the    glass box    approach  In this paper we propose a  different and novel use for the concept of attributed variables  developing a generic  parallel concurrent  constraint  logic programming system  using the same    glass  box    flavor  We argue that a system which implements attributed variables and  a few additional primitives can be easily customized at source level to implement  many of the languages and execution models of parallelism and concurrency cur   rently proposed  in both shared memory and distributed systems  We illustrate this  through examples and report on an implementation of our ideas     Keywords  Implementation Techniques  Concurrency  Parallelism  Logic Program   mi
10. amming  pages 260 268  LNCS631  Springer  Verlag  August 1992     C  Holzbaur  SICStus 2 1 DMCAI Clp 2 1 1 User   s Manual  University of  Vienna  1994     Serge Le Houitouze  A New Data Structure for Implementing Extensions to  Prolog  In P  Deransart and J  Matuszynski  editors  Proceedings of Program   ming Language Implementation and Logic Programming  number 456 in Lec   ture Notes in Computer Science  pages 136 150  Springer  August 1990     J  Jaffar and J  L  Lassez  Constraint Logic Programming  In ACM Symp   Principles of Programming Languages  pages 111 119  ACM  1987     S  Janson and S  Haridi  Programming Paradigms of the Andorra Kernel  Language  In 1991 International Logic Programming Symposium  pages 167   183  MIT Press  1991      21  P  L  pez and M  Hermenegildo  Efficient Term Size Computation for Gran      22     23       27    30    31       32        24      25     126     128     1291             ularity Control  In Proc  of the Twelfth International Conference on Logic  Programming  The MIT Press  June 1995     U  Neumerkel  Extensible Unification by Metastructures  In Proceeding of the  META   90 workshop  1990     V  Santos Costa  D H D  Warren  and R  Yang  Andorra I  A Parallel Prolog  System that Transparently Exploits both And  and Or parallelism  In Pro   ceedings of the 38rd  ACM SIGPLAN Symposium on Principles and Practice of  Parallel Programming  ACM  April 1990     V  Saraswat  Concurrent Constraint Programming Languages  PhD thesis   Car
11. at   tribute with C  otherwise fail     e attach_attr X C   turn the free variable X into an attributed variable with  attribute C     e detach_attr  X   remove the attribute from an attributed variable  turning it  into a normal variable     Attributed variables are dealt with specially during unification  Essentially  the  different possible cases are handled as follows  A unification between an unbound  variable and an attributed variable binds the unbound variable to the attributed  variable  When an attributed variable is about to be bound during unification  to a non variable term or another attributed variable  the attributed variable and  the value it should be bound to are collected  At the next inference step  the  pending attributed variable value pairs are supplied to user defined handlers which  are defined by the user by means of the following predicates     e verify_attr C T   invoked when an attributed variable with an attribute  which unifies with C is about to be unified with the non variable term T     e combine_attr C1 C2   invoked when two attributed variables with attributes  C1 and C2 are about to be unified     Note that the two predicates are not called with the attributed variables in   volved  but with the corresponding attributes instead  The is done for reasons of  simplicity and efficiency  e g  indexing   Note also  however  that if access to the ac   tual attributed variable is needed the variable itself can be included in the attribute    when
12. ducer N L   amp   alba  consumer  L      As mentioned before  in order to implement communication between nodes  through the variable L we would like to mark that variable as shared by attaching  an attribute to it  In general L may be bound to a complex term with intervening  variables  and then each such variable has to be marked in turn  On the other hand   in the blackboard implementation we are considering  variables posted to the black   board lose their identity  Thus  a unique identifier needs to be given to each one   Note that since attribute attachment operations are local to each process  identi   fying the shared variables and giving them identifiers  which can be done once  is  best separated from the action of actually attaching attributes to them  which has  to be repeated in each node sharing the variable     We implement a predicate var_ids LVars  Pairs  which given a set of lexical  variables appearing in the forked goal s  returns the set of intervening run time  variables  assigns a unique identifier to each of them  and returns the information  in the form of  Variable  Id  pairs  In our example  a call to this predicate is placed  before the call to producer  L  as follows        var_ids  L  Ps     assign_ids Ps   producer N L     amp   alba   assign_ids Ps   consumer L      4This illustrates how the attributed variable approach also allows performing low level opti   mizations as source to source transformations      this is handled automatically by a 
13. e use of attributed variables  rather than any increase in performance  However   it is still interesting to make some observations regarding the resulting implemen   tations  Table 1 presents some results obtained with the concurrent extension to  SICStus Prolog described in Section 4  A set of programs involving producers and  consumers was run with each process running in a different workstation  Sun IPC   connected over an Ethernet network  The performance of our implementation of  concurrent logic programming is compared with equivalent programs written di        shared var  linda   shared var ida     Incomplete message protocol  30 messages      Timers  64   sid   Space  nT   m iY    Operations   456 2   Bounded buffer protocol  0 messages  3 places      ime pe ano eee a ee         Sae    n   5   m a  3s SSsS     Operations  09   m9   Said   One to many communication with acknowledge  20 messages  two readers      Time    i   46  645   Space  imsi   ma    s E  KO    m7 E    Table 1  Distributed Shared Variable Communication        Benchmark   1 Proc   2 Proc   3 Proc   5 Proc   7 Proc   9 Proc     aap   00  sos    sO  003  008    08       asconc1   320 0    170 1 8    120  2 6    80  20    70  45    60 6 3          6 0   _as conc_2   400  1  150  2 6    100  4 0    90  4 4    80  5 0        nrev   120  1    80  1 5    60  2 0    30  4 0    30  4 0    30  4 0       Table 2   amp  Prolog Performance for Concurrent Benchmarks    rectly by hand in Linda in the most efficien
14. ed can be easily increased in  interesting cases by writing the unification handlers in a lower level language  The  potential for achieving both genericity and reasonable speed is illustrated by the  relatively good performance exhibited by the ECL   PS   system  which has been used  in many practical applications    Inspired by the previously discussed use of attributed variables we propose a dif   ferent and novel use for such variables in a completely different context  developing  generic parallel concurrent  constraint  logic programming systems  using the same     glass box    flavor  Attributed variables have already been used to implement the  coroutining  delay  facilities present in many Prolog systems     often what is actu   ally being done is in fact restoring such capabilities after having    cannibalized    the  delay mechanism support for implementing the attributed variables  However  we  argue that a system which implements both support for attributed variables and a  few additional primitives related to concurrency and parallelism can do much more  than simply restoring the delay mechanism  In fact  it is our thesis that using the  primitives mentioned above it is possible to easily implement many of the languages  and execution models of parallelism and concurrency currently proposed  We illus   trate this through examples and we discuss how quite complex concurrent languages  and parallel execution models can be implemented using only such primitives  Fu
15. es   developing a generic parallel concurrent  constraint  logic programming system   using the same    glass box    flavor as that provided by attributed variables and  meta terms in the context of constraint logic programming implementations  We  argue that a system which implements attributed variables and the few additional  primitives which have been proposed constitutes a kernel language which can be  easily customized at source level to implement many of the languages and execution  models of parallelism and concurrency currently proposed  in both shared memory  and distributed systems  We have illustrated this through a few examples    While the wide applicability of the ideas presented is very attractive  a clear issue  is the performance of the systems built using them  Of course  such performance  is bound to be slower than that of the corresponding native implementations  It  is clear that the native implementation approach is both sensible and practical   and simply the way to go in most cases  On the other hand we also feel there it  is interesting to be able to have a generic system which can be easily customized  to emulate many implementations  On one hand  it can be used to study in a  painless way different variations of a scheme or to make quick assessments of new  models  On the other hand the loss in performance is compensated in some ways  by the flexibility  a tradeoff that has been found acceptable in the implementation  of constraint logic programmin
16. g systems   and such performance can be improved  in a gradual way by pushing the implementation of critical operations down to C     References     1  J  Almgren  S  Andersson  L  Flood  C  Frisk  H  Nilsson  and J  Sundberg   Sicstus Prolog Library Manual  Po Box 1263  S 16313 Spanga  Sweden  October  1991      2  K  De Bosschere  Multi Prolog  Another Approach for Parallelizing Prolog   In Proceedings of Parallel Computing  pages 443 448  Elsevier  North Holland   1989      3  A  Brogi and P  Ciancarini  The Concurrent Language  Shared Prolog  ACM  Transactions on Programming Languages and Systems  13 1  99 123  1991         4  F  Bueno  M  Garcia de la Banda  and M  Hermenegildo  Effectiveness of Global  Analysis in Strict Independence Based Automatic Program Parallelization  In  International Symposium on Logic Programming  pages 320 336  MIT Press   November 1994      5  M  Carlsson  Freeze  Indexing  and Other Implementation Issues in the Wam      10    12       14     15     16     17     18     19     20    11     13                            In Fourth International Conference on Logic Programming  pages 40 58  Uni   versity of Melbourne  MIT Press  May 1987     M  Carlsson  Sicstus Prolog User   s Manual  Po Box 1263  S 16313 Spanga   Sweden  February 1988     N  Carreiro and D  Gelernter  Linda in Context  Communications ACM  32 4    1989     T  Chikayama  T  Fujise  and D  Sekita  A Portable and Efficient Imple   mentation of KL1  In Springer Verlag  editor  Proc
17. hould not be    farmed out     and the special marking of     remote   communication variables    that will be mentioned later is relevant in the environ   ment being considered  Note that it would be extremely inefficient to blindly run  a traditional concurrent logic language  creating actual possibly remote tasks for  every parallel goal and allowing for all variables to be possibly shared and worked  on concurrently by goals in different nodes  in such a distributed environment  A  traditional concurrent language can of course be compiled to run efficiently in such  an environment after granularity analysis  9  32  21      in fact  this can be seen as  a source level transformation to a language of the type we are considering    To implement this language on K amp P we start by observing that the sequential  and parallel operators of the source language map directly into the sequential            and  amp    or  amp  amp   2  if fairness is needed  operators of K amp P  However  while this al   lows creating remote tasks  it does not by itself implement the communication of  values between nodes through shared variables  We propose to do this by placing  before the concurrent call a call to a predicate which will attach an attribute to  the shared variables marking them as    communication variables     Also  a unique  identifier is given to each communication variable  All bindings to these variables  are posted on the blackboard  using the out 1 primitive  as  variable_
18. hterm 0 _ _         trans_shterm N Term NewTerm      N  gt  0   arg N Term Arg    arg N NewTerm NewArg     trans_shterm Arg NewArg     Ni is N 1   trans_shterm N1 Term NewTerm          This predicate uses the primitive new_shv_id 1  which returns a new shared variable  identifier different from any other in any process participating in the computation    The predicate shv_unify 2 performs the actual unification of terms that are  already in the blackboard  we have left out all explicit locking in the unification for  simplicity      shv_unify A  B     shv_unify_values X1 X2      dereference A  VA   X2     shv    _       dereference B  VB   sh_bind X2 X1    shv_unify_values VA VB   shv_unify_values X1 X2      functor  X1 F N    dereference X  V     functor  X2 F N    X       shv    _   shv_unify_args N  X1  X2    sh_get_bind X Binding     dereference Binding  V   shv_unify_args 0O  _  _         dereference V V   shv_unify_args N  X1  X2      N  gt  0   shv_unify_values X1 X2    arg N  X1  A1    X1     shv     Id1   arg N  X2  A2    X2     shv     Id2   shv_unify A1  A2      Idi Id2   sh_bind X1 X2        Ni is N 1   shv_unify_values X1 X2     shv_unify_args N1  X1  X2    X1     shv    _       sh_bind X1 X2         The unification routine uses the following primitive operation  which returns the  immediate binding of a shared variable or fails if it does not exist     sh_get_bind Id T     linda rd_noblock shbinding Id T      The following operation is used when writing out a bi
19. id value  pairs   where if values contain themselves new variables  such variables are represented by  their identifiers  Thus  substitutions are represented as explicit mappings  When  bound to a communication variable  a non communication variable is turned into  a communication variable  Tell and ask operations on ordinary variables  which  are handled in the standard way  are distinguished from tell and ask operations to   remote  communication variables by the fact that the latter have the correspond   ing attribute attached to them  Thus  tell and ask unifications to communication    variables will be handled by the attributed variable unification  A tell will be imple   mented by actually performing the binding to the variable in the manner explained  above using the out 1 blackboard primitive  An ask will wait until a binding for  the variable is posted on the blackboard  This will be commonly implemented using  the blocking rd 1 blackboard primitive  since in general a variable can have mul   tiple readers and thus in 1 cannot be used  On the other hand  if a threadedness  analysis is performed and a variable is determined to have only one producer and  one consumer then in 1 can be used performing on the fly garbage collection on the  blackboard  Else  when a remote goal finishes  a call to a tidying up predicate can  be used to erase the entries in the blackboard corresponding to the bindings of vari   ables which are not used as communication variables any more  a
20. in the same processor and sequentially  i e  one after the  other  For example       p X   amp  q X   r x       will fork a task p X   in parallel with q X   The continuation r X  will wait until both p X  and    q X  are completed    The implementation of this primitive at the abstract  machine level is well understood  15      e  amp  amp  2        fair    fork join parallel conjunction operator  It performs a parallel  fork of the two literals involved and waits for the execution of both literals to  finish  join   A    thread    is assigned to each literal  The execution of the two  literals will be interleaved either by executing them on different processors   if they are available  or by multiplexing a single processor  Thus  even if  no processors are available  the two literals will be executed with  apparent   simultaneity in a fair way     e  amp  1     Standard fork operator  It performs a parallel fork of the literal involved   No waiting for its return is performed  unless explicitly expressed using the  wait primitive     see below   For example       p X   amp   q X   r x    will fork a task p X  in parallel with the rest of the computation     e  amp  amp  1        fair    version of the fork operator     e  amp   2        Placement    standard fork operator  It performs a parallel fork of  the literal involved  assigning it to a given node  No waiting for its return is  involved  If that node is busy  then the literal will eventually be executed in  that node
21. ing Other Models Using Attributed  Variables    Lack of space does not allow elaborating further but we argue that using techniques  similar to those that we have proposed it is possible to implement many other par   allel and concurrent models at the source level  For example  while and parallelism  can be supported in or parallel implementations by folding it into or parallelism  no  communication among and parallel tasks is possible  Our technique could be used  to provide this communication  for example by    escaping    shared variable unifica   tions and asserting them to the common database  We believe it is as well quite  possible to encode the determinacy driven synchronization and parallelism of the  Andorra I system  23  in terms of our wait primitive and the concurrency operators   We also believe it is quite possible to implement languages with deep guards and or  those based on the Extended Andorra Model  31   such as AKL  20     For example  one of the most characteristic features of deep guard languages is  precisely the behavior of the guards  and one of the main complications in imple   menting such languages is in implementing the binding rules that operate within  such guards  If the Herbrand domain is used  the guard binding rules require in  principle that no bindings to external variables be made  Thus  it is necessary to  keep track of the level of nesting of guards and assign to each variable the guard  level at which it was created  Note that this ca
22. n be done by assigning to each  guard a hierarchical identifier and attaching to each variable such an identifier as   part of  its attribute  Unifications in the program are labeled with the identifier  of the guard in which they occur  the level is passed down recursively through an  additional argument   Such unifications are handed over to the attributed variable  handler which makes computation suspend unless the variable and the binding have  the appropriate relative identifiers  The binding rules for domains other than Her   brand can be more complex because they often use the concept of entailment  But  note that in the proposed approach all constraint solving would possibly be imple   mented through attributed variables anyway  Thus  it is not difficult to imagine  that a correct entailment check can be written at the source level using the same  primitives and wait  Some models are more involved  in AKL  for example  there is    a notion of local bindings and there is an additional rule controlled by the concept of     stability     closely related to that of independence  which allows non deterministic  bindings to propagate at    promotion    time  We believe however that there is also  potential for the use of attributed variables for the implementation of AKL  For  example  promotion rules can also be implemented by updating the identifiers  the  attributes  of all the local variables to higher levels    Another model for parallel execution of Prolog is the DDAS
23. nd are not linked  to other active communication variables  and creating the corresponding term in  the heap of the process which continues with the execution     A Concrete Implementation in SICStus Prolog    In order to be more concrete we sketch our implementation of the ideas outlined  above in a widely available environment  SICStus Prolog  enhanced with attributed  variables  and using the Linda library provided with recent versions of the system   We hope that this detailed presentation of a concrete implementation will clarify  the issues that appear in practice when using the techniques proposed    The implementation of the basic operators such as  amp  and  amp   in a Linda based  environment is not our current subject but is in any case relatively straightforward   details of a particular implementation  also available by ftp  can be found in  13     a number of Prolog processes running in different network nodes are started as  Linda clients and thus share the blackboard  which is accessible through the normal  Linda primitives  Goals that are followed by  amp  are simply posted on the blackboard   Idle processes are waiting for work to be posted  which they then execute  Goals  that are followed by  amp   x are posted on the blackboard with an identifier that  indicates they are meant to be run on a given machine x  This allows  for example   the following query to start a    producer    goal in a remote machine    alba    and a  consumer locally        N 10  pro
24. nding for a variable   sh_bind Id T     linda out shbinding Id T      For example  given the query      var_ids  L  Ps   assign_ids Ps   producer 3 L     and the following definition of a simple producer  the contents of the blackboard    after execution are listed to its right     producer 0 T       T       producer N T     N gt 0   T    NINs    Ni is N 1   producer  N1 Ns      shbinding  shv 0     1    shbinding  shv 1   2    shv 2     shbinding  shv 2   1    shv 3     shbinding  shv 3           31 shv 1          In order to support synchronization some blocking     ask     primitive has to be  provided  For simplicity  we only describe the implementation of the K amp P wait  primitive in this context  which is in any case sufficient for most purposes     wait X     wait_shnonvar X      get_attr X shv Id       X       shv    _       sh_wait_bind     shv     Id   Binding    sh_wait_bind X  Binding    wait_shnonvar  Binding    wait_shnonvar  Binding     wait _   wait_shnonvar _         The following primitive is used above   sh_wait_bind Id T     linda rd shbinding Id T     A simple stream communication based consumer using these primitives can be con     structed as follows     consumer T     consumer_body       wait T   consumer_body  H T       consumer _body T    consumer  T         Note that the above producer and consumer can also be seen as the result of a  straightforward compilation of the following fragment of GHC code     producer  0 T   producer N T     consumer   
25. negie Mellon  Pittsburgh  1989  School of Computer Science     E  Y  Shapiro  A Subset of Concurrent Prolog and Its Interpreter  Technical  Report TR 003  ICOT  1 4 28 Mita  Minato ku Tokyo 108  Japan  January  1983     K  Shen  Exploiting Dependent And Parallelism in Prolog  The Dynamic   Dependent And Parallel Scheme  In Proc  Joint Int   l  Conf  and Symp  on  Logic Prog  MIT Press  1992     G  Smolka  The Definition of Kernel Oz  DFKI Oz documentation series   German Research Center for Artificial Intelligence  DFKI   November 1994     S  Taylor  Parallel Logic Programming Techniques  Prentice Hall  Englewood  Cliffs  NY  1989     E  Tick  Parallel Logic Programming  MIT Press  Boston  Mass   1991     K  Ueda  Guarded Horn Clauses  In E Y  Shapiro  editor  Concurrent Prolog   Collected Papers  pages 140 156  MIT Press  Cambridge MA  1987     D H D  Warren  The Extended Andorra Model with Implicit Control  In  Sverker Jansson  editor  Parallel Logic Programming Workshop  Box 1263  S   163 13 Spanga  SWEDEN  June 1990  SICS     X  Zhong  E  Tick  S  Duvvuru  L  Hansen  A V S  Sastry  and R  Sundarara   jan  Towards an Efficient Compile Time Granularity Analysis Algorithm  In  Proc  of the FGCS   1992 International Conference  Institute for New Genera   tion Computer Technology  ICOT   June 1992     
26. ng  Attributed Variables  Generic Implementations     1 Introduction    A number of concepts and implementation techniques have been recently introduced  which allow extending unification in logic languages in a flexible and user accessible  way  One example is that of meta structures  introduced by Neumerkel  22   which  allow the specification by the user of how unification should behave when certain  types of terms  called meta structures and marked as such by the user  are accessed  during unification  More or less at the same time  the data type attributed vari   able was introduced by Le Houitouze  18  with the purpose of implementing various  memory management optimizations  Although the behavior of attributed variables  during unification was not specified in this work  a number of applications were  proposed including the implementation of delayed computations  reversible modifi   cation of terms  and variable typing  Earlier  Carlsson  5  used a data type called  suspension  which was incorporated into SICStus Prolog  6  for the implementation  of coroutining facilities  10      Attributed variables    and    suspension variables    are  essentially the same objects  Le Houitouze   s contribution was to put some empha   sis on the data type as such and on memory management  He also used attributed    1The work described in this paper is supported in part by ESPRIT project    ACCLAIM     and  by CICYT contract TIC93 0737 C02 01  The authors would like to thank C  Hol
27. noted that the results are based on rather  inefficient implementations of the wait 1  lock 2 and unlock 1 primitives    Table 2 shows the results  Times are in ms  and speedups between parentheses   qs iap is the independent and   parallel version of quicksort  where the two recursive  calls are executed in parallel  provided for reference  A small list is used in order  to somewhat limit the parallelism available using  goal level  independent and   parallelism  The benchmark uses append rather than difference lists  qs conc_1  is again quicksort  in which the list splitting is performed concurrently with the  recursive calls  acting as a producer  In qs_conc_2 the concurrency is extended also    to the append call  and all the goals in the recursive clause are run concurrently   Finally  nrev is the standard naive reverse benchmark  The results are interesting in  that they show that even with a naive implementation of the concurrency primitives  reasonable speedups can be achieved with our techniques in programs with small  granularity  for example  nrev   even if not  yet  speed  when compared to sequential  Prolog  Again  our objective herein is simply to point out and substantiate to  some extent the great potential that in our view the concept of attributed variables  has in the implementation of generic parallel  concurrent  and distributed logic  programming systems     7 Conclusions    We have proposed a different and novel use for the concept of attributed variabl
28. r   thermore  we argue that this can be done in a seamless and user transparent way  in both shared memory and distributed systems  Also  one additional advantage of  our technique is that it relates and unifies the two main approaches currently used  in concurrent logic programming  and which are seen traditionally as unrelated      shared variable    systems  in which communication among parallel tasks is done  through variables  and    distributed    or    blackboard    systems in which communica   tion is done through explicit built ins which access shared channels or global data  areas    It should be noted that the use that we propose of attributed variables in the  implementation of concurrency and parallelism does not necessarily prevent their  simultaneous use also for other purposes  such as the original one of constraint  solving  Also  note that the approach proposed  although having some similarities   differs from that of    generic objects     recently and independently discussed by the  KL1 implementors  8   The idea in generic objects is to provide an interface at the     C    level for a particular class of extensions  Our approach differs in both the level  at which the extensions are made  which is completely at the source level in our  case  thus really offering a reflective  glass box approach   and the nature and extent    of the extensions proposed  which goes beyond those that are related to supporting  KL1    Space limitations force the presentation 
29. simple lexical expansion of the original query    Only one pair would be generated in this case  since L is a free variable  of course   this important case can be treated specially  but the general purpose primitive is  used for illustration purposes   Note that assign_ids  Ps   defined by    assign_ids       assign_ids   X Id  Ps      assign_id X Id        assign_id X Id   attach_attr X shv Id     assign_ids Ps         does the actual attachment of the attribute shv Id  to each shared variable  and  that this is done both in the local and the remote machine  alba  in this case    Once suitably marked  all the unifications involving these communication variables  are handled through the blackboard  The appropriate handlers are given in the  following    blackboard unification    code  recall that verify_attr 2 is called when  an attributed variable is unified with a term  and combine_attr 2 is called when  two attributed variables are bound to each other      verify_attr shv Id  Term        combine_attr shv I1   shv 1I2         trans_shterm Term  NewTerm    shv_unify   shv     11    shv     12      shv_unify     shv     Id   NewTerm          The predicate trans_shterm 2 transforms a term into its blackboard representa   tion     trans_shterm X     shv     Id       var X          get_attr X shv Id     gt  true    new_shv_id Id     attach_attr X shv Id        trans_shterm Term NewTerm      functor  Term F N     functor  NewTerm F N     trans_shterm N Term NewTerm       trans_s
30. t way possible     Time    gives the execu   tion time in seconds     Space    is an expression which gives the number of blackboard  items generated by the programs with an input of size n  experimental results con   firm this expression      Operations    is the number of operations performed in the  blackboard during the execution of the programs  This number was measured by  instrumenting the SICStus implementation of the Linda library  The incomplete  message program is the standard program implementing a two way communication  between processes  12  28  29   The bounded buffer program is also the standard  one  The one to many communication with acknowledge program allows several  processes to read a stream produced by another  the latter being informed of which  process read each element  We argue that  despite the amount of metainterpretation  of terms happening when using shared variables for communication the resulting  performance is still reasonable  specially if we take into account that the current im   plementation using attributes is very naive  and many optimizations can be made to  improve performance  both in the low level implementation and in the compilation  techniques    In order to also see if actual performance improvements from parallelism are at   tainable with the technique  we have performed some measurements on a prototype  implementation of communication through shared variables in the  amp  Prolog system  using similar techniques  It should be 
31. to cover only some basic cases and give  incomplete descriptions of the implementations  For more details the reader is  referred to  14   Also  the implementations described can be obtained by contacting  the authors     2 Attributed Variables and Related Primitives    We provide a brief introduction to attributed variables  For concreteness  we follow a  stylized version of Holzbaur   s first implementation of attributed variables in SICStus  Prolog  The reader is referred to  16  17  for more detailed information     2 1 General Concepts    Attributed variables are variables with an associated    attribute     Attributes are  terms which are attached to variables  and which are accessed in a special way dur   ing unification and also through special built in predicates  As far as the rest of a  given Prolog implementation is concerned  attributed variables behave like variables   Special treatment for attributed variables does apply mainly during unification  as  will be described later  when an attributed variable is to be unified with another  attributed variable or some other non variable term  user defined predicates specify  how this unification has to be performed  The following is a list of typical predi   cates which provide for the introduction  detection  and manipulation of attributed  variables  In general  attributed variable related operations are correctly undone  upon backtracking     e get_attr X C   if X is an attributed variable  unify the corresponding 
32. uch that if the conditions succeed then execution  proceeds in parallel  using the  amp  2 operator  which directly encodes the fork join  parallelism implemented by the ECGEs   else it proceeds sequentially  Dependent  variables shared by the goals in a ECGE are renamed  The dep 1 annotation is  transformed into a call to a predicate that marks the variables as dependent by  attaching attributes to them  Such attributes also encode whether a variable is  in a producer or a consumer position  Unification is handled in such a way that  bindings to variables whose attribute corresponds to being in the producer position  are actually bound  Note that if the variable is being bound to a complex term  with variables  these variables also have to be marked as dependent  Bindings to  variables whose attribute corresponds to being in a consumer position suspend the  execution of the associated process  using wait 1   The change from producer to  consumer status is implemented as follows  each parallel goal containing a depen   dent variable  except the last one  is replaced by the sequential conjunction of the  goal itself and a call to a predicate which will    pass the token    of being leftmost  to the next goal  or short circuiting the token link if it is an intermediate goal    This predicate also takes care of restoring the connection lost due to the variable  renaming     6 Performance    The objective of the technique presented is achieving a certain functionality through  th
33. zbaur and the  anonymous referees for useful discussions in the context of the paper     variables as a low level primitive for the implementation of mechanisms that neces   sitated the specification of the behavior of the data type during unification    A refined version of the concept of meta structures and attributed variables  was used by Holzbaur in  16  for the specification and implementation of a variety  of instances of the general CLP scheme  19   By enhancing the SICStus Prolog  system with attributed variables a generic system is provided which is basically a  SICStus Prolog    clone    where the unification mechanism has been changed in such  a way that the user may introduce interpreted terms and specify their unification  through Prolog predicates  This approach is very attractive in that it shows that  by adding a few primitives any logic programming system can be turned into a  generic constraint logic programming system in which constraint solving can be  user defined  at the source level     an extreme example of the    glass box    approach   Another system which implements constraint solving using similar techniques is the  ECL PS   system developed at ECRC  11     While this approach in principle has drawbacks from the performance point of  view  when fully interpreted up to an order of magnitude slowdown is possible w r t   native CLP systems  the convenience and generality of the approach can make it  very worthwhile in many cases  Furthermore  the spe
    
Download Pdf Manuals
 
 
    
Related Search
    
Related Contents
MEDIA CENTER CONTROL – BEDIENUNGSANLEITUNG  Mode d`emploi Aspirateur Provence F 1 Désignation des pièces 2  ー- 取扱説明書、 本体貼付ラベ丿しなどの注意書に従った使用状態で  GE041 取扱説明書  Sony FWD-42PV1 42 in. HD-Ready Plasma Television  Samsung Samsung SGH-J200 Bruksanvisning    Copyright © All rights reserved. 
   Failed to retrieve file