十亿行竞赛

版主: hci

回复
头像
hci楼主
论坛精英
论坛精英
帖子: 6553
注册时间: 7月 22, 2022, 3:29 pm
昵称(选填): 海螺子

#1 十亿行竞赛

帖子 hci楼主 »

一个十亿行的CSV文本文件,大约13GiB,里面是一些气象站的温度记录,要求算每个站的平均,最高和最低温度。

https://github.com/gunnarmorling/1brc

目前排第一的结果是花1.535秒,用Java写,用GraalVM编译成native代码运行。
上次由 hci 在 3月 28, 2024, 4:26 pm,总共编辑 2 次。
原因: 未提供修改原因
头像
hci楼主
论坛精英
论坛精英
帖子: 6553
注册时间: 7月 22, 2022, 3:29 pm
昵称(选填): 海螺子

#2 Re: 十亿行竞赛

帖子 hci楼主 »

这儿是一些人用其他语言写的。当然每个人用的机器不一样,所以绝对值比较没啥意义。但可看出,各语言基本上都达到类似的结果。

C99, 1.392秒: https://github.com/dannyvankooten/1brc
C, 1.6秒: https://www.dannyvankooten.com/blog/2024/1brc/
Rust, 1.02秒:https://curiouscoding.nl/posts/1brc/
上次由 hci 在 3月 28, 2024, 3:55 pm,总共编辑 1 次。
原因: 未提供修改原因
webdriver
职业作家
职业作家
帖子: 538
注册时间: 11月 11, 2022, 12:30 pm
来自: 火星
昵称(选填): 不折腾不舒服斯基

#3 Re: 十亿行竞赛

帖子 webdriver »

hci 写了: 3月 28, 2024, 3:45 pm 一个十亿行的CSV文本文件,里面是一些气象站的温度记录,要求算每个站的平均,最高和最低温度。

https://github.com/gunnarmorling/1brc

目前排第一的结果是花1.535秒,用Java写,在GraalVM上运行。
比速度?那肯定不能用常规的file system去处理吧。想要快,估计得直读进CPU/GPU的缓存然后处理?
10亿行,平均算每行50个字符(UTF)x 2 = 100 byte x 10(9次方) = 100GB 数据。 typical SSD读取数据的速度在 1GB - 2GB,好像也得好几十秒左右?那意思是不算load 数据文件时间?
即使这样,数据处理,Java为啥能那么快? 如果是算法,那什么语言不都最后变成执行码,用汇编岂不更快
搞不懂
头像
hci楼主
论坛精英
论坛精英
帖子: 6553
注册时间: 7月 22, 2022, 3:29 pm
昵称(选填): 海螺子

#4 Re: 十亿行竞赛

帖子 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 写了: 3月 28, 2024, 3:58 pm 比速度?那肯定不能用常规的file system去处理吧。想要快,估计得直读进CPU/GPU的缓存然后处理?
10亿行,平均算每行50个字符(UTF)x 2 = 100 byte x 10(9次方) = 100GB 数据。 typical SSD读取数据的速度在 1GB - 2GB,好像也得好几十秒左右?那意思是不算load 数据文件时间?
即使这样,数据处理,Java为啥能那么快? 如果是算法,那什么语言不都最后变成执行码,用汇编岂不更快
搞不懂
上次由 hci 在 3月 28, 2024, 4:22 pm,总共编辑 4 次。
原因: 未提供修改原因
webdriver
职业作家
职业作家
帖子: 538
注册时间: 11月 11, 2022, 12:30 pm
来自: 火星
昵称(选填): 不折腾不舒服斯基

#5 Re: 十亿行竞赛

帖子 webdriver »

我老写不少文件处理的东西,就一个几十兆的txt文件,load进内存也要1秒多,所以存疑啊
头像
hci楼主
论坛精英
论坛精英
帖子: 6553
注册时间: 7月 22, 2022, 3:29 pm
昵称(选填): 海螺子

#6 Re: 十亿行竞赛

帖子 hci楼主 »

那你可以学习一下别人用到的技巧。
webdriver 写了: 3月 28, 2024, 4:14 pm 我老写不少文件处理的东西,就一个几十兆的txt文件,load进内存也要1秒多,所以存疑啊
Caravel
论坛支柱
论坛支柱
Caravel 的博客
帖子: 12264
注册时间: 7月 24, 2022, 5:21 pm

#7 Re: 十亿行竞赛

帖子 Caravel »

这估计是io bound的,跟语言没有多少关系。
bihai
职业作家
职业作家
帖子: 681
注册时间: 7月 24, 2022, 8:58 pm

#8 Re: 十亿行竞赛

帖子 bihai »

hci 写了: 3月 28, 2024, 3:45 pm 一个十亿行的CSV文本文件,大约13GiB,里面是一些气象站的温度记录,要求算每个站的平均,最高和最低温度。

https://github.com/gunnarmorling/1brc

目前排第一的结果是花1.535秒,用Java写,用GraalVM编译成native代码运行。
有意思,这个技术可以把java 3d变快吗?比如,minecraft java?
头像
hci楼主
论坛精英
论坛精英
帖子: 6553
注册时间: 7月 22, 2022, 3:29 pm
昵称(选填): 海螺子

#9 Re: 十亿行竞赛

帖子 hci楼主 »

不知道。Java 3D不是用GPU加速的么,用不上这些。
bihai 写了: 3月 29, 2024, 12:48 am 有意思,这个技术可以把java 3d变快吗?比如,minecraft java?
上次由 hci 在 3月 29, 2024, 11:35 am,总共编辑 1 次。
原因: 未提供修改原因
回复

回到 “葵花宝典(Programming)”