[M3devel] Self() locking slots almost unnecessary -- if only we had "MemoryBarrier".
Jay K
jay.krell at cornell.edu
Mon Nov 9 01:44:16 CET 2009
I don't know. I just look at all code overly critically..including for overly coarse grained locking (which includes some vs. none).
I guess the argument could be that the critical section -- the part of code that executes under the lock -- is very short, so it can't make much of a difference.
Writing the global with an "InterlockedExchange" might be good.
Maybe we should add this as a portably available interface?
"This" being MemoryBarrier and/or well, er, um, I guess you already did, the IA64 stuff, which is similar to the Win32 stuff.
I should update the NT/x86 backend for that stuff and then we can move on and use them.
- Jay
From: hosking at cs.purdue.edu
To: jay.krell at cornell.edu
Date: Sun, 8 Nov 2009 19:39:00 -0500
CC: m3devel at elegosoft.com
Subject: Re: [M3devel] Self() locking slots almost unnecessary -- if only we had "MemoryBarrier".
Not portably. Different memory models will behave differently. For safety we need the lock. But, seriously, how much contention will there be?
On 8 Nov 2009, at 19:35, Jay K wrote:
Self() doesn't have to lock slots AS LONG AS in AssignSlot:
SUBARRAY (new_slots^, 0, n) := slots^;
slots := new_slots;
occurs in the order written.
That SUBARRAY() := finishes before slots := runs.
Aggressively compilers/processors need not execute these in the order written.
Do we have a way to guarantee that?
Something like:
SUBARRAY (new_slots^, 0, n) := slots^;
> MemoryBarrier();
slots := new_slots;
?
MemoryBarrier on Windows is implemented as one "special" instruction -- for x86, AMD64, and IA64.
Those implementations are portable to any OS running those architectures.
Though they aren't expressed in a portable form (x86 inline assembly and C compiler intrinsincs).
In particular:
winnt.h:
amd64:
#define MemoryBarrier __faststorefence
x86:
FORCEINLINE
VOID
MemoryBarrier (
VOID
)
{
LONG Barrier;
__asm {
xchg Barrier, eax
}
}
ia64:
#define MemoryBarrier __mf
- Jay
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://m3lists.elegosoft.com/pipermail/m3devel/attachments/20091109/7001e617/attachment-0002.html>
More information about the M3devel
mailing list