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初始化(预加载 ...
随机推荐
- centos所有版本镜像下载地址
centos所有版本镜像下载地址 版本号 下载地址 更新时间 centos2.1 iso镜像下载 2.1/ 2009/8/19 1:36 centos3.1 iso镜像下载 3.1/ 2005/ ...
- Prometheus 监控 Redis 集群的正确姿势
Prometheus 监控Redis的正确姿势(redis集群) Prometheus 监控 Redis cluster,其实套路都是一样的,使用 exporter. exporter 负责采集指标, ...
- linux常用的操作命令
---恢复内容开始--- 最近换了工作之后,需要管理linux服务器的日常运行和维护,自然linux命令是少不了的,切换目录,vim操作等的简单的操作就不说了,有些时候还需要查看日志和监控服务器启动进 ...
- Oracle 11 安装教程(桌面类)
准备文件: http://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_database_1of2.zip http://downlo ...
- 13 110内容回、111内容回顾、redis操作
redis加入路飞项目
- 在Google Maps 上点击标签后显示说明
JS如下: (function() { window.onload = function() { // Creating an object literal contain ...
- JS数组的交集、并集、差集,数组去重,获取两个数组重复的元素,去除两个数组相同的元素
let arr1=[1,2,3,4,5,6] let arr2=[4,5,6,7,8,9] // 并集 数组去重 let RemoveSame=[...new Set([...arr1,...arr2 ...
- IAT表和导入表
1.关于IAT(import address table)表 当exe程序中调用dll中的函数时,反汇编可以看到,call后面并不是跟的实际函数的地址,而是给了一个地址:
- prev([expr]) 取得一个包含匹配的元素集合中每一个元素紧邻的前一个同辈元素的元素集合。
prev([expr]) 概述 取得一个包含匹配的元素集合中每一个元素紧邻的前一个同辈元素的元素集合. 可以用一个可选的表达式进行筛选.只有紧邻的同辈元素会被匹配到,而不是前面所有的同辈元素.直线电机 ...
- 一种关闭Windows 8.1 Windows Defender的简单办法
背景 安装好Windows 8.1,像往常一样,打开[服务]准备关闭Windows Defender,发现不能设置启动类型而且其默认为启动状态,如下图所示. 两个有两种方式关闭它.一是安装第三方安全软 ...