[Search for users]
[Overall Top Noters]
[List of all Conferences]
[Download this site]
| Title: | Mathematics at DEC | 
|  | 
| Moderator: | RUSURE::EDP | 
|  | 
| Created: | Mon Feb 03 1986 | 
| Last Modified: | Fri Jun 06 1997 | 
| Last Successful Update: | Fri Jun 06 1997 | 
| Number of topics: | 2083 | 
| Total number of notes: | 14613 | 
986.0. "Combining Mechanism" by CLT::GILBERT (Multiple inheritence happens) Mon Dec 05 1988 17:43
A recent ACM article (1) describes a "combining mechanism" that can be used
to reduce interlock contention on shared computer variables in multiprocessors.
Suppose fetch-and-theta is a primitive atomic operation:
	function fetch-and-theta (X,b)
	    begin
	    temp := X;
	    X := X theta b;
	    return (temp);
	    end;
For example, fetch-and-add is such an atomic operation on several computers.
Suppose requests have the form: <id, addr, f>, where id identifies the request,
addr is the memory address of the shared variable, and f is a suitable encoding
of the operation to be performed.  Let @addr be the contents of location addr.
The memory unit fetches @addr, and sets the value to f(@addr); it replies with
<id, @addr>, where @addr is the original value.
The following "combining mechanism" reduces contention for shared variables.
Suppose we have requests <id1,addr,f> and <id2,addr,g>.  The combining mechanism
saves these requests, and forwards <id1,addr,f o g> to the memory unit, where
f o g denotes functional composition, f o g (x) = g(f(x)).  When the combining
mechanism receives the reply <id1,val>, it returns it as the result for id1,
and sends <id2,g(val)> as the result for the id2 request.
For example, with fetch-and-add, f and g could simply be the addends; the
combining mechanism combines <id1,addr,f> and <id2,addr,g> into <id1,addr,f+g>,
and when it gets the reply <id1,val>, at also sends <id2,val+g> back for id2.
Bitwise test-and-set operations can be similarly combined.
The following has been proposed as an atomic interlocked operation:
	function fetch-and-rma (X,b,c)
	    begin
	    temp := X;
	    X := (X and not b) + c;
	    return (temp);
	    end;
Here, X is a binary number of w bits, (X and not b) is a bitwise logical
operation, and the addition is performed modulo 2^w.
The combining mechanism requires a suitable encoding of 'f o g', where (roughly)
f = <b1,c1> and g = <b2,c2>.  Indeed, we'd like an encoding such that we have
closure over 'f o g'.  The problem is to find such an encoding, and/or to
determine a (near-)minimum number of bits needed for such an encoding.
As a second problem, suppose the combining mechanism is allowed some freedom:
when it receives two requests <id1,addr,f> and <id2,addr,g>, the combining
mechanism may choose to forward either <id1,addr,f o g> or <id2,addr,g o f>;
that is, it may combine the requests in either order.  Does this significantly
reduce the number of bits needed for the fetch-and-rma encoding?
					- Gilbert
(1) "Efficient Synchronization on Multiprocessors with Shared Memory";
Kruskal, Rudolph, and Smir; ACM Transactions on Programming Languages and
Systems, Vol.10, No.4, Oct.1988, pgs.579-601.
| T.R | Title | User | Personal Name
 | Date | Lines | 
|---|
| 986.1 |  | SSDEVO::LARY | One more thin gypsy thief | Mon Dec 05 1988 18:25 | 9 | 
|  | >> ...it returns it as the result for id1,
>> and sends <id2,g(val)> as the result for the id2 request.
This seems to be a typo - did you mean <id2,f(val)> (which is the
value "before" g is applied)?
>> ... also sends <id2,val+g> back for id2.
In the same vein, shouldn't this be <id2,val+f>?
 | 
| 986.2 |  | CLT::GILBERT | Multiple inheritence happens | Tue Dec 06 1988 11:55 | 1 | 
|  | Right, right.  Sorry about those typos.
 | 
| 986.3 |  | CLT::GILBERT | Multiple inheritence happens | Wed Dec 07 1988 09:46 | 22 | 
|  | If we have 1-bit numbers, all 4 functions can be produced from fetch-and-rma.
	f(0) f(1)
	 0    0		((x and not 3) + 0)
	 0    1		(x)
	 1    0		(x + 1)
	 1    1		((x and not 3) + 1)
If we have 2-bit numbers, 28 functions on 2-bit numbers can be produced, ...
	f(0) f(1) f(2) f(3)
	 0    0    0    0
	 0    0    2    2
	 0    1    2    3
	 0    1    0    1
	 0    2    2    0
	 0    2    0    2
	 0    3    0    3
... the above 7, and 21 more that result from adding 1, 2, or 3 to each
of the above functions.
 |