上周去上海Intel参加了一个多核程序设计的技术培训。一般来说大公司的专项技术培训都经过精心的设计,体系比较完整,知识点覆盖比较全,强调实验和动手环节。Intel这次的多核技术培训也是这样,从线程基础知识到多线程程序设计的方法模型,从OpenMP到VTune工具,体系还是很完整的,试验环节设计得很到位,PPT很用心。当然因为时间毕竟只有两天,所以不可能非常深入。不过总体上我对这个培训的质量是很满意的,毕竟师傅领进门,修行在个人,深入的东西还要靠个人钻研。
跟很多其他的技术不同,多线程程序设计这样的主题是需要专门突击的,光靠一般性的实践解决不了根本问题。很多人可能写多年程序都搞不清楚这个领域,一碰到多线程就发憷,或者自以为OK,其实写出来的代码问题很多。解决的办法就是专门抽出一段时间来研究这个领域的理论、方法和工具,一次性入门,然后在实践中磨砺。培训的目的也就是让人入这个门。自学当然也可以,其实相关的资料和书籍很多,自学难度也不大。不过自学最大的问题是不知道要学些什么,而且进度不容易把握。有的人学得太慢,毕竟业余时间是有限的,所以很快就疲了,知识体系还没有覆盖完整。有的人学得太快,囫囵吞枣,事后忘光光。更多的人不知道知识体系的全貌,所以用力不均衡,在某些点上花了很大的工夫,学得很深,却对另一些重要问题几乎没有涉及,一条腿长一条腿短,实践中还是难免出问题。
虽然Intel的课程内容我不能透露,不过这个课程体系的整体架构,并非秘密。我想在这里公布出来,对于想自学多核程序设计的朋友是有帮助的。起码你应该知道,学习这个主题要覆盖那些点才算完整。
1. 线程和进程的基本知识。这个不必多说。但是要弄清楚多线程与多核的关系。一般来说,想要用好多核的威力,就要写多线程程序,但是多核上的多线程,与单核上的多线程,目的有所差别,因此技术手段也就有所不同。这个要搞清楚。
2. 流行的Threading API。应该说有两个体系,Win32和pthread。一般来说了解一个就可以了。这其中的重点是一系列的同步机制。以Win32来说(我对pthread几乎一无所知),critical section, mutex, semaphore,event各自的应用场合是应该清楚的。更基本的能力是识别哪些变量需要保护,在什么地方需要保护,如何保护对性能的冲击最小。
3. OpenMP。OpenMP是专门针对共享地址空间的平行计算机提供的并行计算库,在Intel C++和Visual C++ 8.0里通过#pragma支持。用OpenMP,可以不必去写诸如CreateThread之类的线程管理代码,多线程程序写起来比较简洁。而且OpenMP提供了很丰富的指令,对于同步共享变量、合理分配负载等任务,都提供了有效的支持,很值得一学。不过因为这个东西用起来很轻松,稍一疏忽就能酿成愚蠢错误,所以肯定是要经常用才能驾驭好的。一开始用它,犯错误是难免的。培训课上有人说,还不如用粗笨的Win32 API来做,起码精神高度紧张,不会犯愚蠢错误,虽然是玩笑,也不无道理。不过长远来讲,OpenMP的优势是明显的。
4. 多线程程序的设计理论和方法。包括任务的合理划分,动态划分的几个基本模型,性能提升方面的理论和测量标准等等。Intel有人总结出一个多线程程序设计的方法学,教你怎样一步步从单线程变成高性能的多线程。课上是没讲的,网上应该能找到一个文档,有兴趣的人可以自己到Intel的网站去搜一搜。
5. 工具的使用。这一部分当然跟Intel自己的软件工具挂钩,主要是VTune/Thread Checker/Thread Profiler三个工具。现在后面两个工具被融入了VTune之中,所以从产品来讲,就只有一个VTune。平心而论,VTune确实是非常好的调优工具,真正要搞产品开发,恐怕离不开这样的工具。任你是多厉害的程序员,写出东西来总要在实践中检验,所以调优工具是不可少的。VTune与Thread Checker/Thread Profiler结合,其意义远远超过了调优工具,对于多核程序开发来说,这种工具的意义实在是太大了。
大致就是这些。
分享到:
相关推荐
Intel多核程序设计竞赛第二题:零和(串行代码)Intel多核程序设计竞赛第二题:零和(串行代码)Intel多核程序设计竞赛第二题:零和(串行代码)Intel多核程序设计竞赛第二题:零和(串行代码)Intel多核程序设计...
作者都是长期供职于Intel公司的资深软件工程师和结构师,书中融入了他们自己丰富的软硬件开发经验,可以为面向多核体系结构进行并行程序设计的开发人员提供巨大的帮助。不论对从未接触过并行程序设计的开发人员,...
此资源包含了多核程序设计实验的基本代码,包括课本习题的代码
Intel多核培训Intel多核培训Intel多核培训Intel多核培训
作者都是长期供职于Intel公司的资深软件工程师和结构师,书中融入了他们自己丰富的软硬件开发经验,可以为面向多核体系结构进行并行程序设计的开发人员提供巨大的帮助。不论对从未接触过并行程序设计的开发人员,...
根据清华大学教材《多核程序设计》做的课件
关于多核程序设计课程介绍 多核发展的必然性 多核挑战软件开发
吉林大学 计算机学院 多核程序设计代码 吉林大学 计算机学院 多核程序设计代码
吉林大学计算机学院多核程序设计~~~~~~~~~
Intel多核培训Intel多核培训Intel多核培训Intel多核培训
Intel多核培训Intel多核培训Intel多核培训Intel多核培训Intel多核培训
Intel多核培训Intel多核培训Intel多核培训Intel多核培训Intel多核培训
多核 multicore 程序 设计 pdf 这是第二部分
一年一度的intel多核程序设计大赛结束了,我把自己写的程序发出来供大家交流探讨!
Intel多核培训Intel多核培训Intel多核培训Intel多核培训
多核程序设计实验多核程序设计实验
《多核程序设计》电子教案 本书介绍了多核体系结构、多核处理器、硬件支持、系统软件的现状,详细讲解了在多核平台上进行软件开发的理论与方法。从硬件入手介绍多核计算机的发展,介绍了并行算法与常用算法,之后以...
Intel多核培训3.rarIntel多核培训3.rarIntel多核培训3.rarIntel多核培训3.rarIntel多核培训3.rar清华大学提供
多核程序设计1多核程序设计1.ppt
Intel多核程序设计课程教学改革建议.pdf