并发编程中需要谨记的规则(翻)

2023-11-10

并发编程中需要谨记的规则

 

最小化临界区

         Amdahl定律和Gustafson定律都将并行算法中的顺序执行的工作视为性能问题的头号敌人。两个执行代码区段中间的时间需要顺序执行,这就是众所周知的临界值。在图1-16的分析Gustafson定律的图表中有四个这样的临界区。

 

1-16

 

         当你并行化你的任务的时候,为了实现最好的性能我们需要最小化这些临界区。大多的时候,是难以避免并行执行区域之间的串行执行的代码的,因为需要加载并行任务和收集执行结果。然而,优化这些临界区域的代码并且移除不必要的代码比协调并行代码甚至更重要。

         当你面对一个拥有太多临街区域的执行计划的时候,要谨记Amdahl定律。如果你不能减少这些区域,那就尽力找到可以与这些区域并行执行的任务。例如,你可以提前取出要同时执行的并行代码需要的数据来提高解决方案的性能。谨记现在多核硬件提供的能力并避免总是想着你仅有一个执行单元。

理解多核并发编程的规则

         James ReindersDr.Dobb’sJournal上发表了题为“多核并发编程的规则”的文章。他列举了八条规则来帮助开发人员进行多核编程。他的规则对使用C#.NET 4编写的并行应用程序一样很有用。这些规则的描述如下

1.      并发编程的思想这条规则就是要谨记并发编程思想进行设计,就像前边章节所提交的。

2.      面向抽象编程-你可以利用.NET4中的TPL提供的新特性使你的高层代码反映解决的问题,并且不是底层线程管理技术复杂化。第二章将会引入TPL

3.      基于任务模型编程,而不是线程—TPL允许你你编写代码实现基于任务模型的设计而不用担心底层的线程。

4.      设计可以选择关闭并发当你使用TPL写代码的时候,这些代码页可能会运行在单核的微处理器上。

5.      避免使用锁利用新的类和方法、结构体解决对于复杂同步方式的需求是很重要的。TPL使避免在很多复杂的情景下使用重量级锁变得更简单,它提供了新的轻量级的同步方法。

6.      借助已有的工具和类库的帮助进行并发编程—Visual Studio 2010提供了新的工具调试、测试、协调并行代码。在本书中你将会学习很多相关的工具和类库。

7.      使用可伸缩的内存分配策略—TPLCLR里提供了可伸缩的内存分配策略,当任务和线程执行的时候,它会自动的执行内存分配策略。然而,为了最大程度的利用缓存,你必须分析不同的分配可能性,并且尽力避免在每个任务里消耗过多的内存。

8.      设计的可伸缩性可以通过增加负载的方式实现一旦你精通了并行扩展库,那么使用TPL提供的新的类考虑Gustafson定律就会很容易。如果你的设计需要具有很强的伸缩性,你将可以编写代码根据核心的增加进行调整。Windows 7 windows Server 2008 R2支持多大256个硬件线程或者逻辑处理器;所以,有足够的伸缩性空间。

NUMA和更好伸缩性进行设计

         近年来,对多处理器支持的最广泛的模型是NUMAnon-uniform memory access)架构,而不是SMPsymmetricmultiprocessor)架构。SMP的一个最大的问题就是处理器总线会成为将来可伸缩性的瓶颈,因为每个处理器都拥有等同的能力方位内存和io

         使用NUMA,于离得比较远的内存相比,每个处理器总是可以更快的访问离自己近的内存。当处理器的数目超过四个的时候,NUMA提供了更好的伸缩性。在windows scale-up-technology中,NUMA是以一下方式进行组织的,如图1-17

         一个单个的电脑或者机器可以有一个或者多个group

         每一个group有一个或者多个NUMA节点。

         每个NUMA节点有一个或者多个物理处理器。

         每个处理器有一个或者多个物理核心,因为它经常是多核处理器。

         每个物理内核可以提供一个或者多个逻辑处理器或者硬件线程。

1-17

         1-18展示了由两个NUMA节点构成一个group的计算机。每个NUMA节点有两个共享访问局部内存和io的两个处理器组成。如果NUMA节点0的处理器0的物理核心0的线程需要访问位于NUMA节点1的数据,则它必须使用两个NUMA节点之间的共享总线,这会比直接访问自己的局部内存要慢很多。

1-18

 

         带有NUMA的计算机拥有多于一个的系统总线。每个特定的处理器集合使用自己可用的系统总线。同样的他们也访问自己自由的内存和io通道。就像前边描述的,他们可以使用合适的协调策略,使他们具有访问其他处理器的内存的能力。然而,很明显访问其他NUMA节点所有的内存要比方位自己NUMA节点内的付出的代价昂贵的多。

         NUMA的硬件需要特殊的优化。应用程序必须知道NUMA硬件和配置。我们可以执行那些需要访问NUMA节点的相同的内存的任务和线程模型。应用程序应该避免无效的内存方位,并且他们喜欢并发,考虑到内存的未知。

        

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

并发编程中需要谨记的规则(翻) 的相关文章

随机推荐

  • MySQL的null与not null

    相信很多用了mysql很久的人 对这两个字段属性的概念还不是很清楚 一般会有以下疑问 我字段类型是not null 为什么我可以插入空值 为毛not null的效率比null高 判断字段不为空的时候 到底要 select from tabl
  • IDEA报错:Cannot start compilation: the output path is not specified for module “testSvnKit“.Specify th

    IDEA报错Cannot start compilation the output path is not specified for module testSvnKit Specify the output path in the Pro
  • List分组的两种方式

    java8之前List分组 假设有个student类 有id name score属性 list集合中存放所有学生信息 现在要根据学生姓名进行分组 public Map
  • 精确径向基(matlab工具箱)

    原文地址 精确径向基 matlab工具箱 作者 神经网络之家 作者 梁小h 日期 2015 10 26 09 30 47 0 lt 文档仅供查阅和简单了解 深入了解请关注神经网络之家发布的 神经网络教学视频 gt 精确径向基神经网络在mat
  • HTML详解连载(5)

    HTML详解连载 5 专栏链接 link http t csdn cn xF0H3 下面进行专栏介绍 开始喽 行高 设置多行文本的间距 属性名 属性值 行高的测量方法 行高 垂直居中 技巧 字体族 属性名 属性值 示例 扩展 font 复合
  • 学期总结-2018年上

    从现在开始 我需要养成一个写作的好习惯 之所以培养这个习惯 是因为 我开始发现我的一个重大缺陷 语言表达能力的欠缺 这种能力 在一般生活中并不会有太大的作用 而且很多时候 大部分人都体会不到其所带来的 破坏 这种破坏 会让你的交际陷入阻塞
  • 不能向服务器考文件,如何往云服务器考文件

    如何往云服务器考文件 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 无法正常使用Cloud init 弹性云服务器获取M
  • 关于python爬虫逆向RPC的基础使用

    makeRequest function a b c d rpc使用的代码 function 防止重复创建websocket if window flagLX else window weiboLX makeRequest var ws n
  • egg初始化搭建swagger项目

    步骤 安装node 安装你喜欢的编辑器 初始化项目 输入安装 egg 命令 输入安装 egg dev 命令 修改 package json 基本目录结构 需手动创建 输入安装 egg sequelize 命令 数据库选择 配置 sequel
  • Android移动开发-调用摄像头进行拍照的实现

    现在Android智能手机的像素都会提供照相的功能 大部分的手机的摄像头的像素都在1000万以上的像素 有的甚至会更高 它们大多都会支持光学变焦 曝光以及快门等等 下面的程序Demo实例示范了使用Camera v2来进行拍照 当用户按下拍照
  • Windows修改MySQL数据库密码(修改或忘记密码)

    今天练习远程访问数据库时 为了方便访问 就想着把数据库密码改为统一的 以后我们也会经常遇到MySQL需要修改密码的情况 比如密码太简单 忘记密码等等 在这里我就借鉴其他人的方法总结几种修改MySQL密码的方法 我就以实际操作修改root密码
  • Android:安卓学习笔记之MVP模式的简单理解和使用

    Android MVP模式的简单理解和使用 MVP模式 1 为什么使用MVP模式 1 1 实例说明 2 一步步让你理解MVP 2 1 MVP实现第一步 将页面拆分为M V P三个模块 2 2 MVP实现第2步 使用接口通信 进一步解耦 2
  • 高并发中的惊群问题

    目录 1 惊群效应是什么 2 惊群效应消耗了什么 3 惊群的几种情况 3 1 accept惊群 新版内核已解决 3 2 epoll create 在 fork 之前创建 3 3 epoll create 在 fork 之后创建 4 Linu
  • caffe-fast-rcnn 错误解决途径

    CAFFE深度学习交流群 532629018 root ubuntu usr local fast rcnn caffe fast rcnn make j16 CXX src caffe syncedmem cpp CXX src caff
  • Altium Designer修改3D视图时PCB板的颜色

    首先切换到PCB文件下 打开3D预览视图 快捷键为数字3 或者依次点击 视图 切换到3维模式 之后点击 拖拽进度条 或从选颜色即可
  • listbox控件用法详解

    http blog sina com cn s blog 61e2b6280100svtp html 1 属性列表 SelectionMode 组件中条目的选择类型 即多选 Multiple 单选 Single Rows 列表框中显示总共多
  • 数据库系统原理实验(实习)报告——单表查询

    一 实验目的 1 掌握select语句的基本语法和查询条件表示方法 2 掌握数据汇总方法 3 掌握group by子句的作用和使用方法 4 掌握having子句的作用和使用方法 5 掌握order by子句的作用和使用方法 二 实验内容与步
  • 数据结构三大算法(案例解析)

    概述 本文讲述数据结构中最常用到的三大算法 分治法 动态规划法和贪心算法 主要从这些算法的经典案例入手来对算法进行分析和理解 分治法 分治法可以通俗的理解为将一条大鱼分成好几块 分别料理每一块鱼肉 然后再组成一道菜 也就是说分治法是将一个大
  • Cadence17.2 > OrCAD Capture CIS > 设计规则检查(Design Rule Check)DRC学习记录详解

    目录 一 Design Rule Check对话框选项详解 1 Design Rule Options选项详解 2 Electrical Rules 电气规则检查 选项详解 3 Physical Rules 物理规则检查 选项详解 4 ER
  • 并发编程中需要谨记的规则(翻)

    并发编程中需要谨记的规则 最小化临界区 Amdahl定律和Gustafson定律都将并行算法中的顺序执行的工作视为性能问题的头号敌人 两个执行代码区段中间的时间需要顺序执行 这就是众所周知的临界值 在图1 16的分析Gustafson定律的