[Csdn.net专稿]早在几年前,Herb sutter就发表《免费午餐已经结束,软件历史性的向并发靠拢》,引起了业内很大的反应。这几年来Erlang这种老古董也因为多核的发展而逐渐热起来,网上关于普通程序员是否需要掌握多核编程技术也有很多争论,不论大家观点是否正确,至少多核相关技术引起了开发人员的注意。而最近3月25日在北京举行的2011年英特尔软件大会也再次聚焦并行和应用优化,并获得了众多业内并行编程的行业专家、开发经理和高手的关注。

并行编程渐受关注

接受采访在谈到传统编程模式面临的挑战时,英特尔软件开发产品部全球销售与业务开发总监Phil De La Zerda(佘飞)认为,“如今的企业级应用从整个IT环境和架构来看都到了需要做一些改变的时候,过去靠提高主频来提高运算性能的方式已经受到了(难以逾越)的问题,从物理学的角度来看,散热(发热量太大且难以驱散)、功耗(太高)、尺寸以及泄露问题,主频速度的提升已经越来越困难。”

从他的观察来看,在5年前做并行计算往往还是一些很高端的客户,主要集中在高性能计算领域,例如天气预报、能源地质勘探、科研计算包括金融公司开发金融衍生品的时候做的投资分析,“当时主要是看到这些客户在做并行计算。但这几年来越来越多的大众主流应用,比如做图像处理、网络游戏也开始采用并行编程等。总体来看,每个软件行业的应用领域里,前十位的应用开发商都在做并行计算。此外,比较明显的就是很多做网络游戏的开发商在使用并行计算方法后,在用户体验、性能提升或者计算资源的提升上都有了更好的反馈。”

在谈到近年来在全球各推广多核编程中最令人兴奋的事情时,佘飞告诉CSDN记者:

越来越多的开发者把英特尔并行开发工具当做标准的开发平台,并在企业内部做推广。而且,业界(当然英特尔也是积极推动者之一)也举办了很多针对软件开发人员的大会或技术研讨会,无论在中国、日本还是印度等等国家,来参加这些技术研讨会的听众大多都是年轻的受众,这些技术人员非常乐意去学习新的并行软件开发技术。从整个产业来看,毫无疑问,跟多的人开始关注并实践起来了。

在如何利用业界提供的并行编程工具方面,佘飞认为首先开发人员要形成一套系统的方法论,包括接受适当的培训。另一方面,要借助于适合的软件工具去入手并行编程,他认为,如果传统的开发者凭着经验和现有知识自己动手来做的话,往往花的功夫会比较大,可能走的路也不定是对的。但是如果通过这些并行开发工具,则能提供一整套的环境来提供恰当的帮助,无论是做编码、测试还是做性能调优的过程中。

英特尔公司软件开发产品部全球销售与业务开发总监 Phil De La Zerda(佘飞)

佘飞提到,去年英特尔发布了Parallel Studio XE2011,新增加了一个英特尔Parallel Advisor组件,能帮助很多没有丰富开发经验的人给他们做一些建议,比如如何在软件程序里哪个部分适合加入并行,如何去加。另外一方面可以帮助开发者做一些引入并行算法后具体性能参数对比预测,这些都可以帮助开发者避免一些弯路。

而根据在之前一份面向业界45名各公司程序员/开发经理、战略师关于“什么是实施并行编程的最大障碍”的挑战中:

与会者给出的5大挑战分别是遗留代码(legacy code)、教育(education)、工具(tools)、对众核趋势的恐惧(fear of many cores)以及可维护性(maintainability)。

对此,佘飞着重谈到了传统代码如何实行并行化面临的挑战,他认为最大的挑战来自于架构(传统拓扑架构的变化给软件开发人员带来了颠覆性的挑战),过去基于文本的顺序编程模式已经不再适用,在并行化的过程中确实需要花相当的功夫去改写原来的代码,但从另一个角度来看,业界也通过工具提供了一些简便的方法。重要的是,并不是所有原有的代码全部都要重写,例如,英特尔会首先帮助用户分析哪些代码是需要做改写的,哪些需要做并行。此外,英特尔也提供了其他的方法,可以利用第三方英特尔的库,或者C/C++语言来编写。此外,在算法咨询和工具的免费试用、技术交流大会、支持社区交流上业界也都提供了多种方式。

当然,就并行编译工具的需求上,有业界观点认为:

从成本上来讲,如果能通过一些优秀的编译器(例如Intel的ICC)自动并行化一些遗留代码无疑是最省钱的,但是这种方法最大的缺陷就在于像Intel ICC这种自动型编译器能自动并行化的代码非常少,从而导致它能提供的性能优化非常有限,而且就算是真正能获得speedup的代码也有很多约束条件(例如loop的循环之间没有dependence,并且该loop应该是一个程序热点)。所以目前的现状就是大量的遗留代码并不能有效的被并行化,从商业的角度上来讲,如果能有一种解决方案能在短时间内快速可靠的通过实施并行化让遗留代码在多核平台上获得10%~30%的性能提升,那么它就已经能为公司节省大量成本了。

其实,就开发者如何入手并行编程方面,CSDN此前就对SD2.0大会多核编程专家周伟明进行了采访,周伟明表示:

对于普通程序员来说,掌握多核编程技术并不是一件难事,只要有多线程编程基础的程序员都可以掌握。当然,就像C++标准模板库STL一样,掌握其基本原理和使用它对每个程序员都不是难事,但是要自己去实现它并不是每个程序员能做到的。多核编程技术也一样,普通程序员掌握其基本原理和使用它不是难事。

并行编程会成为主流趋势吗?

佘飞认为,未来并行编程会走向“神坛”,并成为开发人员职业生涯的核心竞争力之一,就像多年前的(Java)一样。当时,只要你拥有Java编程技能很快就能得到一份具有竞争力的工作。他认为未来并行编程人员会出现像Java一样类似的情形。

事实上,在之前记者对Erlang之父的采访中,他也认为并行计算将成为绝对主流,而不仅仅是一个阶段并且很快对并行编程感兴趣的人将(又一次)变成高性能社区的一员。这个观点在2011年英特尔软件大会上CSDN记者与英特尔首席工程师Peng Tu的谈话中获得了赞同,但他认为并行编程目前存在的问题是在标准语言和打造(统一的)开发平台方面仍面临挑战。

从另一个角度来看,并行编程给业界和开发者带来了许许多多新的技术难题,现阶段想要高效利用这些多核平台以获得更好的性能,就必须对计算机的硬件有较深入的理解,而广大程序员却更喜欢能有一些更加便利的编程模型(也许是一门新语言Erlang?也许是新的编程模型)来简单高效地进行并行编程。有人就认为,这也许是新的软件危机的开端,前路满是荆棘。但是,程序员从来都是迎难而上的,只要有问题,就会有机会。

并行时代,开发者该如何应对新的挑战呢?(付江)

并行编程走下神坛 将成为开发者基本技能?相关推荐

  1. 用 Hadoop 进行分布式并行编程, 第 1 部分 基本概念与安装部署

    Hadoop 简介 Hadoop 是一个开源的可运行于大规模集群上的分布式并行编程框架,由于分布式存储对于分布式编程来说是必不可少的,这个框架中还包含了一个分布式文件系统 HDFS( Hadoop D ...

  2. 并行:并行编程的基础概述

    并行编程的目的 并行编程主要有三个目的:性能(performance),通用性(versatility),生产率(productivity).简称PVP 注意区分并行和并发的概念: 并行:一个任务可以 ...

  3. FPGA并行编程-以HLS实现数字信号处理

    国内鲜有介绍HLS的书, 我们希望通过翻译 Parallel Programming for FPGAs 这本书, 让更多的人来了解HLS和FPGA开发. 正文 第零章前言 第一章 简介 第二章 FI ...

  4. 《FPGA并行编程》读书笔记专栏启动说明

    <FPGA并行编程>读书笔记专栏启动说明 1. <FPGA并行编程>内容简介 2. 专栏内容简介 3. 开启专栏目的 4. 专栏内容安排 5. 专栏时间安排 6. 相关资料下载 ...

  5. 摩尔定律失效“带来”并行编程

    并发和并行 在真正开始聊本文的主题之前,我们先来回顾下两个老生常谈的概念:并发和并行. 并发:是指多个线程任务在同一个CPU上快速地轮换执行,由于切换的速度非常快,给人的感觉就是这些线程任务是在同时进 ...

  6. 浅谈并行编程中的任务分解模式

     并行编程使用线程来使得多个操作能够同时运行.并行编程主要包括应用程序中线程设计,开发和部署以及线程间相互协调和各自的操作. 在下文中我们将讨论怎样分割适合线程化大小的编程任务来多任务化一个应用程 ...

  7. 从头开始进行CUDA编程:Numba并行编程的基本概念

    作者 | CarlosCosta 编辑 | 极市平台 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[模型部署]技术交流群 后台回复[ ...

  8. 多核心CPU并行编程中为什么要使用内存屏障 memory barriers / 内存栅栏 memory fence

    文章目录 前言 现代Intel® CPU架构 指令集 CISC, RICS ... Intel各个时期的CPU微架构(microarchitecture)特点 P6 Family Microarchi ...

  9. C++ AMP异构并行编程解析

    C++ AMP异构并行编程解析 原文发表于<程序员>杂志2012年第4期,略有改动. 文 / 陈冠诚 微软在今年2月份的GoingNative大会上正式对外发布了C++ AMP(Accel ...

最新文章

  1. 如何做好网络推广浅析新手对网站SEO内链该如何优化?
  2. 百万数据报表导出:需求以及思路分析
  3. matlab出错及解决办法,Linux下使用Matlab符号函数出错的解决办法
  4. qq编辑资料html,腾讯限置qq日记代码HTML在线编辑器: http://www.wyzxsx.com/editor.asp
  5. NumPy Cookbook 带注释源码 三、掌握 NumPy 常用函数
  6. 如何通过yum安装mysql数据库_CentOS 7通过yum安装MySQL数据库例子
  7. 1.根据MAC地址抓包
  8. ASP.NET中的回调技术(CallBack)
  9. 北斗导航 | 基于奇偶矢量法的RAIM之SSE探索(附奇偶矢量法源代码)
  10. 企业运用通兑吧数字会员卡进行营销的优势
  11. 在 ubuntu 的桌面上创建快捷方式
  12. vue移动端复杂表格表头,固定表头与固定第一列
  13. uniapp 无法获取动态dom节点,解决方案
  14. mybatis case when
  15. sox处理mp3_音频处理利器--SoX
  16. 对现有计算机应用的建议,对计算机课程的建议
  17. 我的世界服务器连接显示不见了,我的世界服务器为什么进去就卡,然后几十秒后显示“连接已丢失”怎么? 爱问知识人...
  18. NEXYS4_DDR迪芝伦XC7A100TCSG324-1型,VGA接口显示彩条
  19. FFmpeg[15] - 从官网下载FFmpeg时的坑,你有遇到吗?
  20. 华为鸿蒙,希望是务实的操作系统

热门文章

  1. 信息学奥赛一本通 1223:An Easy Problem | OpenJudge NOI 4.6 1455:An Easy Problem
  2. 信息学奥赛一本通(1202:Pell数列)
  3. 糖果(信息学奥赛一本通-T1299)
  4. 信息学奥赛C++语言:输出学生序号与成绩
  5. 信息学奥赛C++语言: 计算两个数的最小公倍数
  6. java项目 导出_Java项目的导入和导出
  7. jq fileupload 设置最大文件大小5m_如何在 Linux 服务器上设置 ulimit 和文件描述符数限制 | Linux 中国...
  8. 更换mysql_3分钟学会mysql数据库的逻辑架构原理
  9. python输入end退出循环_4.学习python获取用户输入和while循环及if判断语句
  10. 【tensorflow】张量tensor--数据容器(把它想象成一个数字的水桶)