The fusion algorithms used in our current work carry out inter-procedural optimization, and they reduce or eliminate the multi-threading overheads caused by asynchronous remote agent invocation. For example, in PSSPS, an asynchronous invocation is implemented as follows: with each method in an agent's interface definition, we associate a special modifier that denotes whether the method should be invoked synchronously (SYNC_IF_FUSED) or asynchronously (ASYNC_IF_FUSED) by fellow fused agent(s). An invocation to SYNC_IF_FUSED methods by a fellow fused agent(s) is replaced by a direct local procedure call. The fusion algorithm then applies inter-procedural analysis to perform aliasing and, in the case of SYNC_IF_FUSED methods, procedure in-lining. Aliasing attempts to eliminate unnecessary data copying, since data formerly located in different address spaces or on different hosts may potentially be shared subsequent to agent fusion and co-location.
Fusion may be applied repeatedly, possibly later followed by agent `splitting', if indicated. Agent `splitting' is an agent adaptation method we are aware of, it applies program slicing to an agent operating on a distributed data set and distributes agent slices so that each agent slice operates on some local data which is a subset of the distributed data set.