2024年元旦起,此挑戰正式開放提交,截止日期為2024年1月31日。2024年1月31日23:59 UTC之后創建的提交(即拉取請求)將不予考慮。
“十億行挑戰”(1BRC)是一個有趣的探索,旨在測試 Java 從文本文件中聚合十億行數據的能力。動用你所有的(虛擬)線程,使用 SIMD 技術,優化垃圾回收,或者嘗試其他任何技巧,創建最快的實現方案來解決這個任務吧!
圖片
文本文件包含了一系列天氣站的溫度值。每一行都是一個測量結果,格式為<string: 站點名稱>;<double: 測量值>
,其中測量值恰好有一位小數。以下是一個示例,展示了十行數據:
Hamburg;12.0Bulawayo;8.9Palembang;38.8St. John's;15.2Cracow;12.6Bridgetown;26.9Istanbul;6.2Roseau;34.4Conakry;31.2Istanbul;23.0
任務是編寫一個Java程序,該程序讀取文件,計算每個氣象站的最低、平均和最高溫度值,并將結果按照站點名稱按字母順序排列,并以格式<最低溫度>/<平均溫度>/<最高溫度>的方式輸出到stdout(即標準輸出),并將結果保留一位小數。
{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, ...}
注意:必須使用 Java 21
1brc 代碼庫包含兩個程序:
執行以下步驟來運行挑戰:
./mvnw clean verify
./create_measurements.sh 1000000000
這將需要幾分鐘。注意:生成的文件大小約為 12GB,請確保有足夠的磁盤空間。
./calculate_average.sh
提供的簡單示例實現使用Java流API來處理文件,并在用于結果評估的環境中以約2分鐘完成任務。它作為比較自己實現的基線。
調整 CalculateAverage 程序以加快速度,使用任何你認為合適的方式(只需遵循下面描述的幾個規則)。選項包括并行化計算、使用(孵化中的)向量API、同時內存映射文件的不同部分、使用AppCDS、GraalVM、CRaC等加快應用程序啟動速度的工具,選擇和調整垃圾收集器等等。
SDKMan 提供的任何構建
openjdk.net 上可用的早期訪問版本(包括Valhalla等OpenJDK項目的EA版本)
builds.shipilev.net 上的構建。如果要使用這些渠道不可用的構建,請聯系討論是否可以考慮。
輸入值范圍如下:
要將您自己的實現提交給1BRC,請按照以下步驟操作:
您的實現類的名稱。
程序在您的系統上的執行時間以及相應的規格(CPU、核心數、RAM)。這僅供參考,官方運行時將如下所述確定。
如果您想與社區討論有關實施1BRC的任何潛在想法,可以使用此存儲庫的 GitHub 討論。請保持友好和文明。
結果是通過在 Hetzner Cloud CCX33 實例(8個CPU,32 GB RAM)上運行程序來確定的。時間程序用于測量執行時間,即測量整個時間。每個競爭者將連續運行五次。最慢和最快的運行將被丟棄。剩下三次運行的平均值是該競爭者的結果,并將添加到上面的結果表中。用于評估所有競爭者的完全相同的 measurements.txt 文件。如果您想在Hetzner Cloud上自行測試,請使用這些設置腳本(基于Terraform和Ansible),可能會對您有所幫助。請注意,這將產生費用 :)
圖片
項目地址:https://github.com/gunnarmorling/1brc 快來挑戰吧!
本文鏈接:http://www.www897cc.com/showinfo-26-57923-0.html揚名立萬的機會來了!Java 十億行全球挑戰
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
下一篇: 八張圖講清楚Mmap實現原理