自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

揚(yáng)名立萬的機(jī)會來了!Java 十億行全球挑戰(zhàn)

開發(fā) 前端
“十億行挑戰(zhàn)”(1BRC)是一個有趣的探索,旨在測試 Java 從文本文件中聚合十億行數(shù)據(jù)的能力。動用你所有的(虛擬)線程,使用 SIMD 技術(shù),優(yōu)化垃圾回收,或者嘗試其他任何技巧,創(chuàng)建最快的實(shí)現(xiàn)方案來解決這個任務(wù)吧!

一、前言

2024年元旦起,此挑戰(zhàn)正式開放提交,截止日期為2024年1月31日。2024年1月31日23:59 UTC之后創(chuàng)建的提交(即拉取請求)將不予考慮。

“十億行挑戰(zhàn)”(1BRC)是一個有趣的探索,旨在測試 Java 從文本文件中聚合十億行數(shù)據(jù)的能力。動用你所有的(虛擬)線程,使用 SIMD 技術(shù),優(yōu)化垃圾回收,或者嘗試其他任何技巧,創(chuàng)建最快的實(shí)現(xiàn)方案來解決這個任務(wù)吧!

二、挑戰(zhàn)內(nèi)容

圖片圖片

文本文件包含了一系列天氣站的溫度值。每一行都是一個測量結(jié)果,格式為<string: 站點(diǎn)名稱>;<double: 測量值>,其中測量值恰好有一位小數(shù)。以下是一個示例,展示了十行數(shù)據(jù):

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

任務(wù)是編寫一個Java程序,該程序讀取文件,計(jì)算每個氣象站的最低、平均和最高溫度值,并將結(jié)果按照站點(diǎn)名稱按字母順序排列,并以格式<最低溫度>/<平均溫度>/<最高溫度>的方式輸出到stdout(即標(biāo)準(zhǔn)輸出),并將結(jié)果保留一位小數(shù)。

{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

三、運(yùn)行挑戰(zhàn)

1brc 代碼庫包含兩個程序:

  • dev.morling.onebrc.CreateMeasurements (通過 create_measurements.sh 調(diào)用): 在此項(xiàng)目的根目錄中創(chuàng)建帶有可配置數(shù)量的隨機(jī)測量值的
    measurements.txt 文件。
  • dev.morling.onebrc.CalculateAverage (通過 calculate_average.sh 調(diào)用): 計(jì)算 measurements.txt 文件的平均值。

執(zhí)行以下步驟來運(yùn)行挑戰(zhàn):

  1. 使用Apache Maven構(gòu)建項(xiàng)目:
./mvnw clean verify
  1. 創(chuàng)建 1B 行測量文件(僅運(yùn)行一次):
./create_measurements.sh 1000000000

這將需要幾分鐘。注意:生成的文件大小約為 12GB,請確保有足夠的磁盤空間。

  1. 計(jì)算平均測量值:
./calculate_average.sh

提供的簡單示例實(shí)現(xiàn)使用Java流API來處理文件,并在用于結(jié)果評估的環(huán)境中以約2分鐘完成任務(wù)。它作為比較自己實(shí)現(xiàn)的基線。

  1. 進(jìn)行優(yōu)化:

調(diào)整 CalculateAverage 程序以加快速度,使用任何你認(rèn)為合適的方式(只需遵循下面描述的幾個規(guī)則)。選項(xiàng)包括并行化計(jì)算、使用(孵化中的)向量API、同時(shí)內(nèi)存映射文件的不同部分、使用AppCDS、GraalVM、CRaC等加快應(yīng)用程序啟動速度的工具,選擇和調(diào)整垃圾收集器等等。

四、規(guī)則和限制

  • 可以使用以下任何Java發(fā)行版:

SDKMan 提供的任何構(gòu)建

openjdk.net 上可用的早期訪問版本(包括Valhalla等OpenJDK項(xiàng)目的EA版本)

builds.shipilev.net 上的構(gòu)建。如果要使用這些渠道不可用的構(gòu)建,請聯(lián)系討論是否可以考慮。

  • 不得使用外部依賴庫
  • 實(shí)現(xiàn)必須使用單個Java源文件
  • 計(jì)算必須在應(yīng)用程序運(yùn)行時(shí)進(jìn)行,即不能在構(gòu)建時(shí)處理測量文件(例如,當(dāng)使用GraalVM時(shí))并將結(jié)果直接嵌入到二進(jìn)制文件中

輸入值范圍如下:

  • 站點(diǎn)名稱:非空的UTF-8字符串,最小長度為1個字符,最大長度為100個字符
  • 溫度值:非空的double值,介于-99.9(含)和99.9(含)之間,始終帶有一位小數(shù)
  • 實(shí)現(xiàn)不能依賴于給定數(shù)據(jù)集的特定情況,例如必須支持根據(jù)上述約束條件的任何有效站點(diǎn)名稱和任何數(shù)據(jù)分布(每個站點(diǎn)的測量次數(shù))

五、參加挑戰(zhàn)

要將您自己的實(shí)現(xiàn)提交給1BRC,請按照以下步驟操作:

  • 創(chuàng)建 1brc GitHub 存儲庫的 fork。
  • 創(chuàng)建 CalculateAverage.java 的副本,命名為 CalculateAverage_<your_GH_user>.java,例如 CalculateAverage_doloreswilson.java。
  • 使該實(shí)現(xiàn)變得快速。真的很快。
  • 創(chuàng)建 calculate_average.sh 的副本,命名為 calculate_average_<your_GH_user>.sh,例如 calculate_average_doloreswilson.sh。
  • 調(diào)整該腳本,以引用您的實(shí)現(xiàn)類名。如果需要,在該腳本中通過 JAVA_OPTS 變量提供任何 JVM 參數(shù)。
  • OpenJDK 21 是默認(rèn)選項(xiàng)。如果需要使用自定義 JDK 構(gòu)建,請?jiān)趹?yīng)用程序啟動之前的啟動 shell 腳本中包含 SDKMAN 命令 sdk use java [version]。
  • (可選)如果您想要使用原生二進(jìn)制文件(GraalVM),請調(diào)整 pom.xml 文件以構(gòu)建該二進(jìn)制文件。
  • 針對上游存儲庫創(chuàng)建一個拉取請求,明確說明

您的實(shí)現(xiàn)類的名稱。
程序在您的系統(tǒng)上的執(zhí)行時(shí)間以及相應(yīng)的規(guī)格(CPU、核心數(shù)、RAM)。這僅供參考,官方運(yùn)行時(shí)將如下所述確定。

如果您想與社區(qū)討論有關(guān)實(shí)施1BRC的任何潛在想法,可以使用此存儲庫的 GitHub 討論。請保持友好和文明。

六、評估結(jié)果

結(jié)果是通過在 Hetzner Cloud CCX33 實(shí)例(8個CPU,32 GB RAM)上運(yùn)行程序來確定的。時(shí)間程序用于測量執(zhí)行時(shí)間,即測量整個時(shí)間。每個競爭者將連續(xù)運(yùn)行五次。最慢和最快的運(yùn)行將被丟棄。剩下三次運(yùn)行的平均值是該競爭者的結(jié)果,并將添加到上面的結(jié)果表中。用于評估所有競爭者的完全相同的 measurements.txt 文件。如果您想在Hetzner Cloud上自行測試,請使用這些設(shè)置腳本(基于Terraform和Ansible),可能會對您有所幫助。請注意,這將產(chǎn)生費(fèi)用 :) 

圖片圖片

項(xiàng)目地址:https://github.com/gunnarmorling/1brc 快來挑戰(zhàn)吧!

責(zé)任編輯:武曉燕 來源: JAVA架構(gòu)日記
相關(guān)推薦

2016-12-30 13:50:57

2023-02-17 15:15:53

2025-03-28 12:29:48

2025-03-17 13:48:05

2015-11-30 11:28:04

2024-10-05 11:46:10

2021-04-01 22:36:52

數(shù)字化轉(zhuǎn)型程序員IT

2017-09-15 09:07:00

國美電商零售

2019-07-17 12:43:28

ARVR投資價(jià)值

2024-04-24 13:46:00

AI訓(xùn)練

2021-12-20 22:46:02

手機(jī)蘋果芯片

2022-03-09 10:06:38

網(wǎng)絡(luò)安全CSO

2010-03-01 09:58:23

2012-03-26 09:54:22

2021-05-26 16:10:00

Python 開發(fā)編程語言

2014-12-10 14:30:59

WP8微軟

2020-08-24 09:22:04

創(chuàng)業(yè)市場互聯(lián)網(wǎng)

2021-03-17 07:53:44

芯片 5G芯片服務(wù)器芯片
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號