西西河

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

共:💬48 🌺77
分页树展主题 · 全看首页 上页
/ 4
下页 末页
    • 家园 这样看的话将来我觉得可能会出现一种专门的处理器扩展卡

      并不针对具体的视频音频或者其他具体的处理任务。

      可以由用户自行决定具体处理的数据内容,这样声卡显卡视频卡就可以统一了。而不需要很强数据处理能力的用户用最基本的机器,有特殊需求的用户可以很容易的扩展自己的处理能力。

      • 家园 显卡不是处理视频的

        显卡不是处理视频的,是用来绘制图形的。视频是连续的图像帧,多用CPU处理,有时会进行GPU的向量化加速,但用的只是GPU很小很小的一部分能力。

        声卡和数据处理基本没什么关系,它的作用只是一个转换,将数字形式的音频数据转换为模拟或其他形式,这一点处理器替代不了(因为处理器只能在数字形式之内做)。

        CPU的强项是逻辑处理、分支处理和单指令线性处理,GPU的强项是大量数据的向量化处理,两者目前的技术上来看是一种矛盾,任何芯片如果逻辑和分支较强,向量化处理就必然较弱,反之亦然,无法太好的集成。

        所谓芯片合一趋势的看法,我个人认为,欠缺对实际的了解。

        • 家园 CPU的数值计算大多就是通过协处理器完成的

          CPU的强项是逻辑处理、分支处理和单指令线性处理,GPU的强项是大量数据的向量化处理,两者目前的技术上来看是一种矛盾,任何芯片如果逻辑和分支较强,向量化处理就必然较弱,反之亦然,无法太好的集成。

          所谓芯片合一趋势的看法,我个人认为,欠缺对实际的了解。

          如果有这个需求,在CPU上加上支持向量化的数值计算协处理器模块是没有问题的。这和逻辑处理、分支处理没有冲突。当然,向量化的数值协处理器需要实现更多的运算,难度比GPU大。

    • 家园 有点歪门邪道的感觉

      好文,花!现在姚明的确是发挥越来越稳定,越来越成熟,堪称队中中流砥柱。

      以前看过一些GPU计算的相关报道,不过总的来讲这样会使问题变得非常复杂。写程序困难,调试困难,性能是不是真的能够提高那么多?也是个疑问。我非常怀疑在真实的计算环境中,速度是否能比CPU快。毕竟是为完全不同的应用设计的。

      GPU提高性能的并行处理的方法,应该在常规的CPU上面也能够实现,现在的双核和多核CPU,甚至以前的CPU的很多设计也正是如此。同时使用GPU和CPU大概只能把问题搞复杂。

      • 家园 不同意

        最简单的,你可以试试矩阵乘法(向量化)的性能,乘法规模10240*10240。

        给定市场上目前主流配置的CPU和GPU,我做过测试,结论有两条:

        (1)非向量化指令下CPU的矩阵乘法一般比向量化指令下的CPU矩阵乘法慢10-200倍(Intel SSEx系列向量化指令,双核Intel P8600,4G DDRII DUAL Channel)。上述规模乘法,前者约4小时(约240分钟)占用2G内存,后者6分钟(5分钟54秒)占用同样内存。

        (2)GPU向量化并行计算还比CPU向量化快2-20倍(NVIDIA CUDA, Quadro NVS 160M 512MB)。上述规模乘法,约1分钟(53秒,考虑到数据的预先交换和初始化,真正计算时间只是这个时间的一部分),有显存存在,不过还是占了2G内存。

        我的系统平台是Ubuntu GNU/Linxu AMD 64

        一般情况下,GPU矩阵乘法性能比CPU快几十到上百倍。更况且上面我的机器还都不太强。这对于科学计算的意义是巨大的,对于工程应用和控制来说可能就不太有什么意义了。毕竟,天河一号是AMD/ATI堆砌起来的嘛。

        • 家园 大部分科学计算都不是简单的矩阵乘法

          而且GPU计算对高精度的计算性能提升就不明显。我们主要就是用GPU做一些数据的fitting,的确极快,但是如果是其他处理,就没有优势。

          编程也比较复杂(一部分原因是缺乏大量的lib支持,很多都要自己写)。

          你说的这个是极端的情况,毕竟GPU拿手的就是矩阵乘法

          • 家园 绝大多数科学计算可以向量化

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

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

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

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

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

      • 家园 科学计算吧

        数值模拟的,可以是90%以上时间耗费在几条循环语句上。将这几条循环语句并行化,程序复杂性不会增加太多。

        • 家园 不是的,现在的科学计算大都非常复杂

          一般都会调用专门的程序库,进行非常复杂的计算。真正的程序,自己写得很有限,主要调用已经积累下来的数以万行,十万行原码的程序。此外,对内存的要求也很高,我们这里一个典型的作业,要求1GB内存,一般一个双CPU节点同时运行两个作业。

分页树展主题 · 全看首页 上页
/ 4
下页 末页


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

Copyright © cchere 西西河