TAS 与 TTAS 锁定
TAS vs TTAS locking
我正在比较 TAS 与 TTAS 锁定。
这是代码:
助教:
.globl _tas_lock_acquire
_tas_lock_acquire:
repeat:
lock btsw [=10=], (%rdi)
jc repeat
ret
.globl _tas_lock_release
_tas_lock_release:
lock btrw [=10=], (%rdi)
ret
TTAS:
.globl _ttas_lock_acquire
_ttas_lock_acquire:
try_lock:
lock btsw [=11=], (%rdi)
jc spinwait
ret
spinwait:
btsw [=11=], (%rdi)
jc spinwait
jmp try_lock
.globl _ttas_lock_release
_ttas_lock_release:
btrw [=11=], (%rdi)
ret
如果 TAS 锁定的性能类似于 c++11 atomic_flag(无差异),则 TTAS 明显较慢(3 个数量级)。
我正在测试“Intel(R) Core(TM) i3 CPU 540 @ 3.07GHz”。
我的错误是什么导致了速度变慢?
哦,我的错误在 _ttas_lock_acquire 实现中,spinwait 标签。
应该是“bt”指令,不是“bts”。
我正在比较 TAS 与 TTAS 锁定。 这是代码:
助教:
.globl _tas_lock_acquire
_tas_lock_acquire:
repeat:
lock btsw [=10=], (%rdi)
jc repeat
ret
.globl _tas_lock_release
_tas_lock_release:
lock btrw [=10=], (%rdi)
ret
TTAS:
.globl _ttas_lock_acquire
_ttas_lock_acquire:
try_lock:
lock btsw [=11=], (%rdi)
jc spinwait
ret
spinwait:
btsw [=11=], (%rdi)
jc spinwait
jmp try_lock
.globl _ttas_lock_release
_ttas_lock_release:
btrw [=11=], (%rdi)
ret
如果 TAS 锁定的性能类似于 c++11 atomic_flag(无差异),则 TTAS 明显较慢(3 个数量级)。 我正在测试“Intel(R) Core(TM) i3 CPU 540 @ 3.07GHz”。
我的错误是什么导致了速度变慢?
哦,我的错误在 _ttas_lock_acquire 实现中,spinwait 标签。 应该是“bt”指令,不是“bts”。