知识大全 多核编程的四层境界

Posted 资源

篇首语:只会幻想而不行动的人,永远也体会不到收获果实时的喜悦。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 多核编程的四层境界相关的知识,希望对你有一定的参考价值。

  自发表 老子是伟大的多核计算科学家 一文来 收到许多网友的强烈反响 褒扬者有之 砸板砖者亦有之 不过板砖数量倒是在我的意料之中 凡是跟哲学或者说是玄学的东西沾上边的 总会招来一阵口舌之争 虽然砸板砖者也没有说出任何反驳的道理来 但是并不代表那篇文章就很完美 没有不足的地方 实际上那篇文章中只涉及了多核编程的一个层面的思想 还有另外三层思想没有被提及 这也许可以算作是那篇文章的不足之处吧 为弥补其不足之处 下面从四个层面来阐述多核编程的基本思想

  第一层  先天 方法 策略层

  第一层的基本思想就是 老子是伟大的多核计算科学家 一文中所提及的几个基本思想 贪心 自私 偷 等 这些东西是先天存在的 是人类的一种本能 它又可以看作是方法 策略 因此把这层叫作 先天 方法 策略层

  先天的方法策略并不限于 贪心 自私 偷 这三种 去年的SD大会上 我讲过一个基于抢夺的分布式内存管理算法 说明 抢 也是一种先天的方法策略 所谓

   人之初 性本贪 性自私 性喜偷 性喜抢

  为避免误解 这里先说明一下 这里所说的 偷 抢 和通常意义的偷 抢并不完全相同 偷 和道家意义上的偷是同一个含义 即 不与取 之意 抢 则是取 不归还 之意

  昔范蠡云 且夫天舆弗取 反受其咎 既然上天给了我们这么多好的方法策略 不用它的话显然是一种糟蹋 在多核编程中如何使用这些策略来进行编程 开源项目TBB中可以找到详细的代码例子

  第二层  目标 需求 评价层

  先天的方法策略 虽然看似简单 但要用好它并不是一件容易的事情 自私 贪心 偷 抢等先天方法既可以用来做好事 也可以用来做坏事 这就牵涉到如何评价是否用好了这些先天方法策略的问题 也就是第二层目标 需求 评价层所需要解决的问题

  并不能为了使用先天方法策略而使用它 而是用它来满足我们的需求 到达一定的目标 那么这个需求和目标是什么呢?

  在这里不想对一般的需求进行分析 只分析优化方面的需求 要达到优化 可以理解为各种资源的有效利用 可能有很多人已经有这方面的理解 这些资源可以分为以下几个方面

   )时间资源 时间资源指的就是时间 比如一段程序或算法需要运行多长时间

   )空间资源 如内存 硬盘 网络 各种IO设备资源等均属于空间资源

   )计算资源 如CPU GPU 各种板卡上的处理器等均属于计算资源

   )能源资源 通常指的是电能的消耗量 由于全球变软 环保问题的日益重要 这个在以往被忽视的资源也变得重要起来

  如何有效利用上述资源 并在各种资源利用间取得均衡 是制定目标和需求的基础 也是评价程序或算法优化程度的基础

  第三层  本质 根源 保障层

  资源的有效利用 可不是一件简单的事情 在单核时代 许多程序员已有时间资源和空间资源的利用及均衡方面的丰富经验 那时几乎不用考虑计算资源的利用问题 因为处理器只有一个

  然而 在多核系统中 计算资源的利用成了头号问题 多个处理器的使用 使得程序员必须考虑如何将程序在各个处理器上并行地执行 这就牵涉到一个负载均衡问题

  负载均衡问题历来属于难题 由于客观上存在大量的共享资源 各种不同的共享资源情况复杂 并不能简单地将负载平均一下就摊到各个CPU核上去执行 那么用什么来保障负载平衡呢?如何去达到资源有效利用的终极目标需求呢?

  要保障目标需求的实现 其核心就是公平 正义问题 当然 对公平 正义这两个词的理解 现实情况中存在多种解释 这里采用更广义的解释 凡是可从正确的前提通过逻辑推导出来的定义 均视做正义 例如自然科学中的所有公理 定理及推论 均属于正义 在人类社会中 一些公认的道德标准 法律条文 也属于正义

  以动态偷取的调度算法为例 一般都是设计成每个线程一次偷取一个任务 实际上已经隐含地使用公平正义对偷取的数量做了限制 倘若不如此 任由一个线程一次将队列中所有任务都偷走 那么其他线程就偷不到任务了 这样就会出现负载不均衡 无法有效地利用多个处理器的计算资源

  再比如基于抢夺的内存分配算法 每个线程使用了共享内存后 它并不返回给它的属主线程 而是据为己有 这样时间一长 必然有某些线程占有了过多的内存资源 为了解决这个问题 解决方法就是每次抢完后 都需要判断一下自己占有的内存数量是否过多 过多的话则主动将一部分内存归返给公共内存池 从而实现负载均衡 可以看出基于抢夺的内存分配算法中也使用了公平 正义以确保负载均衡

  公平 正义问题可以说是算法之本 全局效率之源 为什么这么说呢?不妨看看现在美国发生的次贷危机 其根本原因是由于银行将贷款发放给无偿返能力的客户所造成的 从公平 正义的角度看 实质上是银行为了自身的贪心 自私 违反了基本的公平 正义问题 次贷危机的后果 无需我多言 大家均已看到 可见 没有公平正义 贪心 自私等先天方法策略必然会被滥用 其结果必然导致全局的不优

  由此可见 公平 正义是保障贪心 自私 偷 抢等先天方法策略得以正确使用的前提条件 本层名称中的本质 根源 保障 说的就是公平 正义

  需要提及的是 在人类社会的现实中 由于人是有情感的 公平正义在执行中总会存在偏差 这时就需要仁爱来弥补其不足 这也许是儒家思想能够流传两千多年而不灭的根本原因 当然 如果把仁爱思想也看作是道德标准的一部分的话 按照前面给出的正义的定义 其实仁爱也属于正义的范畴

  第四层  算法 实现 执行层

  通过上面三个层面的阐述 可以知道先天的方法策略是实现优化的基本手段 资源有效利用则是实现优化的目标需求及评价条件 公平 正义则是保障先天的方法策略合理使用的前提条件 是不是有了这几样东西就可以做到达成优化的最终结果呢?

  答案是 非也 如果上面那几个东西就可以达成优化的结果 那么从街上随便抓个人恐怕都可以写出很好的多核程序来了 还要程序员干嘛 还要去学习多核编程的各种模式 技巧及算法干嘛?

  就像学了牛顿力学一样 有些人可以设计出摩天大厦 造出各种机械 有些人却啥也做不了 何也?运用好坏之不同也 要写出好的多核程序 同样牵涉导如何运用上面三层中的基本原理思想方法的问题 而要用好这些基本原理思想 更多的还是要靠程序员自身的知识及能力 最终依赖于算法或程序的具体实现 就像有了道家 儒家 却仍然少不了法家 农家 医家等各个领域的诸子百家

cha138/Article/program/ASP/201311/21742

相关参考

典型的计算机控制系统,采用的四层结构用途是什么?

典型的计算机控制系统,采用的四层结构用途是什么?参考答案:1、直接控制层:是整个控制系统体系结构中的最低层,这一层直接与被控过程相连,完成过程数据采集、装置状态和设备运行状态监测与诊断、闭环和开环控制

知识大全 C#编程的四个技巧(新手必看)

C#编程的四个技巧(新手必看)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  .如果可能尽量使用

甲、乙、丙、丁分别购买了某住宅楼(共四层)的一至四层住宅,并各自办理了房产证。下列哪一说法是不正确的

甲、乙、丙、丁分别购买了某住宅楼(共四层)的一至四层住宅,并各自办理了房产证。下列哪一说法是不正确的?A、甲、乙、丙、丁有权分享该住宅楼的外墙广告收人B、——层住户甲对三、四层间楼板不享有民事权利C、

知识大全 紧凑的JVM多核语言

Loop:紧凑的JVM多核语言  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!    作为一种紧凑简

知识大全 JAVA高级:多核线程-volatile原理与技巧[1]

JAVA高级:多核线程-volatile原理与技巧[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 JAVA高级:多核线程-volatile原理与技巧[2]

JAVA高级:多核线程-volatile原理与技巧[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 JAVA高级:多核线程-volatile原理与技巧[4]

JAVA高级:多核线程-volatile原理与技巧[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 JAVA高级:多核线程-volatile原理与技巧[3]

JAVA高级:多核线程-volatile原理与技巧[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 多核线程-volatile原理与技巧

  为什么使用volatile比同步代价更低?  同步的代价主要由其覆蓋范围决定如果可以降低同步的覆蓋范围则可以大幅提升程序性能  而volatile的覆蓋范围仅仅变量级别的因此它的同步代价很低  v

一个嗜酒如命的酒鬼总结自己喝酒的心得:酒好喝,喝好酒,好喝酒,喝酒好。这样三个字,表达了四层意思。这说明__

一个嗜酒如命的酒鬼总结自己喝酒的心得:酒好喝,喝好酒,好喝酒,喝酒好。这样三个字,表达了四层意思。这说明_____。A、主次矛盾在一定条件下相互转化B、事物在数量上的变化往往是不显著的C、有了质变并不