Visual C++ 2010 新特性:并行计算

来源:互联网 发布:怎么用手机申请淘宝店 编辑:程序博客网 时间:2024/03/29 14:37

  【IT168专稿】功能, 永远是程序员要考虑的问题。 在单核时代, 如增加服务器、内存, 我们称这个过程为享用功能免费大餐。 天下没有免费的午餐, 实际上, 曾经有了新的解决方案并行计算。 并行计算就像是一道饕餮大餐而被人津津乐道, 在本文中我们以烹饪为类比, 经过对功能免费大餐的分析, 运用VisualStudioC++2010这把利器, 运用并行编程模型大块朵颐的进行并行开发。   功能免费大餐曾经结束  经过提升CPU的计算才干, 但在实际情况中, 软件都有办法迅速吞噬。 计算机硬件毕竟受物理极限的约束, 处置器主频的提升曾经遇到了瓶颈。 业界曾经不能提供指数级增长的更快的处置器, 而只能选择提供指数级增长的更多的处置器。 多核将引领软件研发发作基础性的变化。   目前的电脑市场上, 多核计算机的销量远远大于单核计算机, 多核曾经成为了一种主流。 假设把在单核下完成的运用程序拿到一台64核的机器上运行, 你会看就任务管理器显示如下的画面只有1/64的计算才干失掉了应用:  经过下面的示例可以看出, 传统的运用程序再也无法顺其自然地在更高端的硬件设备上取得更高的功能报答, 可以充分发挥硬件设备功能的运用程序是未来软件开发的主流, 作为开发人员, 并行计算曾经成为软件开发的核心趋向之一。 关于程序员来说, 享用免费大餐的日子结束后, 只能亲身下厨烹饪。   亲身下厨遇到了难题  我们都晓得, 有着残缺的生命周期管理, 从编写需求说明书、程序设计说明书, 到编码、调试和功能优化, 以及前期维护等一系列的行为都有其复杂性。 而并行计算是在程序开发原有的复杂性上, 不断是令广大程序员头痛的事情, 现如今我们又有哪些预备了呢。 俗话说的好, 希望这些必备品能为我们的烹饪带来便利。   食材、菜谱和厨具都很重要  2007年, 微软宣布成立并行计算平台组, 努力于简化并行运用程序的开发。 随着VisualStudio2010和.   食材-并发运行时  不论是任务并行、数据并行, 都意味着需求把一个耗时的任务或数据分割成更小的单位。 分割的颗粒度往往是由任务的性质决议的。 假设一个耗时的任务只被粗略分割成四个子任务并发执行, 那么它关于多于四核的机器的扩展性就不够好;即使是在四核的机器上运行, 也无法做到实时动态的负载均衡, 能够发作三个子任务早早完成, 而另一个任务还在一个核上苦苦等待的悲剧性事件。   为了支持细粒度并行, 在VisualC++2010中提供了一套并发编程框架, 支持常用的协同任务调度和硬件资源(CPU和内存)管理。 . 完成了协同任务调度和任务窃取(work-stealing)算法。 任务窃取算法充分应用了细颗粒度并行的优势, 保证空闲的线程依照一定的顺序, 从本地、全局, 甚至是其他线程的任务队列中“偷取”任务执行。 当然, 运用该框架, 可以帮助我们编写可靠、可伸缩且具有照应才干的并行运用程序。   菜谱-编程模型  高笼统级别的、统一的编程模式是简化并行程序开发的一个重要方向。 可将其分解为多个更精细的计算。 在并行模式库中, task_handle包含执行细颗粒度的代码, 用来代表一个任务。 任务句柄(task_handle)非常重要, 因为它们将管理封装的任务函数的生存期。 例如, 将task_handle对象传递给任务组时, 该task_haC++ndle对象必须保持无效, 直就任务组完成为止。 并用可用的计算资源执行任务。 我们可以很容易将自己写的for和for_each循环代码改写为并发执行, 并且不会降低代码的可读性;同样, 关于管道并行, 代理库(AgentsLibrary)提供了基于数据流编程模型的C++模板库, 可以隔离对共享资源的访问, 从而提高可伸缩性。 还是资源分配、内存共享, VisualC++2010为编写并发运用程序都给予了帮助, 经过充分应用多核CPU功能来提升软件的功能, 在VisualStudio2010里包含了两个新的调试器窗口和一个新的功能可视化分析器(Profiler)。 有了这两个调试器窗口, 我们可以在代码同等的笼统层面上也就是任务进行调试, 彼此之间的关系, 调用堆栈等等。 也可以看就任务对应的线程, 并应用一个全局的统一视图来查看所有线程的调用堆栈, VisualStudio2010里的并行功能可视化探查器可以看到运用程序对资源的应用情况, 阻断的缘由, 等等;同时还可以在线程执行的不同时间点上, 跳转到相应的调用堆栈, 去研讨造成线程阻断的根本缘由。 这叫思维定势, 关于突如其来的并行思维, 是需求一段时间才可以接受;其次, 并行运用程序开发相对普通程序要难一些。 改变串行(顺序)编程的这种思维方式并接受这样的编程应战, 关于大多数开发并发运用程序的程序员来说, 确定了功能瓶颈后, NETFramework4这样利器, 有了并行编程模型这样的好食材, 编程就像烹饪, 只有入手才干体会到其中的无穷乐趣, 您还等什么呢?赶快行动起来吧!