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 其它共享资源的优化的更多相关文章

  1. 【转】Spark性能优化指南——基础篇

    http://mp.weixin.qq.com/s?__biz=MjM5NDMwNjMzNA==&mid=2651805828&idx=1&sn=2f413828d1fdc6a ...

  2. 【转载】 Spark性能优化指南——基础篇

    转自:http://tech.meituan.com/spark-tuning-basic.html?from=timeline 前言 开发调优 调优概述 原则一:避免创建重复的RDD 原则二:尽可能 ...

  3. Spark性能优化指南——基础篇(转载)

    前言 在大数据计算领域,Spark已经成为了越来越流行.越来越受欢迎的计算平台之一.Spark的功能涵盖了大数据领域的离线批处理.SQL类处理.流式/实时计算.机器学习.图计算等各种不同类型的计算操作 ...

  4. Spark性能优化指南——基础篇

    本文转自:http://tech.meituan.com/spark-tuning-basic.html 感谢原作者 前言 在大数据计算领域,Spark已经成为了越来越流行.越来越受欢迎的计算平台之一 ...

  5. Spark性能优化指南——基础篇转

    前言 在大数据计算领域,Spark已经成为了越来越流行.越来越受欢迎的计算平台之一.Spark的功能涵盖了大数据领域的离线批处理.SQL类处理.流式/实时计算.机器学习.图计算等各种不同类型的计算操作 ...

  6. Spark性能优化指南--基础篇

    前言 开发调优 调优概述 原则一:避免创建重复的RDD 原则二:尽可能复用同一个RDD 原则三:对多次使用的RDD进行持久化 原则四:尽量避免使用shuffle类算子 原则五:使用map-side预聚 ...

  7. Spark性能优化指南——基础篇(转)

    [转]Spark性能优化指南——基础篇 http://mp.weixin.qq.com/s?__biz=MjM5NDMwNjMzNA==&mid=2651805828&idx=1&am ...

  8. Mina架构与优化指南

    MINA架构 这里,我借用了一张Trustin Lee在Asia 2006的ppt里面的图片来介绍MINA的架构. Remote Peer就是客户端,而下方的框是MINA的主要结构,各个框之间的箭头代 ...

  9. 站点部署,IIS配置优化指南[转]

    站点部署,IIS配置优化指南 目录 一.       设置应用程序池默认设置 二.       常规设置 三.       优化回收策略 四.       性能 五.       IIS初始化(预加载 ...

随机推荐

  1. Swagger保姆级教学

    Swagger保姆级教学 Swagger 简介 Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样 ...

  2. SQLite3学习笔记(3)

    SQLite 表达式 表达式是一个或多个值.运算符和计算值的 SQL函数的组合. SQL表达式与公式类似,都写在查询语言中.您还可以使用特定的数据集来查询数据库. SELECT语句的基本语法如下: S ...

  3. fixed固定元素

    1.css <style type="text/css"> .elementFixed{ position: fixed; top:0; } </style> ...

  4. dao层取值用List<map<String,Object>>接收有序map

    发现一个好玩的Map, 当需要Map有序时用java.util.LinkedHashMap接收,是有序map resultType="java.util.LinkedHashMap" ...

  5. vue.js 父子组件间 props 数据同步处理

    常见的场景: 在一个vue组件A中,使用另外一个组件B.A将自己的数据通过B组件的Props属性(propX)传递到B组件实例内部,B组件内部会修改该Props属性(propX)的值,此时在A组件内部 ...

  6. MySQL主从同步、读写分离配置步骤、问题解决笔记

    MySQL主从同步.读写分离配置步骤.问题解决笔记 根据要求配置MySQL主从备份.读写分离,结合网上的文档,对搭建的步骤和出现的问题以及解决的过程做了如下笔记:       现在使用的两台服务器已经 ...

  7. URAL 2052 Physical Education(数位DP)

    题目链接:https://vjudge.net/contest/254142#problem/G 参考题解:https://blog.csdn.net/zearot/article/details/4 ...

  8. 10 masterless、高可用、salt执行模块开发、sydic架构

    1.salt无master 官方文档: http://docs.saltstack.cn/topics/tutorials/quickstart.html 1.使用场景 1.在项目中使用salt,写一 ...

  9. 【Winform-最大化窗体】Winform设置窗体最大化,填满整个屏幕

    设置窗体最大化,填满整个屏幕//this.MaximizedBounds = Screen.PrimaryScreen.WorkingArea;//this.MaximumSize = Screen. ...

  10. 通信网络(CCF)【图的遍历】

    问题描述 某国的军队由N个部门组成,为了提高安全性,部门之间建立了M条通路,每条通路只能单向传递信息,即一条从部门a到部门b的通路只能由a向b传递信息.信息可以通过中转的方式进行传递,即如果a能将信息 ...