.NET4.0并行计算技术基础(1)

浅谈.Net下的多线程和并行计算(全集) 作为一个ASP.NET开发人员,在之前的开发经历中接触多线程编程的机会并不是很多,但是随着.NET 4.0的发布临近,我越来越感受到未来的1-2年中并行计算将会有很大的应用。于是决定通过写日志的方式来总结一下.NET 3.5下的多线程编程进而引入.NET 4.0提供的新的并行库以及新的并行编程模式和编程的思维方式。 立即下载
开篇语:
 
   这是一个系列文章,系统介绍.NET 4.0中引入的并行扩展(包括任务并行库TPL和PLINQ)开发技术。
   本系列文章中所有示例代码在VS2010 BETA1+Windows 7 RC下调试通过。所有示例源码将在本系列文章贴完以后,统一压缩上传到优快云下载频道。
 
   本系列文章的主要内容来自是本人将在电子工业出版社出版的新作中的一章,出于技术共享与交流目的发布,期望业界对并行计算有丰富经验的工程师指出疏漏,也希望网友对提出宝贵建议。
 
   作者金旭亮拥有本系列文章所有版权,未经本人许可,不允许将此序列文章及相关示例用于商业目的,除此之外,在网络上出于知识共享目的的复制转贴不受限制。
 
  反馈方式:
  
   在我的本技术博客上直接回贴 或发邮件至:
 
 
                           2009.9.9
===================================================
随着多核 CPU 的普及和互联网的迅速发展,计算已经进入并行的时代,这种并行计算有两种主要的形式,一种着眼于充分挖掘单台计算机的硬件潜力,通常以多线程协作的方式完成指定的工作任务;另一种着眼于利用互联的计算机所共同拥有的计算能力,将一个工作任务分发到多台计算机上同时处理,通过多台计算机的相互协作完成单台计算机所无法完成的工作任务。
         第一种计算形式在过去一直都是使用线程来实现的,而在 .NET 4.0 中,又在线程的基础上向软件工程师提供了一个“并行扩展( Parallel Extensions )”,从一个更高的抽象层次简化多线程应用程序的开发,这也是本章要介绍的主要内容。
         第二种计算形式依赖于多台计算机的相互协作,本质上是一种分布式的软件系统,在 .NET 平台上, WCF 是开发这类型软件系统的强大工具。本书第 9 篇的相关章节将介绍 WCF 技术。
19.1 并行计算概述
 
人们在谈论到计算机技术的飞速进步时,经常引用美国著名科幻小说作家 Bruce Sterling[1] 的一段名言:
 
“ I used to think that cyberspace was fifty years away. What I thought was fifty years away, was only ten years away. And what I thought was ten years away... it was already here. I just wasn't aware of it yet. ”
 
    译为中文 , 这段话的大致含义是 :
    “ 我曾经认为网际空间 ( cyberspace , 指互联网这个虚拟的空间 ) 至少要有 50 年才会影响到我们。那些我认为要50年之后才会影响我们的东西,往往只需要10年就成为现实……。而那些我认为10年之后才会影响我们的东西,现在已经在那儿摆着了,而我甚至还没有意识到它已成为现实! ”
         并行计算就是这样的一个例子,它静悄悄地走来,却于静寞中引发了一场软件技术的变革,当人们开始意识到并行计算对日常生活的影响时,才突然发现,原来并行计算已无所不在。


[1] http://en.wikipedia.org/wiki/Bruce_Sterling 有对Bruce Sterling本人及其作品的介绍。
 

19.1.1 并行计算是计算的未来

         从集成电路渗透到计算机领域开始,CPU的计算能力一直在持续地增长。其中有一个著名的“摩尔定律”描述了这一发展趋势。
趣闻轶事:
“摩尔定律”的提出者是Intel公司的创始人之一Gordon E. Moore,1965年他发表了一篇论文,在论文中他针对集成电路技术说过这么一段话:
       “使用最低成本设计出来的元件其复杂性每年大约增加一倍。可以确信,即便不是有所加快,在短期内这一增长率也会继续保持。从长远的观点来看,这一增长率应该会略有变动。尽管没有充分的理由来证明,(但我认为)这一增长率至少在未来十年内几乎维持为一个常数。这意味着到1975年时,以最小的成本制作出来的单个集成电路将拥有65000个元件,而我相信这么庞大的电路将可以被集成到一块小小的芯片中”。
       这就是“摩尔定律”的原型。1975年,Gordon E. Moore将修改了“定律”,将其中的“每年”改为“每两年”。而他的另外一名同事,在“摩尔定律”的基础上又提出了一个“修订版”的“摩尔定律”,新版定律指出,每18个月,集成电路的性能将提升一倍。尽管摩尔本人坚持:“我从没说过集成电路中的元件数量每18个月增加一倍”,但他的声音很快被淹没了,“18个月”作为集成电路的“发展周期”,开始以“摩尔定律”广为人知。
       从1965年至今,虽然期间有许多人都曾说:摩尔定律已不再有效,但事实却证明这一定律与集成电路技术发展的实际情况相当吻合。到底摩尔定律能用多少年,现在谁也无法下这个结论,还是只能交给时间。但不管怎样,从“摩尔定律”上面人们还是能看到计算机科学家那种深邃的洞察力和让人佩服的预见能力。
对于传统的(非并行)应用程序,往往会随着硬件运行速度的提升而运行得更快。举个例子,许多早期的跑在286/386/486上的一些动作类和射击类游戏,如果不作修改地运行于现在的高性能CPU上,其运行速度可能会快到没有人再能玩这些游戏了。这就是计算机硬件技术的发展给软件所带来的直接好处:代码不用或仅略加修改,程序就拥有更快的运行速度。
         然而,这种免费的午餐是无法永远提供的,其原因在于CPU速度无法无限提升。因为现有的CPU技术需要受到物理法则的限制:
    当晶体管“瘦身”到很小时,由于控制电流的晶体管门(transistor gate) 以及氧化栅极(gate oxide)距离将非常贴近,因此,将发生电子漂移现象(electrons drift)。如果发生这种情况,晶体管会失去可靠性,原因是晶体管在这种条件下无法有效控制电子的运动,从而难于让其能维持稳定的“1”或“0”状态。
         为了能突破这一物理限制而继续提升CPU的计算能力,CPU走向了另一个条路——多核,将多个CPU处理核心集成为单一的整体,称其为“多核CPU”。这样一下,虽然每个CPU处理核心的主频都没有提高,但通过将计算任务合理地分配在多个CPU处理核心上运行,我们同样能达到加快CPU处理性能的目的。
         双核CPU是第一个得到广泛应用的产品,当前几乎所有的新购置的个人电脑都配置了双核CPU,而Intel宣布2009年将为台式机和笔记本电脑生产四核CPU(新四核CPU基于一个代号为“Nehalem”的微架构)。
简言之:
    如果不对CPU技术作颠覆性的变革,那么,基于现有技术架构的CPU已基本走完了“通过提升主频而获取更高性能”之路,必须走向多核之路,其特点是:
         (1)每个“核”的主频都不算高
         (2)在设计CPU架构时,针对并行的工作负载进行了专门优化。
         CPU的“多核”发展趋势对软件技术有重大影响。
    因为CPU的多核化要想真正地发挥效益,必须依赖于精心设计的软件,这种软件本身必须具备将工作任务划分为多个可并行执行的子任务的能力,在操作系统(或特定的软件运行平台)的支持下,将这些任务分配给计算机所配备的多个CPU处理核心并发执行,并且能够在这些子任务运行结束后,将这些结果组合起来,得到最终的处理结果。这就是拥有“并行计算”能力的软件系统。
         开发“并行计算”软件系统,对软件工程师提出了新的挑战,因为开发并行程序要比串行程序难得多。软件工程师必须转换思路,在开发新的软件系统时,从一开始就考虑到并行计算的特点,并对此进行特定的设计,才能充分利用现有硬件基础设施的强大处理能力,开发出高性能与高可靠性的软件系统,这是一个软件技术发展的必然趋势,也是任何一名软件工程师们都必须认真面对的挑战!
19.1.2 并行计算的基本原理
并行计算的基本思想并不复杂,那就是将一个复杂的工作任务进行分解,然后,在多核CPU上同时执行这些分解后的子任务。
 首先,我们先谈谈多核CPU中的“核”。
1 CPU与“核”
         现在人们常说:最近我买了一台双核笔记本电脑。这里面的“核(core)”指代什么,它与CPU是什么关系?还有,人们还常说到“处理器(processor)”,貌似这三个都是指同样的东西。
         下面我们就来讨论一下这些概念的含义,弄清楚它们到底指代什么。
         学过物理的人都知道,现代计算机是构造于集成电路技术基础之上,任何一个集成电路,最底层的也是最小的工作单元是一个个的晶体管,多个晶体管构成逻辑模块(logic block),一组逻辑模块进而构成功能单元(functional unit),例如可完成基本算术运算功能的ALU(Arithmetic Logic Unit,算术逻辑单元)就是功能单元的一个例子。
         多个功能单元组合起来,就构成了微处理器(micro-processor),微处理器最广为人知的名字就是CPU(Central Processing Unit,中央处理单元)。
         最终生产出来的微处理器实际上是一块物理基片(die),经过封装之后就叫作处理器(processor)。
         那么什么是“核(core)”呢?
         核是微处理器中所有可用的功能单元的集合。
         那些直接参与指令执行的功能单元的集合称为“执行核(execution core)”。
         很明显,每个微处理器必定要有一个执行核,否则,它无法执行任何指令,也就不能称其为微处理器了。
现在就可很清楚“多核”的含义了。所谓多核,其实就是在同一块物理基片上集成两个以上的“执行核”,从而使处理器具备并行执行指令的能力。多核CPU,就是指拥有多个执行核的微处理器,基片封装好之后,就称为“多核处理器”。
         再区分一下另两个概念:多处理器与多核处理器系统。
         如前所述,多核处理器系统是指计算机中的处理器中包容了多个执行核,通常这种计算机只包容有一个多核处理器,否则,此系统应归入“多处理器”系统。
         多处理器系统是指由多个处理器构成的计算机系统,每个处理器自身可以是单核或多核的。
         简单地说:多处理器系统可以看作是一个主板上具有多个处理器插槽的计算机系统。
         从应用软件开发者角度来看,多处理器与多核处理器系统其实是一样的,可以统一地将其看成是计算机中拥有多个可供使用的CPU。
         下面,我们再来区分一下另外两个很容易弄混的概念——“并发”与“并行”。
2 并发与并行
         “并行(Parallelism) ”是指多个工作任务在拥有多核CPU(或多个单核CPU)的多处理器计算机上同时执行。在这些工作任务运行的过程中,除非有任务提前结束或者延迟启动,否则,在任一时间点总有两个以上的工作任务同时运行。
    简单地说: 只要是“同时”运行的,就可以称之为是“并行”的。
    图 19‑1 展示了并行执行的三个工作任务在三个处理器上同时运行的情形,图中 黑色的长条表示任务的执行过程。
 
“并发(Concurrent)”,指“宏观”上计算机可以同时执行多个不相关的工作任务(是“并行”的),但在“微观”角度来看,这些工作任务并不是始终都在运行,每个工作任务都呈现出“走走停停”这种相互交替的状态。
         这里的“宏观”,是指从应用程序开发者层次上看的,时间尺度较大,而“微观”则是指从操作系统的线程管理角度和计算机硬件工程师层次上看的,时间尺度很小。
         图 19‑2展示了3个工作任务在单个处理器上交替执行的情形。
 
图 19‑2 中,可以看到通过轮流使用单个处理器,尽管在任何时刻都只有一个工作任务在运行,但在一个比较长的时间间隔内,所有的工作任务都在“并行”运行中。由此可见, “并发”的好处之一就是使有限的处理器资源可以“并行”运行超过处理器个数的多个工作任务。 正是由于“并发”有这样的好处,所以在操作系统级别,不管计算机本身是单核系统还是多核系统,都是采用微观上的“并发”来实现宏观上的“并行”,绝不允许一个工作任务长时间地独占某个处理器直到其运行结束。
         再详细解释一下如何利用“并发”实现“并行”。
 
    在单核计算机系统中,操作系统通过“微观”上让每个线程分时使用处理器实现“宏观”上工作任务的“并发”执行(因为工作任务具体是由线程负责完成的),而在多核计算机系统中,尽管在物理架构上直接支持“并行”,允许同时运行多个线程,但由于大多数情况下负责执行工作任务的线程数往往大于可获取的处理器个数,所以,操作系统仍是使用同样的分时调度策略为线程分配处理器。这时,同一个线程有可能在不同的时间段内在不同的处理器上运行。图 19‑3展示了属于同一工作任务的多个线程在4个处理器上“跳越”执行的情形。
理解“并行”与“并发”的区别,是我们开发 “并行程序”的第一步。
分布并行计算技术(SMP计算机) 介绍了分布并行计算技术(SMP计算机)的一些基础知识 立即下载

相关推荐

并行计算技术

详细介绍了并行计算方面的相关知识,相当于这方面内容的总结与扩充吧。非常好的资料。

并行计算及并行算法

一、并行计算   简单地说,并行计算就是在并行计算机上所做的计算。从普通意义上讲,它和常说的高性能计算、超级计算等是同义词。并行计算的初衷是为了努力仿真自然世界中一个序列中含有众多同时发生的、复杂且相关事件的事务状态。   为了利用并行计算求解一个计算问题,通常基于以下考虑:1.将计算任务分解成多个子任务,有助于同时解决;2.在同一时间,由不同的执行部件可同时执行多个子任务;3.多计算资源下解...

郑斑 5万+

.NET Parallel 并行计算 多线程,高并发

Parallel Programming with .NET 4 Samples

并行计算(一)——并行计算机系统及结构模型

并行计算机系统及结构模型

弄鹊 9645

Halcon实战:5分钟搞定工业零件中的圆孔检测(附完整代码)

本文详细解析了如何利用Halcon的hough_circle算法在5分钟内高效完成工业零件中的圆孔检测。通过优化图像采集、智能预处理和参数化边缘检测,解决了金属反光、油污干扰等工业场景常见问题,并提供了完整的代码示例和实战案例,显著提升检测精度和效率。

weixin_29061997的博客 239

用OpenPose进行单个或多个人体姿态估计

在计算机视觉中,人体姿态估计(关键点检测)是一个很常见的问题,在体育健身、动作采集、3D试衣、舆情监测等领域具有广阔的应用前景,本文要使用的检测方法就是基于OpenPose的人体姿态估计方法。 一、OpenPose简介 OpenPose人体姿态识别项目是美国卡耐基梅隆大学(CMU)基于卷积神经网络(CNN)和监督学习(SL)并以Caffe为框架开发的开源库。可以实现人体动作、面部表情、手指运动等姿...

weixin_42709563的博客 8404

什么是并行计算?

本文主要介绍并行计算相关概念、并行计算条件、层次、并行计算机体系结构、并行程序设计基础等。

qq_27815483的博客 2882

【新华三】DHCP+TFTP+ZTP自动开局实战

设备运行ZTP功能,可以自动获取并自动加载开局文件,实现设备的免现场配置和部署,从而降低人力成本,提升部署效率。使用TFTP服务器工具进行文件的上传和下载,网上很多TFTP server软件,大家可以自行下载。3CDaemon等,可以根据使用自取所需。大家应该都了解ZTP,但是目前发现除了控制器之外仅使用ZTP开局的兄弟并不是很多,因此分享此过程方便大家批量开局,留出更多时间学习更多技术。电脑打开DHCP服务器,TFTP服务器,并通过网线连接到设备的管理口,若设备较多可以通过带外交换机等进行连接,

五大连池的镜子 4983

人工智能的并行计算:实现高效的数据并行处理

1.背景介绍 人工智能(Artificial Intelligence, AI)是一门研究如何让计算机模拟人类智能行为的学科。随着数据规模的不断增长,以及计算机硬件的不断发展,人工智能的计算需求也随之增长。为了满足这些需求,我们需要开发高效的计算方法来处理大量数据。 并行计算(Parallel Computing)是一种计算机技术,它通过同时运行多个处理器来解决问题,从而提高计算效率。在人工智...

AI天才研究院 2492

【PostgreSQL教程】PostgreSQL 特别篇之 语言接口Java

本篇教程的Java程序中开始使用PostgreSQL之前,需要确保在计算机上设置了PostgreSQL JDBC和Java。您可以检查Java教程以在计算机上安装Java。现在让本篇教程检查如何设置PostgreSQL JDBC驱动程序。

No8g攻城狮的博客 1765

DeepSeek R1-32B医疗大模型的完整微调实战分析(全码版)

【代码】DeepSeek R1-32B医疗大模型的完整微调实战指南(全码版)

AllenLV的博客 5103

并行计算:提升效率与性能的关键技术

并行计算是一种通过同时使用多个计算资源来解决问题的技术,能够显著提升效率与性能。在信息技术迅猛发展的今天,应用并行计算能够加速数据处理、提高任务完成速度,广泛应用于科学研究、人工智能和大数据分析等领域,是推动现代计算能力提高的关键技术。

tiangang2024的博客 1942

C++(Qt)软件调试---gdb调试入门用法(12)

学习GDB可以帮助程序员更好地调试程序,找到程序中的错误和问题,提高程序的质量和稳定性。 在开发大型软件时,程序中可能存在许多错误和问题,这些问题可能会导致程序崩溃或者出现不可预期的行为。 使用GDB可以帮助程序员更快地找到这些问题,并且提供一些调试工具来帮助程序员更好地理解程序的行为。

mahuifa的博客 5556

.NET 4.0 并行计算技术基础(1)

.NET 4.0技术系列之 .NET并行计算技术基础(1) 开篇语: 这是一个系列文章,系统介绍.NET 4.0中引入的并行扩展(包括任务并行库TPL和PLINQ)开发技术。 本系列文章中所有示例代码在VS2010 BETA1+Windows 7 RC下调试通过。 本系列文章的主要内容来自是本人将在电子工业出版社...

weixin_33863087的博客 213

Doris磁盘空间管理(生命周期管理、清理磁盘空间方法)

在进行数据仓库开发时,比较头疼的是历史数据不删除,磁盘空间不断增长,如果磁盘空间不足时,spark调度任务写入时就会报错。

大模型大数据攻城狮的专栏 1719

SAPGUI excel 导出时遇到的运行时错误:STRING_SIZE_TOO_LARGE

当报表导出需求远超单一 XLSX 文件的物理承载力时,与其在 SAPGUI 中硬拼 2 GB 限制,不如把分页、过滤、流式写入作为设计前提。掌握 ABAP2XLSX 或 CSV + Power Query 等工具链,既能满足审计合规,又能让应用服务器远离的噩梦。祝你在下一次导出海量数据时,既高效又优雅。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 642

.NET 4.0 并行计算技术基础(1) :理解“并行”与“并发”的区别

图 19‑2展示了3个工作任务在单个处理器上交替执行的情形。      图 19‑2中,可以看到通过轮流使用单个处理器,尽管在任何时刻都只有一个工作任务在运行,但在一个比较长的时间间隔内,所有的工作任务都在“并行”运行中。由此可见,“并发”的好处之一就是使有限的处理器资源可以“并行”运行超过处理器个数的多个工作任务。正是由于“并发”有这样的好处,所以在操作系统级别,不管计算机本身是单核系统还...

weixin_30834019的博客 153

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

回头再说 .net framework从1.0说到4.0

从2002年的1.0到2010年的4.0,这八年时间,微软硬是把一个初出茅庐的“小鲜肉”打磨成了中年油腻大叔(褒义),但咱得说,这大叔肚子里是真有货。所以,回头再看 .NET Framework 的这段历史,它不只是一个老旧的框架,更是一代开发者共同的技术记忆。这段代码用今天的眼光看平平无奇,但在当时,这种“在C#代码里直接写类似SQL的查询语法”的感觉,简直像打开了新世界的大门。.NET 1.0的出现,直接让Web开发进入了“事件驱动”模式,拖个按钮,双击写代码,完事。进去,取出来的时候忘了强转,直接。

oRxF477FJ的博客 398

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

.NET4.0并行计算技术基础(3)

.NET4.0并行计算技术基础(3) 这是一个系列讲座,前面两讲的链接为:  .NET 4.0 并行计算技术基础(1) .NET 4.0 并行计算技术基础(2)   在前面两讲中,基本上介绍完了并行计算基础理论与相关概念,学习不是目的,应用才是。因此,本讲将介绍一个并行计算的例子,并对.NET 4.0的并行扩展作一个总体的介绍。 ==========

bitfan(数字世界一凡人)的专栏 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

.NET4.0并行计算技术基础(10)

 今天贴出TPL的最后一部分内容,后面的小节将转去介绍PLINQ。                                            金旭亮                                       2009.10.17============================================ .NET4.0并行计算技

bitfan(数字世界一凡人)的专栏 4186
上一篇: 墙脆脆?!
下一篇: .NET 4.0并行计算基础系列文章发布
bitfan
博客等级 码龄26年 4298粉丝 243原创
评论 20
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值