Intel多核程序设计培训的基本体系

     上周去上海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结合,其意义远远超过了调优工具,对于多核程序开发来说,这种工具的意义实在是太大了。

   大致就是这些。
 

你可能感兴趣的:(多线程,C++,Semaphore,工具,profiler,程序开发)