请教个问题,ARM load acquire和store release指令的使用场景是

hanxh
nanamefuofeihua 2017-11-17 字数 84

请教各位老师一个问题,ARM load acquire和store release指令的使用场景是什么? 谢谢拉!

CSArch 计算机体系结构
10 个回复
map2016
map2016 2017-11-18
hanxh
nanamefuofeihua 2017-11-20

我一直觉得spin lock用到的指令应该类似于这样:

loop:

ldxr

cmp

b.eq loop

stxr

cbnz wx,loop

【 在 map2016 的大作中提到: 】

: spin lock

yswzing
yswzing 2017-11-24

你这是没有考虑访存乱序的问题。关键字: release consistency

【 在 hanxh 的大作中提到: 】

: 我一直觉得spin lock用到的指令应该类似于这样:

: loop:

:    ldxr

: ...................

yupluo
yupluo 2017-11-26

和一些上层语言,比如C/C++11 atomic operations 有对应关系。

memory_order_acquire

memory_order_release

memory_order_relaxed

https://www.cl.cam.ac.uk/~pes20/cpp/cpp0xmappings.html

另外,Linux kernel里面也用,比如fs, rcu。 毕竟是轻量级的barrier。

smp_store_release

smp_load_acquire

smp_cond_load_acquire

【 在 hanxh 的大作中提到: 】

: 请教各位老师一个问题,ARM load acquire和store release指令的使用场景是什么? 谢谢拉!

hanxh
nanamefuofeihua 2017-11-27

哦。

ARM本身是relax的,如果是因为consistency的话,是不是意味着某些场景下程序员必须保证consistency,所以才加了acquire&release。否则一段cirtical code也是可以不加acquire&release的?

【 在 yswzing 的大作中提到: 】

: 你这是没有考虑访存乱序的问题。关键字: release consistency

hanxh
nanamefuofeihua 2017-11-27

谢谢,你推荐的网址非常好,已收藏~

只是不明白在使用C/C++11 atomic operations时是怎么选择“轻量级”barrier和普通的barrier的呢?

【 在 yupluo 的大作中提到: 】

: 和一些上层语言,比如C/C++11 atomic operations 有对应关系。

:   memory_order_acquire

: ...................

yswzing
yswzing 2017-11-29

锁编程的时候,有一个隐含的前提,必须是先获取锁,然后再访问数据;解锁的时候相反,必须先写完数据,再释放锁。所以这里分别有一个acquire/release语义,所有加锁解锁代码都必须有,跟具体的临界区代码没有关系。

【 在 hanxh 的大作中提到: 】

: 哦。

: ARM本身是relax的,如果是因为consistency的话,是不是意味着某些场景下程序员必须保证consistency,所以才加了acquire&release。否则一段cirtical code也是可以不加acquire&release的?

hanxh
nanamefuofeihua 2017-11-30

讲的很清楚,太感谢您了,给您一个大大的赞!

【 在 yswzing 的大作中提到: 】

: 锁编程的时候,有一个隐含的前提,必须是先获取锁,然后再访问数据;解锁的时候相反,必须先写完数据,再释放锁。所以这里分别有一个acquire/release语义,所有加锁解锁代码都必须有,跟具体的临界区代码没有关系。

hanxh
nanamefuofeihua 2017-11-30
chenpp
本人男 2017-12-06

个人理解是轻量级的barrier给予微架构更多性能上的自由度。当然加解锁的代码本身也没有什么性能可言……

【 在 hanxh () 的大作中提到: 】

: 谢谢,你推荐的网址非常好,已收藏~

: 只是不明白在使用C/C++11 atomic operations时是怎么选择“轻量级”barrier和普通的barrier的呢?

yupluo
yupluo 2017-12-21

普通的barriers, 比如DMB,DSB是双向的,对系统的性能影响比较大。有些场景下只需要对单向的meory access有ordering的要求。

【 在 hanxh 的大作中提到: 】

: 谢谢,你推荐的网址非常好,已收藏~

: 只是不明白在使用C/C++11 atomic operations时是怎么选择“轻量级”barrier和普通的barrier的呢?

chenpp
本人男 2017-12-21

DSB在多核场合下比较伤性能

【 在 yupluo () 的大作中提到: 】

: 【 在 hanxh 的大作中提到: 】

: 普通的barriers, 比如DMB,DSB是双向的,对系统的性能影响比较大。有些场景下只需要对单向的meory access有ordering的要求。