优化指南-Ampere Altra系列处理器的锁和内存序.docx
《优化指南-Ampere Altra系列处理器的锁和内存序.docx》由会员分享,可在线阅读,更多相关《优化指南-Ampere Altra系列处理器的锁和内存序.docx(6页珍藏版)》请在第一文库网上搜索。
1、优化指南-AmPereAItra系列处理器的锁和内存序AMPEREA1TRA和AMPEREA1TRAMAX的锁机制让我们先来了解一些基本的问题。Arm在Armv8.2-A架构中引入了大型系统扩展(1argeS)stemExtensions,1SE),它用单个原子指令取代了锁操作的指令序列。一个非常不错的总结。虽然旧的Arm版本在功能上可以很好地工作,但随着核心数量的增加和锁的争用更加频繁,预计性能会受到影响。AmpereA1tra和AmpereA1traMax支持1SE,并配备了可扩展的锁性能。为了说明使用的指令之间的差异,让我们看看gcc的处理方式_atomicfetchaddO0在本例中,
2、将锁值减1:_atomic_fetch_add(&1ockptr-Iockva1,-1,_ATOMICACQRE1);使用*-march=armv8.2-a*选项编译,编译器生成带有原子指令的代码:998:f8f60280Idadda1x22,x,x20另一方面,设置*-march=armv8-a*(不支持1SE),生成一个不同的序列:9a4:c85ffe60Idaxrx,x199a8:d1000400SUbx,x,#0x19ac:9b0:c801fe60st1xrw1,x,x1935ffffa1cbnzw1,9a4为了使序列具有原子性,需要一个单独的监视器。IdaXr获得一个地址标记,在本例
3、中为x19o然后执行减法,然后存储回内存位置。但是,只有当存储(st*e)时的标记与加载(1oad)中的标记匹配时,存储才会成功。St1xr之后的条件分支cbnz检查存储是否成功,这意味着1oad和store中的标记匹配。如果不是,则跳回序列的开头,在本例中是地址0x9a4o这里值得注意的是,如果没有1SE指令,这个指令序列可能要执行几次才能被认为成功。使用1SE,Idadda1指令可以保证以一条指令完成,不需要循环。图1显示了当线程数从1增加到80时,使用1SE和不使用1SE时每秒获得排他锁的性能差异。Figure1-1ockgets:IsevsnoIseIse1ockgets/secno-
4、1se1ockgets/sec图1通常,Compare和Exchange便件指令用于在软件中实现锁。需要注意的是,这些指令必须是原子指令。原子在这里是什么意思呢?这些指令首先获得包含锁的缓存行(Cache1ine)的所有权,并将其加载到CPU的本地缓存中。然后将当前值与随指令提交的比较值进行比较。如果相等,作为指令一部分提交的新值将替换当前值。如果不相等,则保持当前值。这方面的原子性意味着整个序列由一个线程执行,而没有其他线程访问缓存行,由硬件保证。锁的种类在软件中可以实现不同类型的锁,如互斥锁(IIIUtexes)、票据锁(IiCket)和自旋锁(SPin1oCks)。如前所述,不同的锁类型
5、在软件中实现,硬件提供类似cmpxchg或fetchadd的指令。相同的锁类型在不同的硬件上运行,只有使用的指令不同。如何实现锁机制这是一个非常重要的问题。让我们把它分解成两个选项:D使用可用的库和2)使用原子指令来实现专有的锁定篁法。选项1有几个优点。库已经存在,不需要自定义实现,而且经过了充分测试,通常将会在未来的库版本中进行维护。例如pthread_mutex_1ock和pthread_rw1ocko听起来不错,那么有什么缺点呢?缺乏统计数据可能是一个问题。没有向应用程序返回任何信息,报告旋转(SPinS)或线程被调度出多少次。此外,库实现可能不太适合某些应用程序,因为库更通用。选项2更
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 优化指南-Ampere Altra系列处理器的锁和内存序 优化 指南 Ampere Altra 系列 处理器 内存
