2002 2003 2004 2005 2006 2007 2008 2009 2010 <2011> 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 | Index | 2002 2003 2004 2005 2006 2007 2008 2009 2010 <2011> 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 |
<== Date ==> | <== Thread ==> |
---|
Subject: | Re: [Merge] lp:~epics-core/epics-base/epicsR3.15-atomics into lp:epics-base |
From: | Jeff Hill <[email protected]> |
To: | Jeff Hill <[email protected]> |
Date: | Fri, 02 Sep 2011 17:08:08 -0000 |
During testing I do see an unusual performance anomaly. It seems that the gcc memory barrier intrinsic functions performance is maybe too good to be true on linux-x86 and linux-686 (see epicsAtomicSet performance below) On RHEL linux-x86: [hill@lcssvr5 test]$ O.linux-x86/epicsAtomicPerform # epicsAtomicSet of "i" takes 0.000678 microseconds # epicsAtomicSet of "j" takes 0.000425 microseconds # epicsAtomicSet of "Pv" takes 0.000524 microseconds # raw incr of "i" and a NOOP function call takes 0.002669 microseconds # raw incr of "j" and a NOOP function call takes 0.002671 microseconds # epicsAtomicIncr "i" takes 0.039754 microseconds # epicsAtomicIncr "j" takes 0.039736 microseconds # epicsAtomicCmpAndSwap of "i" takes 0.039187 microseconds # epicsAtomicCmpAndSwap of "j" takes 0.039140 microseconds # epicsAtomicCmpAndSwap of "Pv" takes 0.039124 microseconds # retOwnership() takes 0.082530 microseconds # passRefOwnership() takes 0.164766 microseconds Results ======= Tests: 0 On RHEL linux-686: [hill@lcssvr5 test]$ O.linux-x86/epicsAtomicPerform # epicsAtomicSet of "i" takes 0.000768 microseconds # epicsAtomicSet of "j" takes 0.000619 microseconds # epicsAtomicSet of "Pv" takes 0.000597 microseconds # raw incr of "i" and a NOOP function call takes 0.002676 microseconds # raw incr of "j" and a NOOP function call takes 0.002668 microseconds # epicsAtomicIncr "i" takes 0.008333 microseconds # epicsAtomicIncr "j" takes 0.008418 microseconds # epicsAtomicCmpAndSwap of "i" takes 0.008344 microseconds # epicsAtomicCmpAndSwap of "j" takes 0.008332 microseconds # epicsAtomicCmpAndSwap of "Pv" takes 0.008556 microseconds # retOwnership() takes 0.016959 microseconds # passRefOwnership() takes 0.033468 microseconds Results ======= Tests: 0 On win32-x86-mingw (using gcc memory barriers / windows OS atomics): C:\hill\epicsInBazaar\epicsR3.15-atomics\trunk\src\libCom\test>O.win32-x86-mingw\epicsAtomicPerform # epicsAtomicSet of "i" takes 0.006438 microseconds # epicsAtomicSet of "j" takes 0.006298 microseconds # epicsAtomicSet of "Pv" takes 0.006294 microseconds # raw incr of "i" and a NOOP function call takes 0.001606 microseconds # raw incr of "j" and a NOOP function call takes 0.001604 microseconds # epicsAtomicIncr "i" takes 0.008752 microseconds # epicsAtomicIncr "j" takes 0.008751 microseconds # epicsAtomicCmpAndSwap of "i" takes 0.008752 microseconds # epicsAtomicCmpAndSwap of "j" takes 0.008756 microseconds # epicsAtomicCmpAndSwap of "Pv" takes 0.008752 microseconds # retOwnership() takes 0.017703 microseconds # passRefOwnership() takes 0.035162 microseconds Results ======= Tests: 0 On win32-686-mingw (using gcc memory barriers / gcc intrinsic atomics): # epicsAtomicSet of "i" takes 0.006333 microseconds # epicsAtomicSet of "j" takes 0.006294 microseconds # epicsAtomicSet of "Pv" takes 0.006312 microseconds # raw incr of "i" and a NOOP function call takes 0.001497 microseconds # raw incr of "j" and a NOOP function call takes 0.001498 microseconds # epicsAtomicIncr "i" takes 0.006265 microseconds # epicsAtomicIncr "j" takes 0.006260 microseconds # epicsAtomicCmpAndSwap of "i" takes 0.006575 microseconds # epicsAtomicCmpAndSwap of "j" takes 0.006576 microseconds # epicsAtomicCmpAndSwap of "Pv" takes 0.006582 microseconds # retOwnership() takes 0.012689 microseconds # passRefOwnership() takes 0.025254 microseconds Results ======= Tests: 0 -- https://code.launchpad.net/~epics-core/epics-base/epicsR3.15-atomics/+merge/73613 Your team EPICS Core Developers is subscribed to branch lp:~epics-core/epics-base/3.15-buildCompilerSpecific.