2 月 4 日状态:最终排行榜已经发布。恭喜所有获奖者,并非常感谢所有参与本次挑战赛的人以及帮助组织这次挑战赛的每个人!
状态 2 月 3 日:所有参赛作品都已通过评估,我正在最终确定排行榜。
状态 2 月 1 日:挑战赛已关闭,接受新提交。目前不接受用于添加提交的新拉取请求。 待处理的 PR 将在未来几天内进行评估。
状态 1 月 31 日:挑战将于今天午夜 UTC 结束。
状态 1 月 12 日:由于到目前为止,此挑战赛的参赛作品数量如此之多(100+),并且越来越难以管理,因此,如果你希望它们在 10 秒或更短的时间内在评估机器上运行,请仅创建新的提交。
状态 1 月 1 日:此挑战赛开放提交!
赞助
非常感谢我的雇主 Decodable 为评估环境提供资金并支持这一挑战!
十亿行挑战 (1BRC) 是一个有趣的探索,探索现代 Java 在从文本文件中聚合 10 亿行可以走多远。 获取所有(虚拟)线程,联系 SIMD,优化 GC 或使用任何其他技巧,并创建最快的实现来解决此任务!
该文本文件包含一系列气象站的温度值。 每行都是一个测量值,其格式为 ,测量值正好有一个小数位。 下面以 10 行为例:
<string: station name>;<double: measurement>
Hamburg;12.0 Bulawayo;8.9 Palembang;38.8 St. John's;15.2 Cracow;12.6 Bridgetown;26.9 Istanbul;6.2 Roseau;34.4 Conakry;31.2 Istanbul;23.0
任务是编写一个 Java 程序,该程序读取文件,计算每个气象站的最小、平均和最大温度值,并在 stdout 上发出如下结果 (即按电台名称的字母顺序排序,每个电台的结果值格式为 ,四舍五入为一个小数位):
<min>/<mean>/<max>
{Abha=-23.0/18.0/59.2, Abidjan=-16.2/26.0/67.3, Abéché=-10.0/29.4/69.0, Accra=-10.1/26.4/66.4, Addis Ababa=-23.7/16.0/67.0, Adelaide=-27.8/17.3/58.5, ...}
在 2024 年 1 月 31 日之前提交你的实施并成为排行榜的一部分!
这些是在 Hetzner AX161 专用服务器的 8 个内核(32 核 AMD EPYC™ 7502P (Zen2),128 GB RAM)上运行所有参赛作品的结果。
# | 结果 (m:s.ms) | 实现 | 京德KK的 | 提交者 | 笔记 | 证书 |
---|---|---|---|---|---|---|
1 | 00:01.535 | 链接 | 21.0.2-格拉尔 | Thomas Wuerthinger, Quan Anh Mai, Alfonso² Peterssen | GraalVM 本机二进制文件,使用 Unsafe | 证书 |
2 | 00:01.587 | 链接 | 21.0.2-格拉尔 | Artsiom Korzun(阿尔西奥姆·科尔尊酒店) | GraalVM 本机二进制文件,使用 Unsafe | 证书 |
3 | 00:01.608 | 链接 | 21.0.2-格拉尔 | 雅罗米尔·哈马拉 | GraalVM 本机二进制文件,使用 Unsafe | 证书 |
00:01.880 | 链接 | 21.0.1-打开 | 塞尔坎·厄扎尔 | 使用不安全 | 证书 | |
00:01.921 | 链接 | 21.0.2-格拉尔 | Van Phu DO(文富多酒店) | GraalVM 本机二进制文件,使用 Unsafe | 证书 | |
00:02.018 | 链接 | 21.0.2-格拉尔 | 斯蒂芬·冯·沃利 | GraalVM 本机二进制文件,使用 Unsafe | 证书 | |
00:02.157 | 链接 | 21.0.2-格拉尔 | 罗伊·范·莱恩 | GraalVM 本机二进制文件,使用 Unsafe | 证书 | |
00:02.319 | 链接 | 21.0.2-格拉尔 | 亚武兹·塔斯 | GraalVM 本机二进制文件,使用 Unsafe | 证书 | |
00:02.332 | 链接 | 21.0.2-格拉尔 | 马尔科·托波尔尼克 | GraalVM 本机二进制文件,使用 Unsafe | 证书 | |
00:02.367 | 链接 | 21.0.1-打开 | 泉英迈 | 使用不安全 | 证书 | |
00:02.507 | 链接 | 21.0.1-打开 | 戈尼克斯 | 使用不安全 | 证书 | |
00:02.557 | 链接 | 21.0.1-打开 | 尤尔瓦斯 | 使用不安全 | 证书 | |
00:02.820 | 链接 | 22.EA.32-开放 | 李琳 | 使用不安全 | 证书 | |
00:02.995 | 链接 | 21.0.2-格拉尔 | 蒂夫福阿 | GraalVM 本机二进制文件,使用 Unsafe | 证书 | |
00:02.997 | 链接 | 21.0.1-打开 | 戈尼克斯 | 证书 | ||
00:03.095 | 链接 | 21.0.2-格拉尔 | 贾马尔·穆拉 | GraalVM 本机二进制文件,使用 Unsafe | 证书 | |
00:03.210 | 链接 | 21.0.1-打开 | 泉英迈 | 证书 | ||
00:03.298 | 链接 | 21.0.1-格拉尔 | 苏布拉曼亚姆 | 使用不安全 | 证书 | |
00:03.431 | 链接 | 21.0.1-格拉尔 | 罗曼·穆辛 | GraalVM 本机二进制文件,使用 Unsafe | 证书 | |
00:03.469 | 链接 | 21.0.2-格拉尔 | 埃利奥特·巴拉斯 | GraalVM 本机二进制文件,使用 Unsafe | 证书 | |
00:03.698 | 链接 | 21.0.1-格拉尔 | 杰森·诺克林 | 证书 | ||
00:03.785 | 链接 | 21.0.2-格拉尔 | 泽尔宁夫 | GraalVM 本机二进制文件,使用 Unsafe | 证书 | |
00:03.820 | 链接 | 21.0.2-格拉尔 | 约翰·齐亚莫斯 | GraalVM 本机二进制文件,使用 Unsafe | 证书 | |
00:03.902 | 链接 | 21.0.1-打开 | 胡安·帕雷拉 | 证书 | ||
00:03.966 | 链接 | 21.0.1-打开 | 何金聪 | 使用不安全 | 证书 | |
00:03.991 | 链接 | 21.0.1-格拉尔 | Vaidhy Mayilrangam(瓦伊迪·马伊兰甘) | 使用不安全 | 证书 | |
00:04.066 | 链接 | 21.0.1-打开 | 杰西·范鲁伊 | 使用不安全 | 证书 | |
00:04.101 | 链接 | 21.0.2-格拉尔 | 海梅·波利杜拉 | GraalVM 本机二进制文件,使用 Unsafe | 证书 | |
00:04.209 | 链接 | 21.0.1-打开 | 乔瓦尼·库库(Giovanni Cuccu) | 证书 | ||
00:04.474 | 链接 | 21.0.1-打开 | 罗曼·斯托菲尔 | 证书 | ||
00:04.676 | 链接 | 21.0.2-TEM | 彼得·莱瓦特 | 证书 | ||
00:04.684 | 链接 | 21.0.1-打开 | 弗洛林·布拉纳鲁 | 使用不安全 | 证书 | |
00:04.701 | 链接 | 21.0.1-打开 | 伊恩·普雷斯顿博士 | 证书 | ||
00:04.741 | 链接 | 21.0.1-打开 | 悬崖点击 | 使用不安全 | 证书 | |
00:04.800 | 链接 | 21.0.1-打开 | 帕克·蒂明斯 | 证书 | ||
00:04.884 | 链接 | 21.0.1-打开 | 阿列克谢·希皮勒夫 | 证书 | ||
00:04.920 | 链接 | 21.0.1-格拉尔 | 苏布拉曼亚姆 | 证书 | ||
00:05.077 | 链接 | 21.0.2-格拉尔 | 乔纳森·赖特 | GraalVM 本机二进制文件,使用 Unsafe | 证书 | |
00:05.142 | 链接 | 21.0.1-打开 | Arjen Wisse(阿简·威斯) | 证书 | ||
00:05.167 | 链接 | 21.0.2-打开 | 叶夫赫尼·梅尔尼克 | 证书 | ||
00:05.235 | 链接 | 21.0.1-打开 | 无限 | 证书 | ||
00:05.336 | 链接 | 爪哇岛 | 苏米特·乔杜里 | 使用不安全 | 证书 | |
00:05.354 | 链接 | 21.0.2-格拉尔 | 阿尔曼·谢里夫 | GraalVM 本机二进制文件,使用 Unsafe | 证书 | |
00:05.478 | 链接 | 21.0.1-打开 | 奥利维尔·布尔甘(Olivier Bourgain) | 使用不安全 | 证书 | |
00:05.559 | 链接 | 21.0.1-格拉尔 | 帕纳吉奥蒂斯·德拉卡托斯 | GraalVM 本机二进制文件 | 证书 | |
00:05.887 | 链接 | 21.0.1-格拉尔 | 查理·埃文斯 | 使用不安全 | 证书 | |
00:05.979 | 链接 | 21.0.1-格拉尔 | 山姆·普拉拉 | 证书 | ||
00:06.166 | 链接 | 21.0.1-打开 | 杰米·斯坦斯菲尔德 | 证书 | ||
00:06.257 | 链接 | 21.0.1-格拉尔 | 斯蒂芬·斯普伦格 | 使用不安全 | 证书 | |
00:06.392 | 链接 | 21.0.2-格拉尔 | 迭戈·帕拉 | 证书 | ||
00:06.576 | 链接 | 21.0.1-打开 | 孙安德 | 使用不安全 | 证书 | |
00:06.635 | 链接 | 21.0.1-格拉尔 | 拉克·斯卡特斯-格瓦西 | GraalVM 本机二进制文件,使用 Unsafe | 证书 | |
00:06.654 | 链接 | 21.0.1-格拉尔 | 雅罗斯拉夫·巴乔里克 | 证书 | ||
00:06.715 | 链接 | 21.0.1-打开 | 阿尔吉尔达斯·拉什丘斯 | 证书 | ||
00:06.884 | 链接 | 21.0.1-格拉尔 | rcasteltrione | 证书 | ||
00:06.982 | 链接 | 21.0.1-打开 | 克里斯·贝柳 | 证书 | ||
00:07.563 | 链接 | 21.0.1-格拉尔 | 3J5A型 | 证书 | ||
00:07.680 | 链接 | 21.0.1-格拉尔 | 木糖醇 | 使用不安全 | 证书 | |
00:07.712 | 链接 | 21.0.1-格拉尔 | 安妮塔·SV | 证书 | ||
00:07.730 | 链接 | 21.0.1-打开 | 约翰内斯·舒特(Johannes Schüth) | 证书 | ||
00:07.894 | 链接 | 21.0.2-TEM | 安东尼奥·穆尼奥斯 | 证书 | ||
00:07.925 | 链接 | 21.0.1-格拉尔 | 里卡多·皮珀(Ricardo Pieper) | 证书 | ||
00:07.948 | 链接 | 爪哇岛 | 斯莫菲 | 使用不安全 | 证书 | |
00:08.157 | 链接 | 21.0.1-打开 | 尤伦伊万 | 证书 | ||
00:08.167 | 链接 | 21.0.1-TEM | 迪米塔尔·季米特洛夫 | 证书 | ||
00:08.214 | 链接 | 21.0.1-打开 | 迪姆肯 | 证书 | ||
00:08.255 | 链接 | 21.0.1-打开 | 马蒂亚斯·比耶克 | 证书 | ||
00:08.398 | 链接 | 21.0.1-打开 | 帕斯·穆加尔 | 使用不安全 | 证书 | |
00:08.489 | 链接 | 21.0.1-格拉尔 | 阮邦 | 证书 | ||
00:08.517 | 链接 | 21.0.1-格拉尔 | AGS公司 | 使用不安全 | 证书 | |
00:08.557 | 链接 | 21.0.1-格拉尔 | 阿德里亚·卡贝萨 | 证书 | ||
00:08.622 | 链接 | 21.0.1-格拉尔 | 凯沙夫拉姆·库杜瓦 | 使用不安全 | 证书 | |
00:08.892 | 链接 | 21.0.1-打开 | 罗曼·罗曼丘克 | 证书 | ||
00:08.896 | 链接 | 21.0.1-打开 | 安杰伊·内斯托鲁克 | 证书 | ||
00:09.020 | 链接 | 21.0.1-打开 | 耶姆雷恩奇 | 证书 | ||
00:09.071 | 链接 | 21.0.1-打开 | 加布里埃尔·里德 | 证书 | ||
00:09.352 | 链接 | 21.0.1-格拉尔 | 菲利普·赫里萨福夫 | 证书 | ||
00:09.725 | 链接 | 21.0.2-格拉尔 | 马丁 | GraalVM 本机二进制文件 | 证书 | |
00:09.867 | 链接 | 21.0.1-格拉尔 | 里卡多·皮珀(Ricardo Pieper) | 证书 | ||
00:09.945 | 链接 | 21.0.1-打开 | 安东尼·古巴德(Anthony Goubard) | 证书 | ||
00:10.092 | 链接 | 21.0.1-格拉尔 | 布拉罕 | 证书 | ||
00:10.127 | 链接 | 21.0.1-打开 | 帕斯·穆加尔 | 使用不安全 | 证书 | |
00:11.577 | 链接 | 21.0.1-打开 | 前夕 | 证书 | ||
00:10.473 | 链接 | 21.0.1-打开 | 安东·雷博奇金 | 证书 | ||
00:11.119 | 链接 | 21.0.1-打开 | 劳里 | 证书 | ||
00:11.156 | 链接 | 爪哇岛 | Yann Moisan | 证书 | ||
00:11.167 | 链接 | 21.0.1-打开 | 尼克·帕尔默 | 证书 | ||
00:11.352 | 链接 | 21.0.1-打开 | 卡蒂克扬97 | 使用不安全 | 证书 | |
00:11.363 | 链接 | 21.0.2-TEM | 古鲁普拉萨德·斯里达兰 | 证书 | ||
00:11.405 | 链接 | 21.0.1-格拉尔 | 拉斐尔·梅里诺·加西亚 | 证书 | ||
00:11.406 | 链接 | 21.0.1-格拉尔 | 加布里埃尔福 | 证书 | ||
00:11.433 | 链接 | 21.0.1-格拉尔 | Jatin Gala(贾廷晚会) | 证书 | ||
00:11.505 | 链接 | 21.0.1-打开 | 德米特里·布菲斯托夫 | 使用不安全 | 证书 | |
00:11.744 | 链接 | 21.0.2-TEM | 塞巴斯蒂安·勒夫达尔 | 证书 | ||
00:11.805 | 链接 | 21.0.1-格拉尔 | Cool_Mineman | 证书 | ||
00:11.934 | 链接 | 21.0.1-打开 | arjenvaneerde | 证书 | ||
00:12.220 | 链接 | 21.0.1-打开 | 理查德·斯塔廷 | 证书 | ||
00:12.495 | 链接 | 21.0.1-格拉尔 | 塞缪尔·伊冯 | GraalVM 本机二进制文件 | 证书 | |
00:12.568 | 链接 | 21.0.1-格拉尔 | 弗拉德 | 证书 | ||
00:12.800 | 链接 | 爪哇岛 | 约纳坦·格拉伯 | 证书 | ||
00:13.013 | 链接 | 21.0.1-格拉尔 | 清阳 | 证书 | ||
00:13.071 | 链接 | 21.0.1-打开 | 伊恩·普雷斯顿博士 | 证书 | ||
00:13.729 | 链接 | 爪哇岛 | 塞德里克·博斯 | 证书 | ||
00:13.817 | 链接 | 21.0.1-打开 | 卡 罗 | 证书 | ||
00:14.502 | 链接 | 21.0.1-格拉尔 | 埃里克卢姆 | 证书 | ||
00:14.772 | 链接 | 21.0.1-打开 | 凯文·麦克默特里 | 证书 | ||
00:14.867 | 链接 | 21.0.1-打开 | 迈克尔·贝瑞 | 证书 | ||
00:14.900 | 链接 | 爪哇岛 | Judekeyser | 证书 | ||
00:15.006 | 链接 | 爪哇岛 | 帕维尔·亚当斯基 | 证书 | ||
00:15.662 | 链接 | 21.0.1-打开 | 谢尔盖·莫特潘 | 证书 | ||
00:16.063 | 链接 | 21.0.1-打开 | 马雷克·科恩 | 证书 | ||
00:16.457 | 链接 | 21.0.1-打开 | 阿列克谢 | 证书 | ||
00:16.953 | 链接 | 21.0.1-打开 | 高拉夫·阿南特罗·德什穆克 | 证书 | ||
00:17.046 | 链接 | 21.0.1-打开 | 迪米特里斯·卡兰皮纳斯 | 证书 | ||
00:17.086 | 链接 | 爪哇岛 | 布雷杰什·拉索德 | 证书 | ||
00:17.490 | 链接 | 21.0.1-打开 | 格格莉之吻 | 证书 | ||
00:17.255 | 链接 | 21.0.1-打开 | 特科萨切夫 | 证书 | ||
00:17.520 | 链接 | 21.0.1-打开 | 法里德 | 证书 | ||
00:17.717 | 链接 | 21.0.1-打开 | 奥列·马尔琴科 | 证书 | ||
00:17.815 | 链接 | 21.0.1-打开 | 哈尔瓦德·特莱特贝格 | 证书 | ||
00:17.932 | 链接 | 21.0.1-打开 | Bartłomiej Pietrzyk | 证书 | ||
00:18.251 | 链接 | 21.0.1-格拉尔 | 马库斯·埃布纳 | 证书 | ||
00:18.448 | 链接 | 21.0.1-打开 | 莫伊塞斯·博尔赫斯·富尔塔多 | 证书 | ||
00:18.771 | 链接 | 21.0.1-格拉尔 | 大卫·科佩克 | 证书 | ||
00:18.902 | 链接 | 21.0.1-格拉尔 | 马克西姆 | 证书 | ||
00:19.357 | 链接 | 21.0.1-格拉尔斯 | 罗曼·施韦策 | 证书 | ||
00:20.691 | 链接 | 21.0.1-格拉尔 | 像孩子一样 | GraalVM 本机二进制文件 | 证书 | |
00:21.989 | 链接 | 21.0.1-打开 | 勇气 | 证书 | ||
00:22.188 | 链接 | 21.0.1-打开 | 海罗·格拉特隆 | 证书 | ||
00:22.334 | 链接 | 21.0.1-打开 | 阿尔贝托·文图里尼 | 证书 | ||
00:22.457 | 链接 | 21.0.1-打开 | 拉姆齐·本·叶海亚 | 证书 | ||
00:22.471 | 链接 | 21.0.1-打开 | 希瓦姆·阿加瓦尔 | 证书 | ||
00:24.986 | 链接 | 21.0.1-打开 | 库马尔索拉夫123 | 证书 | ||
00:25.064 | 链接 | 21.0.2-打开 | 苏迪尔·图马蒂 | 证书 | ||
00:26.500 | 链接 | 21.0.1-打开 | 布鲁诺·费利克斯 | 证书 | ||
00:28.381 | 链接 | 21.0.1-打开 | 汉普斯 | 证书 | ||
00:29.741 | 链接 | 21.0.1-打开 | 马泰奥·瓦卡里(Matteo Vaccari) | 证书 | ||
00:32.018 | 链接 | 21.0.1-打开 | 奥勒良·图图亚努 | 证书 | ||
00:34.388 | 链接 | 21.0.1-TEM | 托比 | 证书 | ||
00:35.875 | 链接 | 21.0.1-打开 | 马哈茂德·法兹哈利勒 | 证书 | ||
00:36.180 | 链接 | 21.0.1-打开 | 霍里亚·基奥雷安 | 证书 | ||
00:36.424 | 链接 | 爪哇岛 | 马尼什·加格 | 证书 | ||
00:38.340 | 链接 | 21.0.1-打开 | 摘要假面 | 证书 | ||
00:41.982 | 链接 | 21.0.1-打开 | 克里斯·里科米尼 | 证书 | ||
00:42.893 | 链接 | 21.0.1-打开 | 贾瓦马克 | 证书 | ||
00:46.597 | 链接 | 21.0.1-打开 | 前田先生 | 证书 | ||
00:58.811 | 链接 | 21.0.1-打开 | 乌吉瓦尔·巴蒂 | 证书 | ||
01:05.094 | 链接 | 21.0.1-打开 | 穆迪特·萨克塞纳 | 证书 | ||
01:05.979 | 链接 | 21.0.1-格拉尔 | Hieu Dao Quang(傅道光酒店) | 证书 | ||
01:06.790 | 链接 | 21.0.1-打开 | 卡尔·海因茨·马尔拜斯 | 证书 | ||
01:06.944 | 链接 | 21.0.1-打开 | 桑塔努 | 证书 | ||
01:07.014 | 链接 | 21.0.1-打开 | 行人之爱 | 证书 | ||
01:07.101 | 链接 | 21.0.1-打开 | 吉夫约特·辛格·查布达 | 证书 | ||
01:08.811 | 链接 | 21.0.1-打开 | 阿莱什·贾斯汀 | 证书 | ||
01:08.908 | 链接 | 21.0.1-打开 | 伊塔斯克 | 证书 | ||
01:09.595 | 链接 | 21.0.1-TEM | 安东尼奥·贡萨尔维斯 | 证书 | ||
01:09.882 | 链接 | 21.0.1-打开 | 帕布 R | 证书 | ||
01:14.815 | 链接 | 21.0.1-打开 | 二难之物 | 证书 | ||
01:25.801 | 链接 | 21.0.1-打开 | 伊万克拉里克 | 证书 | ||
01:33.594 | 链接 | 21.0.1-打开 | 高拉夫·马图尔 | 证书 | ||
01:53.208 | 链接 | 爪哇岛 | 马哈德夫 K | 证书 | ||
01:56.607 | 链接 | 21.0.1-打开 | 阿比拉什 | 证书 | ||
03:43.521 | 链接 | 21.0.1-打开 | 김예환 Ye-Hwan Kim (山姆) | 证书 | ||
03:59.760 | 链接 | 21.0.1-打开 | 参 孙 | 证书 | ||
--- | ||||||
04:49.679 | link (基线) | 21.0.1-打开 | 贡纳尔·莫林 |
请注意,我在管理竞争者的方式上并不是超级科学的 (有关详细信息,请参阅评估结果)。 这不是一个高保真微基准测试,运行之间可能会有高达 +-3% 的变化。 因此,与附近的其他人相比,不要太纠结于你的条目的确切顺序。 这项挑战的主要目的是学习新事物,在此过程中获得乐趣,并激励其他人也这样做。 排行榜只是实现这一目标的手段。 但是,如果你观察到截然不同的结果,请打开一个问题。
请参阅进入挑战赛,了解如何通过自己的实施进入挑战赛。 Show & Tell 具有使用其他语言、数据库和工具构建的各种 1BRC 条目。
本部分列出了使用不同配置运行最快的 N 个条目的结果。 由于参赛作品已针对原始挑战描述和设置的特定条件进行了优化 (例如密钥集的大小), 挑战条目在不同配置中的表现可能大不相同。 此处提供的这些奖金结果仅供参考。 对于 1BRC 挑战,只有上一节中的结果才重要。
为了正式评估挑战赛的参赛作品,每个竞争者都在评估机器(AMD EPYC™ 7502P)的八个内核上运行。 以下是在计算机的所有 32 个内核/64 个线程(即启用 SMT)上运行前 50 个条目(截至提交 e1fb378a,2 月 2 日)的结果:
# | 结果 (m:s.ms) | 实现 | 京德KK的 | 提交者 | 笔记 |
---|---|---|---|---|---|
1 | 00:00.323 | 链接 | 21.0.2-格拉尔 | 雅罗米尔·哈马拉 | GraalVM 本机二进制文件,使用 Unsafe |
2 | 00:00.326 | 链接 | 21.0.2-格拉尔 | Thomas Wuerthinger, Quan Anh Mai, Alfonso² Peterssen | GraalVM 本机二进制文件,使用 Unsafe |
3 | 00:00.349 | 链接 | 21.0.2-格拉尔 | Artsiom Korzun(阿尔西奥姆·科尔尊酒店) | GraalVM 本机二进制文件,使用 Unsafe |
00:00.351 | 链接 | 21.0.2-格拉尔 | Van Phu DO(文富多酒店) | GraalVM 本机二进制文件,使用 Unsafe | |
00:00.389 | 链接 | 21.0.2-格拉尔 | 斯蒂芬·冯·沃利 | GraalVM 本机二进制文件,使用 Unsafe | |
00:00.408 | 链接 | 21.0.2-格拉尔 | 亚武兹·塔斯 | GraalVM 本机二进制文件,使用 Unsafe | |
00:00.415 | 链接 | 21.0.2-格拉尔 | 罗伊·范·莱恩 | GraalVM 本机二进制文件,使用 Unsafe | |
00:00.499 | 链接 | 21.0.2-格拉尔 | 马尔科·托波尔尼克 | GraalVM 本机二进制文件,使用 Unsafe | |
00:00.602 | 链接 | 21.0.1-格拉尔 | 罗曼·穆辛 | GraalVM 本机二进制文件,使用 Unsafe | |
00:00.623 | 链接 | 21.0.1-打开 | 戈尼克斯 | 使用不安全 | |
00:00.710 | 链接 | 21.0.2-格拉尔 | 贾马尔·穆拉 | GraalVM 本机二进制文件,使用 Unsafe | |
00:00.727 | 链接 | 21.0.2-格拉尔 | 蒂夫福阿 | GraalVM 本机二进制文件,使用 Unsafe | |
00:00.774 | 链接 | 21.0.1-打开 | 塞尔坎·厄扎尔 | 使用不安全 | |
00:00.788 | 链接 | 21.0.2-格拉尔 | 埃利奥特·巴拉斯 | GraalVM 本机二进制文件,使用 Unsafe | |
00:00.832 | 链接 | 21.0.2-格拉尔 | 泽尔宁夫 | GraalVM 本机二进制文件,使用 Unsafe | |
00:00.840 | 链接 | 21.0.1-打开 | 戈尼克斯 | ||
00:00.857 | 链接 | 21.0.2-格拉尔 | 海梅·波利杜拉 | GraalVM 本机二进制文件,使用 Unsafe | |
00:00.880 | 链接 | 21.0.2-格拉尔 | 约翰·齐亚莫斯 | GraalVM 本机二进制文件,使用 Unsafe | |
00:00.939 | 链接 | 21.0.1-打开 | 阿列克谢·希皮勒夫 | ||
00:01.026 | 链接 | 21.0.1-打开 | 杰西·范鲁伊 | 使用不安全 | |
00:01.118 | 链接 | 21.0.2-格拉尔 | 乔纳森·赖特 | GraalVM 本机二进制文件 | |
00:01.140 | 链接 | 21.0.2-格拉尔 | 阿尔曼·谢里夫 | GraalVM 本机二进制文件,使用 Unsafe | |
00:01.143 | 链接 | 21.0.1-打开 | 悬崖点击 | 使用不安全 | |
00:01.169 | 链接 | 21.0.2-打开 | 叶夫赫尼·梅尔尼克 | ||
00:01.188 | 链接 | 21.0.1-格拉尔 | 苏布拉曼亚姆 | 使用不安全 | |
00:01.193 | 链接 | 21.0.1-打开 | 弗洛林·布拉纳鲁 | 使用不安全 | |
00:01.234 | 链接 | 21.0.1-打开 | 奥利维尔·布尔甘(Olivier Bourgain) | 使用不安全 | |
00:01.242 | 链接 | 21.0.1-打开 | 泉英迈 | 使用不安全 | |
00:01.252 | 链接 | 21.0.1-打开 | 何金聪 | 使用不安全 | |
00:01.267 | 链接 | 22.EA.32-开放 | 李琳 | 使用不安全 | |
00:01.363 | 链接 | 21.0.2-TEM | 彼得·莱瓦特 | ||
00:01.380 | 链接 | 21.0.1-格拉尔 | 杰森·诺克林 | ||
00:01.391 | 链接 | 21.0.1-打开 | 泉英迈 | ||
00:01.439 | 链接 | 21.0.1-打开 | Arjen Wisse(阿简·威斯) | ||
00:01.446 | 链接 | 21.0.1-打开 | 伊恩·普雷斯顿博士 | ||
00:01.504 | 链接 | 21.0.1-打开 | 杰米·斯坦斯菲尔德 | ||
00:01.514 | 链接 | 21.0.1-格拉尔 | 苏布拉曼亚姆 | ||
00:01.516 | 链接 | 21.0.1-格拉尔 | Vaidhy Mayilrangam(瓦伊迪·马伊兰甘) | 使用不安全 | |
00:01.586 | 链接 | 21.0.1-打开 | 尤尔瓦斯 | 使用不安全 | |
00:01.647 | 链接 | 21.0.2-格拉尔 | 迭戈·帕拉 | ||
00:01.694 | 链接 | 21.0.1-打开 | 帕克·蒂明斯 | ||
00:01.694 | 链接 | 21.0.1-格拉尔 | 查理·埃文斯 | 使用不安全 | |
00:01.702 | 链接 | 21.0.1-格拉尔 | 山姆·普拉拉 | ||
00:01.733 | 链接 | 爪哇岛 | 苏米特·乔杜里 | 使用不安全 | |
00:01.742 | 链接 | 21.0.1-打开 | 无限 | ||
00:02.241 | 链接 | 21.0.1-格拉尔 | 斯蒂芬·斯普伦格 | 使用不安全 | |
00:02.294 | 链接 | 21.0.1-打开 | 乔瓦尼·库库(Giovanni Cuccu) | ||
00:02.990 | 链接 | 21.0.1-格拉尔 | 帕纳吉奥蒂斯·德拉卡托斯 | GraalVM 本机二进制文件 | |
00:03.205 | 链接 | 21.0.1-打开 | 胡安·帕雷拉 | ||
00:10.929 | 链接 | 21.0.1-打开 | 罗曼·斯托菲尔 |
1BRC 挑战数据集包含 413 个不同的气象站,而规则允许出现 10,000 个不同的气象站名称。 以下是针对 10K 站点(通过 ./create_measurements3.sh 1000000000 创建)的 1,000,000,000 个测量值运行前 40 个条目(截至提交 e1fb378a,2 月 2 日)的结果, 在评估计算机上使用八个内核:
# | 结果 (m:s.ms) | 实现 | 京德KK的 | 提交者 | 笔记 |
---|---|---|---|---|---|
1 | 00:02.957 | 链接 | 21.0.2-格拉尔 | Artsiom Korzun(阿尔西奥姆·科尔尊酒店) | GraalVM 本机二进制文件,使用 Unsafe |
2 | 00:03.058 | 链接 | 21.0.2-格拉尔 | 马尔科·托波尔尼克 | GraalVM 本机二进制文件,使用 Unsafe |
3 | 00:03.186 | 链接 | 21.0.2-格拉尔 | 斯蒂芬·冯·沃利 | GraalVM 本机二进制文件,使用 Unsafe |
00:03.998 | 链接 | 21.0.2-格拉尔 | 罗伊·范·莱恩 | GraalVM 本机二进制文件,使用 Unsafe | |
00:04.042 | 链接 | 21.0.2-格拉尔 | 雅罗米尔·哈马拉 | GraalVM 本机二进制文件,使用 Unsafe | |
00:04.289 | 链接 | 21.0.1-打开 | 戈尼克斯 | 使用不安全 | |
00:04.522 | 链接 | 21.0.2-格拉尔 | 蒂夫福阿 | GraalVM 本机二进制文件,使用 Unsafe | |
00:04.653 | 链接 | 21.0.2-格拉尔 | 贾马尔·穆拉 | GraalVM 本机二进制文件,使用 Unsafe | |
00:04.733 | 链接 | 21.0.1-打开 | 戈尼克斯 | ||
00:04.836 | 链接 | 21.0.1-格拉尔 | 苏布拉曼亚姆 | 使用不安全 | |
00:04.870 | 链接 | 21.0.2-格拉尔 | Thomas Wuerthinger, Quan Anh Mai, Alfonso² Peterssen | GraalVM 本机二进制文件,使用 Unsafe | |
00:05.240 | 链接 | 21.0.2-格拉尔 | 泽尔宁夫 | GraalVM 本机二进制文件,使用 Unsafe | |
00:05.394 | 链接 | 21.0.2-格拉尔 | 亚武兹·塔斯 | GraalVM 本机二进制文件,使用 Unsafe | |
00:05.906 | 链接 | 21.0.2-格拉尔 | 埃利奥特·巴拉斯 | GraalVM 本机二进制文件,使用 Unsafe | |
00:06.086 | 链接 | 21.0.2-格拉尔 | Van Phu DO(文富多酒店) | GraalVM 本机二进制文件,使用 Unsafe | |
00:06.379 | 链接 | 21.0.2-格拉尔 | 约翰·齐亚莫斯 | GraalVM 本机二进制文件,使用 Unsafe | |
00:07.113 | 链接 | 21.0.2-打开 | 叶夫赫尼·梅尔尼克 | ||
00:07.542 | 链接 | 21.0.2-格拉尔 | 乔纳森·赖特 | GraalVM 本机二进制文件 | |
00:07.889 | 链接 | 21.0.1-打开 | 弗洛林·布拉纳鲁 | 使用不安全 | |
00:07.970 | 链接 | 21.0.1-打开 | 悬崖点击 | 使用不安全 | |
00:08.857 | 链接 | 21.0.1-打开 | 塞尔坎·厄扎尔 | ||
00:09.333 | 链接 | 21.0.1-打开 | 尤尔瓦斯 | 使用不安全 | |
00:09.722 | 链接 | 21.0.1-打开 | 阿列克谢·希皮勒夫 | ||
00:09.777 | 链接 | 21.0.1-格拉尔 | Vaidhy Mayilrangam(瓦伊迪·马伊兰甘) | 使用不安全 | |
00:10.263 | 链接 | 21.0.1-打开 | 泉英迈 | 使用不安全 | |
00:11.154 | 链接 | 21.0.1-打开 | 帕克·蒂明斯 | ||
00:13.175 | 链接 | 21.0.1-打开 | 泉英迈 | ||
00:13.245 | 链接 | 21.0.1-打开 | 伊恩·普雷斯顿博士 | ||
00:13.377 | 链接 | 21.0.1-打开 | 乔瓦尼·库库(Giovanni Cuccu) | ||
00:13.761 | 链接 | 21.0.1-打开 | 胡安·帕雷拉 | ||
00:14.441 | 链接 | 21.0.2-TEM | 彼得·莱瓦特 | ||
00:15.548 | 链接 | 21.0.1-打开 | 何金聪 | 使用不安全 | |
00:17.906 | 链接 | 21.0.1-格拉尔 | 杰森·诺克林 | ||
00:18.770 | 链接 | 22.EA.32-开放 | 李琳 | 使用不安全 | |
00:19.106 | 链接 | 21.0.1-打开 | 罗曼·斯托菲尔 | ||
00:20.151 | 链接 | 21.0.1-格拉尔 | 罗曼·穆辛 | GraalVM 原生二进制文件,使用 Unsafe;偶尔出现SEG断层 | |
00:22.953 | 链接 | 21.0.2-格拉尔 | 海梅·波利杜拉 | GraalVM 本机二进制文件,使用 Unsafe | |
--- | |||||
DNF网络 | 链接 | 21.0.1-打开 | 杰西·范鲁伊 | 输出不正确 | |
DNF网络 | 链接 | 21.0.1-格拉尔 | 苏布拉曼亚姆 | 未在 60 秒内完成 | |
DNF网络 | 链接 | 21.0.1-打开 | Arjen Wisse(阿简·威斯) | 输出不正确 |
必须在系统上安装 Java 21。
此存储库包含两个程序:
dev.morling.onebrc.CreateMeasurements(通过 create_measurements.sh 调用):在此项目的根目录中创建文件measurements.txt,其中包含可配置数量的随机测量值
dev.morling.onebrc.CalculateAverage(通过 calculate_average_baseline.sh 调用):计算文件measurements.txt的平均值
执行以下步骤以运行质询:
使用 Apache Maven 构建项目:
./mvnw clean verify
创建包含 1B 行的测量文件(只需一次):
./create_measurements.sh 1000000000
这将需要几分钟时间。注意:生成的文件的大小约为 12 GB,因此请确保有足够的磁盘空间。
如果你使用非 Java 语言运行质询,则可以使用一个非权威的 Python 脚本来生成测量文件。生成测量值的权威方法是 Java 程序 。
src/main/python/create_measurements.py
dev.morling.onebrc.CreateMeasurements
计算平均测量值:
./calculate_average_baseline.sh
提供的朴素示例实现使用 Java 流 API 处理文件,并在用于结果评估的环境中在 ~2 分钟内完成任务。 它作为比较你自己的实现的基线。
优化它:
以你认为合适的任何方式调整程序以加快速度(只需遵守下面描述的一些规则)。 选项包括并行计算、使用(孵化)Vector API、同时对文件的不同部分进行内存映射、使用 AppCDS、GraalVM、CRaC 等来加速应用程序启动、选择和调整垃圾收集器等等。
CalculateAverage
一个提示是,如果你安装了 jbang,你可以通过 ap-loader 运行 async-profiler 来获取程序的火焰图:
jbang --javaagent=ap-loader@jvm-profiling-tools/ap-loader=start,event=cpu,file=profile.html -m dev.morling.onebrc.CalculateAverage_yourname target/average-1.0.0-SNAPSHOT.jar
或直接在 .java 文件上:
jbang --javaagent=ap-loader@jvm-profiling-tools/ap-loader=start,event=cpu,file=profile.html src/main/java/dev/morling/onebrc/CalculateAverage_yourname
当你运行此操作时,它将在profile.html中生成火焰图。然后,你可以在浏览器中打开它,并查看你的程序将时间花在哪里。
;
\n
\n
要向 1BRC 提交你自己的实现,请按照以下步骤操作:
./create_fork.sh <your_GH_user>
JAVA_OPTS
sdk use java [version]
注意:如果我对实施有疑问,我保留不评估特定提交的权利(即我不会运行你的比特币矿机;)。
如果你想与社区讨论实施 1BRC 的任何潜在想法, 你可以使用此存储库的 GitHub Discussions。 请保持友好和文明。
挑战将持续到 2024 年 1 月 31 日。 在 2024 年 1 月 31 日 23:59 UTC 之后创建的任何提交(即拉取请求)将不予考虑。
结果是通过在 Hetzner AX161 专用服务器(32 核 AMD EPYC™ 7502P (Zen2),128 GB RAM)上运行程序来确定的。
程序从 RAM 磁盘运行(即从磁盘加载文件的 IO 开销不相关),使用计算机的 8 个内核。 每个竞争者必须通过 1BRC 测试套件 (/test.sh)。 该程序用于测量所有条目的启动脚本的执行时间,即测量端到端时间。 每个竞争者连续运行五次。 最慢和最快的运行将被丢弃。 其余三次运行的平均值是该竞争者的结果,并将添加到上面的结果表中。 完全相同的measurements.txt文件用于评估所有竞争者。 有关评估步骤的确切实现,请参阅脚本 evaluate.sh。
hyperfine
如果你参加这个挑战,你可能会学到新的东西,激励他人,并为看到你的名字在上面的记分牌上列出而感到自豪。 有传言说,获胜者也可能收到一件独特的⃣ 1️🐝🏎️ T恤!
问:我可以使用 Kotlin 或 Java 以外的其他 JVM 语言吗?
答:不可以,这个挑战只针对 Java。不过,请随意非正式地分享明显优于任何列出的结果的实现。
问:我可以使用非 JVM 语言和/或工具吗?
答:不可以,这个挑战只针对 Java。不过,请随意非正式地分享有趣的实现和结果。例如,看看 DuckDB 如何完成这项任务会很有趣。
问:我有一个实现,但它不是 Java 的。我可以在某个地方分享吗?
答:虽然非 Java 解决方案不能正式提交到挑战赛中,但欢迎你在 Show and tell GitHub 讨论区分享它们。
问:我可以使用JNI吗?
答:提交必须完全用 Java 实现,即你不能用 C/C++ 编写 JNI 胶水代码。不过,你可以通过 GraalVM 对 Java 代码进行 AOT 编译,方法是对整个应用程序进行 AOT 编译,也可以创建本机库(请参阅此处。
问:measurements.txt文件的编码是什么?
答:文件使用 UTF-8 编码。
问:我可以对数据集中显示的气象站名称做出假设吗?
答:不可以,虽然数据集生成器只使用一组固定的站点名称,但任何解决方案都应使用任意 UTF-8 站点名称
(为简单起见,名称保证不包含 OR 字符)。
;
\n
问:我可以从其他提交中复制代码吗?
答:可以。挑战的主要重点是学习新事物,而不是“获胜”。当你这样做时,请注明相关来源提交的内容。请不要重新提交其他没有或只有微不足道的改进的条目。
问:使用哪个操作系统进行评估?
答:Fedora 39。
问:我的解决方案在我的机器上以 2 秒的速度运行。我是世界上最快的 1BRC-er 吗?
答:可能不是:)1BRC 结果以时钟时间报告,因此不同实现的结果仅在同一台机器上获得时具有可比性。例如,如果一个实现在 32 核工作站上比在 8 核评估实例上更快,则不允许得出任何结论。共享 1BRC 结果时,还应始终共享在同一硬件上运行基线实现的结果。
问:为什么⃣ 1️🐝🏎️?
答:这是项目名称的缩写:One Billion Row Challenge。
外部资源列表,例如博客文章和视频,讨论 1BRC 和具体实现:
此代码库在 Apache 许可证版本 2 下可用。
彼此优秀! 除了获胜之外,这项挑战的目的是获得乐趣并学习新事物。