[转]OpenMP并行程序库开发建议

DentistryDoctor 2006-06-29 09:03:35
加精
微处理器的发展到达了一个转折点,传统的提高主频的方式已经走到了头。
微处理器下一步的主要发展方向一个是64位机,另一个是多处理机。

传统程序基本上是为顺序处理器书写的程序,大部分程序在多处理器上不
能直接获得加速。解决这个问题的一条途径是使用多处理器编译器,把顺序程序自
动转换为并行程序。世界上主要的多处理器编译器的开发公司有INTEL和Portland
Group。虽然多处理器编译器的自动并行化功能能够解决一部分问题,但是依然不能
令人满意,比如INTEL的编译器要花费数小时进行编译,程序的加速只是10%-30%。


解决这个问题的另一条途径是手工重写程序库。长期以来,计算机界积累
了大量的库程序,尤其是在科学计算领域,有名的算法均已收入库程序。如果把程
序库中所有程序全部用适合并行计算的方法重写,那么用户在写应用程序时可以直
接调用这些并行程序库,从而加速程序的运行。

工业标准OpenMP是对C语言的一个扩展,它的目的是支持并行程序设计。书
写OpenMP程序同书写C语言程序相似,只是在C程序中加入了OpenMP的编译指示。这
些编译指示描述了程序应该以何种方式并行执行。加入了OpenMP指示的C程序可以由
任意支持OpenMP的编译器编译,在不同平台的硬件上执行。也就是说,OpenMP程序
同C语言程序一样可移植。因此,用OpenMP重写的程序库也是可移植的。

INTEL有一个OpenMP的数学库,售价$399,支持服务更新费$160。库中包括
线性代数,离散富里叶变换,向量数学。AMD也有类似的库,同样以线性代数和向量
处理为主。然而,对于各个具体领域里的丰富的应用软件开发,以上库函数还远远
不够。人们还需要微分方程求解,图像处理,多媒体等等方面的程序。

开发OpenMP库需要大量的人力资源,这项工作适合在中国进行。OpenMP库
在未来的经济效益可以同微软的操作系统相比。后者为用户顺利使用PC提供工具软
件支持,前者为顺利使用多处理器提供库函数支持。世界正在进入多处理器时代,
OpenMP库将成为程序员必不可少的工具,同时也会为投资人带来巨大的收益。


[1] Intel Math Kernel Library 7.2
http://www.intel.com/cd/software/products/asmo-na/eng/perflib/mkl/219928.htm
...全文
1064 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
BlueTrees 2006-08-28
  • 打赏
  • 举报
回复
在脚本语言的级别上实现并行,应当更容易和更可行。

脚本语言本身的灵活性,对函数参数类型不作限制,个数也不作限制,甚至函数名都可以是动态生成的。这些对于实现并行有很大的好处。

比如,我们实现如下的一个并行构造,我们需要同时调用3个函数,并且等待他们都返回,就可以在脚本语言中这么书写

parallelFunc(Func1(Value1),Func2(Value1,Value2,Value3),Func3(Value1,Value2),WaitAll);

这种动态的语法构造,只能在脚本语言或者编译型的脚本语言中实现,目前的高级语言是不可能有这种语法习惯的。

实现并行算法,可以扩展目前广泛使用的一些脚本语言达到,比如JavaScript,Python等等。

在底层实现并行是吃力不讨好的。

以下是我对Intel的建议,如果,你真的想要推动并行运算发展,并且想在这上面赚钱,那么我建议你,不要投资在所谓的基础库或者基础算法上,我建议你,开发或者扩展一种新的脚本语言,这会有效的多!
BlueTrees 2006-08-28
  • 打赏
  • 举报
回复
在语言和编译级别上实现并行是不划算的,缺乏足够的灵活性,我认为应当在更高的层次实现并行。

我认为并行应当建立在OO基础上,应当在现有的语言基础上实现,不要使用过多的宏指令。比如可以扩展一些基础类,让他们的一些方法进行并行运算,对于C++,我觉得使用ATL是一个好办法,用不同的模版可以生成并行的类,原来老代码可以得到最大程度的保留。此外,可以设计一些专门用于并行的类,让这些类去调用其他类方法(获得一个非阻塞的调用),把原来的阻塞调用变成非阻塞的调用,并行就完成了99%,剩下1%就是等待和同步的方法。这些设计并不需要对原有的语言作出任何调整(大量使用宏指令和预编译等于在扩展语言本身,是不可取的,在C当中当成宝其实是极端错误的做法,会产生很大的混淆)。

建立在OO基础上,可以有很大的灵活性,可以给应用程序员更大的灵活性用于调整并行策略,还可以在运行时动态的调整并行策略,这要比使用宏来处理要好一些。

此外,目前的计算机系统并行计算主要依赖于线程和进程,这些都是操作系统中的高级对象,而不是非常低级的构造,在编译器级别上操纵这些对象缺乏足够的灵活性,是相当不可取的。
neallee 2006-08-25
  • 打赏
  • 举报
回复
恩,楼主看法少有偏颇
OpenMP并没有想象中发展那么好
最直接的思想只是个向量机
而INTEL的MKL是支持OpenMP的编译预处理的而已
dishening7 2006-08-18
  • 打赏
  • 举报
回复
个人并不看好OpenMP,都是些预处理指令,我试过,用OpenMP写得程序在单核电脑上编译出来的可执行文件在双核电脑上运行时并不是并行执行的,但win32API线程库就可以
lserlohn 2006-07-06
  • 打赏
  • 举报
回复
OpenMP是免费的
myan 2006-07-06
  • 打赏
  • 举报
回复
据我所知,Intel Math Kernel Library不是用OpenMP写的。大概楼主说的是另一个库吧。
mathe 2006-06-30
  • 打赏
  • 举报
回复
Intel Math Kernel Library是OpenMP写的吗?我怎么听说主要是通过手写汇编,使用MMX,SSE等指令写的,主要是应用指令级的并行.而不是使用线程级的并行 (OpenMP是线程级的并行).
celineshi 2006-06-30
  • 打赏
  • 举报
回复
好文章,谢谢楼主的资料

566

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧