怎样让国产芯片性能超越intel-欧洲杯在线开户
做一次标题党,其实我们做软件的当然没办法改变芯片的性能,也不可能真地让国产芯片超越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就很难利用这一点,即使知道有好办法优化也无法实施。
这篇文章里不合适解释每个问题的算法了,我们以后会写文章再披露详细的测试过程与算法说明。这里有一篇对前两题的算法解析。(其中有个spl跑得也不快的场景就没有写到测试结果表里了:))
现在可以解释标题中说的怎样让国产芯片性能超越intel了,芯片本身的性能并没有超越,超越的是算法。具体来说,就是用spl在低性能芯片上跑高性能算法,能超越sql在高性能芯片上跑低性能算法。而用spl在intel芯片上跑高性能算法,当然还能获得比飞腾更好的性能。
就我们的工作经验来看,绝大多数的数据仓库运算都可以获得这种优化。只要写出的sql够长够复杂,基本都有不少可优化的环节。如果我们用spl来重构数据仓库,就可能把现有运算性能再提高一个数量级。
这个测试结果表上还可以看出两个结论:
1.读数据库显然比读文件的性能要差很多。这是因为数据库io成本很高,而且很难做高效的压缩。要想获得最高性能,尽量不要把数据存到数据库中。象我们在另一篇文章《数据库的封闭性》中说的,未来的数据仓库不必要有“库”这么个形式。
2.飞腾上spl的性能并没有比intel差出数量级(传说飞腾落后5年,按摩尔定律,差不多有一个数量级)。数据密集型的计算性能,起决定性作用的常常是硬盘和内存,而不是cpu。我不知道这组设备的飞腾芯片到底和intel差多少,但即使有差距,也不会造成整体性能上数量级的下降,做好存储方面的优化要比cpu重要。