Intel64及IA-32架构优化指南第8章多核与超线程技术——8.9 其它共享资源的优化
8.9 其它共享资源的优化
在多线程应用中的资源优化依赖于处理器拓扑层级内相关联的Cache拓扑以及执行资源。在第7章中讨论了处理器拓扑以及标识处理器拓扑的一种软件算法。
在带有共享总线的平台中,总线系统被处于SMT层以及在处理器拓扑中的处理器核心层的多个代理所共享。因而多线程应用程序设计应该起始于管理对多个处理器代理可用的总线带宽的方法,这些处理器代理以一种合理的方式共享同一个总线连接。这可以通过提升独立应用程序线程的数据位置性或允许两个线程利用一个共享的L2 Cache(在该平台中,共享Cache是可用的)来达成。
一般来说,优化一个多线程应用的构建块可以从一个独立的线程开始。在第3章到第9章的所讨论的准则极大地应用于多线程优化。
调整建议3:先优化单线程代码来最大化执行吞吐。
调整建议4:引入高效的线程模型,利用可用的工具(诸如Intel Threading Buiding Block,Intel Thread Checker,Intel Thread Profiler)来实现最优的关于物理处理器个数或处理器核心的处理器尺度。
8.9.1 为HT优化的扩充的机会
在Intel微架构代号名为Nehalem中的超线程技术(HT)的实现与先前HT实现的处理器有所不同。它为多线程软件提供了更广泛的机会来利用HT并实现更高的系统吞吐,涉及更广泛的应用程序问题。这章提供了一些启发式的建议并描述了某些情景,在代号名为Nehalem的Intel微架构中的HT提供了更多优化机会。
第2章涵盖了某些在超线程技术中的微架构性能增强。这些增强特性中有很多都围绕着多线程软件这个中心点,就共享可能被多于一个线程上下文所使用的公共硬件资源而言。
不同的软件算法以及负载特征可能会产生不同的性能特征,由于它们对关键架构性资源的需求,可能在几个逻辑处理器之间被共享。对于各种不同的架构上子系统的简要比较在表8-3中概述,而该子系统会在对HT进行软件调整中扮演重要角色。
表8-3:与HT实现相比较的架构性资源
微架构子系统 || Intel微架构代码名Nehalem || Intel NetBurst微架构
|| 06_1AH || 0F_02H, oF_03H, 0F_04H, 0F_06H
发布端口,执行单元: || 三个发布端口(0,1,5)被分派来处理ALU、SIMD、FP计算 || 不平衡的端口,快速ALU、SIMD和FP共享同一个端口(端口1)
缓存: || 在ROB、RS中有更多条目,填充缓存等等,具有适度的流水线深度 || 在缓存条目和流水线深度之间有较少的平衡
分支预测以及错误对齐的存储器访问: || 更健壮的在错误预测之后的带有立即改造的投机执行;高效的Cache分裂的处理 || 更多架构性的危机导致流水线为两个线程都被清除
Cache一致性: || 更大且更高效 || 更多架构上的危机需要做调配
存储器与带宽: || NUMA,每个插座对DDR3有三个通道,每个插座高达32GB/s || SMP,FSB或双FSB,每个FSB高达12.8GB/s
对于计算绑定的工作负载,Intel NetBurst微架构趋于偏向以相对来说高CPI(隐退连续指令的平均周期)来执行的线程上下文。在硬件层,这部分由于微架构中发布端口的不平衡,由于端口1与快速ALU、缓慢ALU(任务更重的整数操作),SIMD以及FP计算所共享。在软件层,高CPI以及可能作为提供HT利益的良性的催化而出现的某些起因可以包括:长延迟指令(端口1),一些L2命中,偶尔的分支预测失败,等等。但Intel NetBurst微架构重的流水线的长度经常强行使用额外的内部硬件限制而限制软件利用HT的能力。
在表8-3中列出的微架构增强期望为计算绑定的工作负载提供更宽广的软件优化机会。由两个计算绑定的线程而竞争同一个执行单元,可能要比起数据分解线程更关注选择一个功能分解的线程模型。代号名为Nehalem的Intel微架构将可能更有助于支持程序员选择最优的线程分解模型。
存储器密集的工作负载能展示范围广泛的性能特征,范围从完整的并行存储器交通(吃透系统存储器带宽,就好比在众所周知的Stream的例子中),受存储器延迟支配的存储器交通,或任一种类型的计算操作与存储器交通的各种混合。
在Intel NetBurst微架构中的HT实现可以对工作负载特征的后两种类型的某些提供利益。在代号名为Nehalem的Intel微架构中的HT特性能加宽后两种类型工作负载特征的操作封装来传递更高的系统吞吐,由于它支持非统一的存储器访问(NUMA)、更高效的连接协议,以及随物理处理器的个数可缩放的系统存储器带宽。
某些Cache层级的Cache层可以被多个逻辑处理器所共享。使用Cache层级对于软件是一个重要方法来提升存储器交通的高效性,并避免饱和系统存储器带宽。引入Cache分块技术的多线程应用可以希望对一个目标Cache层进行划分来利用超线程技术。可替换地,共享同一个L1和L2的两个逻辑处理器,或共享L3的逻辑处理器可能希望根据它们相对的拓扑关系来共享资源。对处理器拓扑枚举以及Cache拓扑枚举,伴有参考代码的白皮书已经被发行了(见第1章结尾处的参考)。
Intel64及IA-32架构优化指南第8章多核与超线程技术——8.9 其它共享资源的优化的更多相关文章
- 【转】Spark性能优化指南——基础篇
http://mp.weixin.qq.com/s?__biz=MjM5NDMwNjMzNA==&mid=2651805828&idx=1&sn=2f413828d1fdc6a ...
- 【转载】 Spark性能优化指南——基础篇
转自:http://tech.meituan.com/spark-tuning-basic.html?from=timeline 前言 开发调优 调优概述 原则一:避免创建重复的RDD 原则二:尽可能 ...
- Spark性能优化指南——基础篇(转载)
前言 在大数据计算领域,Spark已经成为了越来越流行.越来越受欢迎的计算平台之一.Spark的功能涵盖了大数据领域的离线批处理.SQL类处理.流式/实时计算.机器学习.图计算等各种不同类型的计算操作 ...
- Spark性能优化指南——基础篇
本文转自:http://tech.meituan.com/spark-tuning-basic.html 感谢原作者 前言 在大数据计算领域,Spark已经成为了越来越流行.越来越受欢迎的计算平台之一 ...
- Spark性能优化指南——基础篇转
前言 在大数据计算领域,Spark已经成为了越来越流行.越来越受欢迎的计算平台之一.Spark的功能涵盖了大数据领域的离线批处理.SQL类处理.流式/实时计算.机器学习.图计算等各种不同类型的计算操作 ...
- Spark性能优化指南--基础篇
前言 开发调优 调优概述 原则一:避免创建重复的RDD 原则二:尽可能复用同一个RDD 原则三:对多次使用的RDD进行持久化 原则四:尽量避免使用shuffle类算子 原则五:使用map-side预聚 ...
- Spark性能优化指南——基础篇(转)
[转]Spark性能优化指南——基础篇 http://mp.weixin.qq.com/s?__biz=MjM5NDMwNjMzNA==&mid=2651805828&idx=1&am ...
- Mina架构与优化指南
MINA架构 这里,我借用了一张Trustin Lee在Asia 2006的ppt里面的图片来介绍MINA的架构. Remote Peer就是客户端,而下方的框是MINA的主要结构,各个框之间的箭头代 ...
- 站点部署,IIS配置优化指南[转]
站点部署,IIS配置优化指南 目录 一. 设置应用程序池默认设置 二. 常规设置 三. 优化回收策略 四. 性能 五. IIS初始化(预加载 ...
随机推荐
- 二、MySQL介绍
目录 一.MySQL背景 二.MySQL的优点 三.MySQL安装 四.MySQL服务的启动和停止 五.MySQL登录和退出 六.MySQL常用命令 (一)常用命令 (二)语法规范 (三)SQL语言细 ...
- Computer Vision_1_Active Appearance Models:Active Appearance Models——2001
此为计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面. 1. Active Appearance Models 活动表观模型和活动轮廓模型基本思想来源 Snake,现在 ...
- etcd安装和简单使用
etcd作为一个高可用强一致性的服务发现存储仓库,在Kubernetes等开源项目中用的很多,这里简单记录下安装和常用命令以及api 安装 安装包可以从 https://github.com/etcd ...
- Ajax fileUpload
在项目开发中用到ajax 的 fileUpload,遇到onchange事件只触发一次 原因是fileUpload调用后将原有的file元素改变了,需要早upload后重新绑定元素 第一次绑定: $( ...
- fsLayuiPlugin单页面操作
概述 单页面处理新增.修改.查看详情 共用同一个弹出的页面.在线demo数据表格2 使用 提供2种处理方式(主要区别区弹出窗口的html配置),根据实际情况选择使用那种方式. 新增.修改功能共用一个按 ...
- vue的prop父子组件传值
props down, events up 父组件通过 props 向下传递数据给子组件:子组件通过 events 给父组件发送消息. 静态 props 要让子组件使用父组件的数据,需要通过子组件的 ...
- 题解 [51nod1607] 卷积和
题面 解析 神仙LZF随机找出的毒瘤题. 一开始读题过于草率导致\(naive\)了. step 1 看上去特别像数位DP(实际上也有一点). 先预处理出有\(i\)位的数(最高位不为\(0\))的数 ...
- learning armbian steps(7) ----- armbian 源码分析(二)
从compile.sh开始入手: SRC="$(dirname "$(realpath "${BASH_SOURCE}")")" # fal ...
- hdu 5834 Magic boy Bi Luo with his excited tree 树形dp+转移
Magic boy Bi Luo with his excited tree Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 13107 ...
- windows下mysql 主库从库同步
今天先讲讲数据库的主从同步,两个好处: 一是读写分离可以用上.比如 写操作就写到主数据库,读就再从库读取 二是纯粹给数据库备份,以防硬盘彻底崩了 主从数据库操作准备: 两台电脑,都安装好mysql 5 ...