十亿行挑战


让我们开启 2024 年真正的编码风格 —​我很高兴宣布10 亿行挑战赛(1BRC),将于 1 月 1 日持续到 1 月 31 日。

如果您决定接受的话,您的任务看似简单:编写一个 Java 程序,用于从文本文件中检索温度测量值并计算每个气象站的最低、平均和最高温度。只有一个警告:该文件有1,000,000,000 行!

该文本文件结构简单,每行一个测量值:

Hamburg;12.0
Bulawayo;8.9
Palembang;38.8
St. John's;15.2
Cracow;12.6
...

该程序应打印出每个站点的最小值、平均值和最大值,按字母顺序排列,如下所示:

{Abha=5.0/18.0/27.4, Abidjan=15.7/26.0/34.1, Abéché=12.1/29.4/35.6, Accra=14.7/26.4/33.1, Addis Ababa=2.1/16.0/24.3, Adelaide=4.1/17.3/29.7, ...}

1BRC 挑战赛的目标是为此任务创建最快的实现,并在此过程中探索现代 Java 的优势,并了解您可以将该平台推向多远。因此,抓住所有(虚拟)线程,使用 Vector API 和 SIMD,优化 GC,利用 AOT 编译,或使用您能想到的任何其他技巧。

1BRC 有一些简单的参与规则(请参阅此处了解更多详细信息):

要参加挑战,请从 GitHub 克隆1brc 存储库并按照 README 文件中的说明进行操作。该任务有一个非常基本的实现,您可以将其用作比较的基线,并确保您自己的实现发出正确的结果。一旦您对工作感到满意,请针对上游存储库打开拉取请求,以提交您的实施以应对挑战。

所有提交的内容都将通过在Hetzner Cloud CCX33实例(8 个专用 vCPU、32 GB RAM)上运行该程序进行评估。该time程序用于测量执行时间,即测量端到端时间。每个竞争者将连续运行五次。最慢和最快的运行将被丢弃。剩余三轮的平均值就是该竞争者的结果,并将被添加到排行榜。如果您有任何疑问或想讨论任何潜在的 1BRC 优化技术,请加入GitHub 存储库中的讨论。

至于奖品,通过参加此挑战,您可以学到新东西,激励他人,并为看到您的名字出现在上面的记分牌中而感到自豪。有传言称获胜者还可能获得一件独特的T 恤。

所以不要等待,加入这一挑战,看看 Java 能有多快——我真的很好奇社区会为此提出什么建议。2024 年快乐,编码风格!

发起人:冈纳·莫林