分页: 1 / 1
#1 十亿行竞赛
发表于 : 2024年 3月 28日 15:45
由 hci
一个十亿行的CSV文本文件,大约13GiB,里面是一些气象站的温度记录,要求算每个站的平均,最高和最低温度。
https://github.com/gunnarmorling/1brc
目前排第一的结果是花1.535秒,用Java写,用GraalVM编译成native代码运行。
#2 Re: 十亿行竞赛
发表于 : 2024年 3月 28日 15:53
由 hci
#3 Re: 十亿行竞赛
发表于 : 2024年 3月 28日 15:58
由 webdriver
比速度?那肯定不能用常规的file system去处理吧。想要快,估计得直读进CPU/GPU的缓存然后处理?
10亿行,平均算每行50个字符(UTF)x 2 = 100 byte x 10(9次方) = 100GB 数据。 typical SSD读取数据的速度在 1GB - 2GB,好像也得好几十秒左右?那意思是不算load 数据文件时间?
即使这样,数据处理,Java为啥能那么快? 如果是算法,那什么语言不都最后变成执行码,用汇编岂不更快
搞不懂
#4 Re: 十亿行竞赛
发表于 : 2024年 3月 28日 16:09
由 hci
当然包括读数据的时间。很多人对现代计算机有多快没有概念。这个竞赛让大家端正一下态度,也是好的。
第一名的代码:
https://github.com/gunnarmorling/1brc/b ... aswue.java
这儿有一个第九名的一步步的解释,
https://questdb.io/blog/billion-row-cha ... p-by-step/
大致是这么一些主意: 把Java用GraalVM编译成native代码,用并行io,用mmap,用SIMD Within A Register来parse数字,减少条件的数目让CPU branch prediction有更多机会成功,合适的批处理的大小,等等。
webdriver 写了: 2024年 3月 28日 15:58
比速度?那肯定不能用常规的file system去处理吧。想要快,估计得直读进CPU/GPU的缓存然后处理?
10亿行,平均算每行50个字符(UTF)x 2 = 100 byte x 10(9次方) = 100GB 数据。 typical SSD读取数据的速度在 1GB - 2GB,好像也得好几十秒左右?那意思是不算load 数据文件时间?
即使这样,数据处理,Java为啥能那么快? 如果是算法,那什么语言不都最后变成执行码,用汇编岂不更快
搞不懂
#5 Re: 十亿行竞赛
发表于 : 2024年 3月 28日 16:14
由 webdriver
我老写不少文件处理的东西,就一个几十兆的txt文件,load进内存也要1秒多,所以存疑啊
#6 Re: 十亿行竞赛
发表于 : 2024年 3月 28日 16:20
由 hci
那你可以学习一下别人用到的技巧。
webdriver 写了: 2024年 3月 28日 16:14
我老写不少文件处理的东西,就一个几十兆的txt文件,load进内存也要1秒多,所以存疑啊
#7 Re: 十亿行竞赛
发表于 : 2024年 3月 28日 18:38
由 Caravel
这估计是io bound的,跟语言没有多少关系。
#8 Re: 十亿行竞赛
发表于 : 2024年 3月 29日 00:48
由 bihai
有意思,这个技术可以把java 3d变快吗?比如,minecraft java?
#9 Re: 十亿行竞赛
发表于 : 2024年 3月 29日 11:34
由 hci
不知道。Java 3D不是用GPU加速的么,用不上这些。
bihai 写了: 2024年 3月 29日 00:48
有意思,这个技术可以把java 3d变快吗?比如,minecraft java?