Unification, in distributed implementations of logic programming, involves
sending and receiving messages to access data structures spread among diffe
rent nodes. In traditional implementations, processes access remote data st
ructures by exchanging messages which carry either the overall data structu
res or only remote references to them. Intermediate but fixed solutions are
also possible. These fixed policies can be far from optimal on various cla
sses of programs and may induce substantial overhead. This paper presents a
n implementation scheme for distributed logic programming which consists of
tailoring the copying level for each procedure argument. The scheme is bas
ed on a consumption specification which describes the way each procedure "c
onsumes" its arguments locally. Consumption specification avoids unnecessar
y copying and allows to request data structures globally. The consumption s
pecification (or its approximation) can be obtained through a static analys
is inspired by traditional type analyses. The paper presents two implementa
tions which exploit the consumption specification. The low-level implementa
tion extends the Warren abstract Machine with instructions and data structu
res for exploiting the consumption specification during code compilation. T
he high-level implementation is based on attributed variables in order to c
apture and implement, at a higher-level, distributed unification. Experimen
tal results of the high-level implementation on a network of workstations s
how the potential of the approach.