五千年(敝帚自珍)

主题:【原创】GPU作超级计算,有那么美好吗? -- Highway

共:💬48 🌺77
全看分页树展 · 主题 跟帖
家园 绝大多数科学计算可以向量化

大多数现有的科学计算尽管不是简单的矩阵乘法,但绝大多数科学计算(包括许多看似只有迭代才能解决的问题)都可以向量化从而采用GPU提升几十上百倍的性能。用线性代数的方式把算法表达出来是关键问题,而不是仅仅知道迭代或者收敛就足够了。所以,要看你说的“其他处理”是什么,如果不是逻辑判断(注意,迭代本质上来说并非逻辑判断),而且数据量很大,那么就有可能向量化。GPU的本质是执行向量化算法速度极快,而不是仅仅执行矩阵乘法时才快。

在我目前所知的手段里面,连牛顿法这样的纯迭代都做到了向量化,还有许多天文领域的计数问题通过向量化之后,原先需要上千台计算机组成的集群花两个星期才能完成的计算,现在只需要一台普通笔记本电脑30秒,结合了CPU和GPU的向量化功能(目前在我的课题里面该算法还在进行研究,有可能提升到实时)。此外,向量化算法不仅仅速度和处理能力惊人,而且非常适合于目前已知的各种并行计算平台(如天河那样的多CPU多GPU超级计算机,MapReduce,MPI以及集群等),因此算法的向量化我认为是并行计算未来一段时间可能的研究方向。众多看似没有办法做性能提升的算法,通过技巧性的算法变换,是可以成为性能极高的算法的。如果不了解向量化,就不要轻言GPU这样的向量化处理芯片性能差,很多时候差的是人发明的算法。

算法的向量化从某个角度来看,是一个数学问题。很多时候看似无法用向量化方式表达的算法,从数学上通过积分变换、增加维度等方法可以达到向量化的目的。这里,虽然增加维度在传统的观念中可能将算法复杂度增加一个数量级,但算法向量化之后更高数量级的速度提升往往使得这样的复杂度增加变得可以忽略。比如,高维向量化之后FFT和SVD算法,GPU都比CPU性能好,这在工程领域具有非常巨大的价值。在并行计算领域,算法在追求复杂度降低的同时,还必须考虑到同向量化的平衡。我们的目的是降低计算时间,而计算时间未必和复杂度就是统一的。

当然,如你所说,GPU对高精度不行,但这个只是目前产品级的限制。在研究领域这个已经不是什么问题。编程的话,复杂不复杂,要看程序员是不是习惯向量化的思想。现在产业领域的程序员,大都还不具有向量化所要求的数学和算法能力,不过应该慢慢会进步的吧。

关于lib的问题,我们目前用的比较多的是CUDA,说缺乏可能算不上,但是目前的计算机教育在并行计算这块比较空白还是一个现状。其实Matlab在CPU向量化上就做的非常好。题外话,现在一部分编译器已经有将迭代语句向量化的功能(GCC可以做到一些,Intel Compiler好像更强),也许以后未必需要掌握什么lib或者平台才能做向量化算法提升。

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河