(本文原创,首次使用OpenMP,将使用体会记录下来供学习)
多核多线程处理器的出现,让并行计算成为可能。在此之前,单核处理器并不能并行计算,这是很显然的,只有一个核心只能做到并发处理(与并行处理区别),这是一种虚拟化的技术,让用户感觉计算机在同时处理多任务,而事实上是通过分时算法来分割、分配任务,从而给用户多任务同时处理的错觉。
现在的个人机可以进行真正的并行处理,但是几乎低段位的程序员会主动创建、销毁线程来实现并行计算,因为这要进行算法设计,但是程序员比较懒。为此,OpenMP的一帮高阶程序员开发了一套工具,试图让多线程并行计算变得轻松简单。就像IDE是为了让程序员更轻松的开发程序,省去分开编辑、编译、链接、调试的麻烦,集成化的环境让Coding变得轻松一点。
因此,OpenMP是一套工具,用以轻松地实现并行计算。
启示录:计算机行业的名言——”不要重复造轮子“,代码复用、泛型程序设计、各种API、SDK、框架... 因此学习计算机技术很重要的一点就是搞清楚什么是轮子、什么是车子,轮子不用重造,但是车子的原理要清楚,这中间的平衡很难办到。
如果要深入分析怎么实现并行化的,这其实是OpenMP的工程师干的事情,他们就是想把这些底层的实现封装起来。除非你确有必要知道底层实现,否则就和我一样,只需要知道OpenMP怎么用,这也是本文讨论的内容。
讲两个概念:运行时库函数和编译指导语句。
运行时库是动态链接库,在程序运行过程中进行动态链接,确保并行算法顺利运行。这和静态库差不多,不用特别关注。
而编译指导语句是程序从源代码到可执行文件过程中,用来指导编译的语句。顾名思义即可。在我看来这是学习OpenMP最重要的部分,理解并合理使用编译指导语句,才能有效、高效的实现串行程序到并行程序的转换。
例如下面这句编译指导语句,就是用来指导符合条件的for循环从串行运行转换为并行运行。
#pragma omp parallel for
没有很复杂的技术,只是这次学习OpenMP有所感悟,觉得计算机从技术角度来看,有很多整体性的思考。比如学习一种技术的学习路径如何制定,这是很有必要花时间思考的。就如软件工程中主要的时间花在了需求分析和设计上,真正用来编程实现的部分倒是次要的。
开心每一天!
原文:https://www.cnblogs.com/hizhaolei/p/8979430.html