怎样让国产芯片性能超越Intel

发布时间:2019-02-20 分类:数据蒋堂 Tag:,,

做一次标题党,其实我们做软件的当然没办法改变芯片的性能,也不可能真地让国产芯片超越Intel。

这个话题从去年做过的一次性能测试说起,先看测试结果:

【注】SPL润乾集算器采用的程序设计语言;SQL关系数据库采用的程序设计语言

这些题目原本是某大用户在选型数据库时用于评测性能的。给定了数据(结构和规模)和SQL,在同样的硬件环境下让各家数据库都跑一下,看谁的速度最快。

我们从中选择了几个耗时最长的SQL,再做了少量补充。然后准备了两组集群,一组用Intel芯片,另一组用国产飞腾芯片,安装好分布式数据库和集算器,并在数据库中生成测试数据。

1.用SQL在数据库中执行,记录时长;

2.将SQL改写成SPL(这有些工作量,涉及到算法更改),但仍读取数据库中数据计算,记录时长;

3.将数据导出到文件,使用集算器特有的组表格式存储,再改写SPL(更换数据源,使用组表数据源会比使用数据库源更简单)计算,记录时长;

然后就得到了上面那个测试结果表。

还有几点说明:

1.我们刻意选择了一些在原评测中耗时最长的SQL(几乎都>1小时),所以这里看到的数据库上跑SQL的性能都较差;原测试中也有几条能跑得很快的SQL,但这里没有选用。

2.原评测中要求只要返回第一批数据即可,不需要返回全部结果集,这里延用了此规则,但我们补充了一些题目,在其中确保必须把涉及数据全部遍历到才可能计算出结果(比如增加GROUP BY和ORDER BY),这样可以更有效地测试遍历性能。

3.飞腾上数据库的运算性能和Intel上差不多,也不是关注重点,没有再列出了。

4.前两题用SPL读数据库的性能已经非常好,所以没再做读文件的测试了。


从测试结果可以看出:

1.在Intel机上,用SPL读文件的计算性能远远超过数据库用SQL的计算性能,即使用SPL读数据库运算也常常能获得比在数据库中用SQL好得多的性能,这还是在付出了数据库IO成本的代价之后的结果。

2.在飞腾上的SPL读文件的计算性能也远远超过在Intel上数据库的计算性能,在飞腾上用SPL读数据库也比Intel上的纯数据库计算有优势。

那么,SPL是怎么做到高性能的?

就是我们常说的办法,SPL可以采用更高性能的算法,而SQL不可以。

这些题目都不是非常简单的两三行SQL,基本都带有子查询或较多表的JOIN。在充分理解数据特征之后,我们可以设计出更低成本的算法,把运算复杂度降低一个到几个数量级。在这里主要是对有序的利用,SPL的理论体系是基于有序集合的,可以充分利用数据有序的特征来提高性能,而SQL就很难利用这一点,即使知道有好办法优化也无法实施。

这篇文章里不合适解释每个问题的算法了,我们以后会写文章再披露详细的测试过程与算法说明。这里有一篇对前两题的算法解析http://c.raqsoft.com.cn/article/1545662863743?r=279400248。(其中有个SPL跑得也不快的场景就没有写到测试结果表里了:))


现在可以解释标题中说的怎样让国产芯片性能超越Intel了,芯片本身的性能并没有超越,超越的是算法。具体来说,就是用SPL在低性能芯片上跑高性能算法,能超越SQL在高性能芯片上跑低性能算法。而用SPL在Intel芯片上跑高性能算法,当然还能获得比飞腾更好的性能。

就我们的工作经验来看,绝大多数的数据仓库运算都可以获得这种优化。只要写出的SQL够长够复杂,基本都有不少可优化的环节。如果我们用SPL来重构数据仓库,就可能把现有运算性能再提高一个数量级。


这个测试结果表上还可以看出两个结论:

1.读数据库显然比读文件的性能要差很多。这是因为数据库IO成本很高,而且很难做高效的压缩。要想获得最高性能,尽量不要把数据存到数据库中。象我们在另一篇文章《数据库的封闭性》中说的,未来的数据仓库不必要有“库”这么个形式。

2.飞腾上SPL的性能并没有比Intel差出数量级(传说飞腾落后5年,按摩尔定律,差不多有一个数量级)。数据密集型的计算性能,起决定性作用的常常是硬盘和内存,而不是CPU。我不知道这组设备的飞腾芯片到底和Intel差多少,但即使有差距,也不会造成整体性能上数量级的下降,做好存储方面的优化要比CPU重要。

更多《数据蒋堂》文章