mfence on i686 with volatile?

Dennis Byrne dennisbyrne at apache.org
Wed Nov 18 11:31:21 PST 2009


Still no luck on this.  There are two "Processor" items under "System
Information"/"System Summary" and Cygwin gives me this:

$ cat /proc/cpuinfo | grep ^processor | wc -l
8

"$jdk1.6.0_18\fastdebug\bin\java.exe -XX:+PrintOptoAssembly -server
-XX:CompileCommand=print,*HelloWorld.run  HelloWorld" yields the
following:

01c   	CMP    EBP,#1000000
022   	Jge    B13  P=0.000000 C=29521.000000
022
028   B2: #	B3 <- B1  Freq: 1
028   	MOV    EDX,EBP
02a   	INC    EDX
02b   	IMUL   EAX,EBP,#333
031   	MOV    ECX,#448
036   	MOV    EBX,[ECX + precise klass HelloWorld:
0x00a2fc30:Constant:exact *]	# int ! Field HelloWorld.v
03c   	SUB    EBX,EAX
03e   	MOV    ECX,#452
043   	MOV    EDI,[ECX + precise klass HelloWorld:
0x00a2fc30:Constant:exact *]	# int ! Field HelloWorld.v2
043
049   B3: #	B5 B4 <- B2 B4 	Loop: B3-B4 inner stride: not constant pre
of N112 Freq: 2
049   	MOV    [ESP + #4],EBX
04d   	ADD    EAX,EBX
04f   	ADD    EDI,EAX
051   	MOV    ESI,EBP
053   	INC    ESI
054   	ADD    EDI,#333
05a   	MOV    EBX,#452
05f   	MOV    [EBX + precise klass HelloWorld:
0x00a2fc30:Constant:exact *],EDI ! Field HelloWorld.v2
065   	ADD    EAX,#333
06b   	MOV    ECX,#448
070   	MOV    [ECX + precise klass HelloWorld:
0x00a2fc30:Constant:exact *],EAX ! Field HelloWorld.v
076   	CMP    ESI,EDX
078   	Jge,s  B5	# Loop end  P=0.500000 C=29027.000000
078
07a   B4: #	B3 <- B3  Freq: 1
07a   	IMUL   EAX,EBP,#333
080   	ADD    EAX,#333
086   	MOV    EBP,ESI
088   	MOV    EBX,[ESP + #4]
08c   	JMP,s  B3
08c
08e   B5: #	B8 B6 <- B3  Freq: 1
08e   	MOV    ECX,#1000000
093   	SUB    ECX,ESI
095   	AND    ECX,#-16
098   	ADD    ECX,ESI
09a   	CMP    ESI,ECX
09c   	Jl,s  B8  P=0.999999 C=-1.000000

Dennis Byrne

On Wed, Nov 18, 2009 at 8:52 AM, Dennis Byrne <dennisbyrne at apache.org> wrote:
> At this point my best guess is that this has something to do with the
> fact that I am running on a Virtual Machine.  cat /proc/cpuinfo
> indicates the machine does in fact see two processors.  The output I
> get for both -client and -server has no locks and no fences.  I will
> run the same class through PrintOptoAssembly outside of VM Workstation
> later in the day in order to build on my case that this has something
> to do with VMWare.  Thanks for your time on this.
>
> Dennis Byrne
>
> On Wed, Nov 18, 2009 at 3:21 AM, David Holmes - Sun Microsystems
> <David.Holmes at sun.com> wrote:
>> Tim Bell said the following on 11/18/09 18:22:
>>>
>>> Also - are you running your tests on a single-CPU machine?  I recall
>>> HotSpot
>>> detects that and will elide any n-way synchronization measures if so...
>>
>> Yes that should have been my first question :-) Thanks Tim. On x86 this
>> stuff is elided if running on only a single core/processor.
>>
>> I just confirmed -client output showing the lock:addl "fences"
>>
>> David
>>
>>  ;;  block B2 [8, 31]
>>
>>  0xca4f72b8: mov    $0xc61f5590,%edx   ;...ba90551f c6
>>                                        ;   {oop('HelloWorld')}
>>  0xca4f72bd: mov    0x1c0(%edx),%ecx   ;...8b8ac001 0000
>>                                        ;*getstatic v
>>                                        ; - HelloWorld::run at 8 (line 10)
>>  0xca4f72c3: add    $0x14d,%ecx        ;...81c14d01 0000
>>  0xca4f72c9: mov    %ecx,0x1c0(%edx)   ;...898ac001 0000
>>  0xca4f72cf: lock addl $0x0,(%esp)     ;...f0830424 00
>>                                        ;*putstatic v
>>                                        ; - HelloWorld::run at 15 (line 10)
>>  0xca4f72d4: mov    0x1c4(%edx),%ecx   ;...8b8ac401 0000
>>                                        ;*getstatic v2
>>                                        ; - HelloWorld::run at 18 (line 11)
>>  0xca4f72da: mov    0x1c0(%edx),%edi   ;...8bbac001 0000
>>                                        ;*getstatic v
>>                                        ; - HelloWorld::run at 21 (line 11)
>>  0xca4f72e0: add    %edi,%ecx          ;...03cf
>>  0xca4f72e2: mov    %ecx,0x1c4(%edx)   ;...898ac401 0000
>>  0xca4f72e8: lock addl $0x0,(%esp)     ;...f0830424 00
>>                                        ;*putstatic v2
>>                                        ; - HelloWorld::run at 25 (line 11)
>>
>>
>>
>>
>>>> For x86 we should see a StoreLoad barrier after the assignment to v2:
>>>>
>>>> http://gee.cs.oswego.edu/dl/jmm/cookbook.html
>>>>
>>>> For -server printOptoAssembly shows our "mfence" replacement a lock:addl
>>>> (which is the implementation of membar-volatile().
>>>>
>>>> [ Got to go get hsdis myself to test printAssembly directly ]
>>>
>>> HTH-
>>>
>>> Tim
>>
>
>
>
> --
> Dennis Byrne
>



-- 
Dennis Byrne


More information about the hotspot-dev mailing list