1BRC: .NET [пока] впереди Java, C++ и Rust
От: _FRED_ Черногория
Дата: 23.01.24 13:11
Оценка: 14 (6) +1 :)
Прошу прощения, если уже где-то обсуждается, но искал и не нашёл.

Кратко: в начале января 2024 народ затеял The One Billion Row Challenge (1BRC): посмотреть, на сколько быстро Java сможет прочитать миллиард записей из файла (~13Гб) и провести агрегацию над ними.
  Дословно

The One Billion Row Challenge (1BRC) is a fun exploration of how far modern Java can be pushed for aggregating one billion rows from a text file. Grab all your (virtual) threads, reach out to SIMD, optimize your GC, or pull any other trick, and create the fastest implementation for solving this task!


Потом этим "мильярдом" заинтересовались и другие разработчики. Люди показывает что и объясняют как у них получилось оптимизировать. Может быть интересно.

В результате пока что .NET почти вдвое быстрее Java и заметно быстрее плюсов (у нас же СВ, почему бы и не накинуть?):

  Широкая картинка чтобы не ходить по ссылке

Побеждаем конечно же все мы: это и интересно и позновательно
Help will always be given at Hogwarts to those who ask for it.
Re: 1BRC: .NET [пока] впереди Java, C++ и Rust
От: 4058  
Дата: 23.01.24 19:59
Оценка: +1
Здравствуйте, _FRED_, Вы писали:

_FR>В результате пока что .NET почти вдвое быстрее Java


это понятно

_FR>и заметно быстрее плюсов (у нас же СВ, почему бы и не накинуть?):


так там std::string используется, т.е. это уже не про производительность, также неизвестно на сколько в данном случае было уместно использовать mmap.
Re[2]: 1BRC: .NET [пока] впереди Java, C++ и Rust
От: _FRED_ Черногория
Дата: 24.01.24 01:31
Оценка: 5 (2)
Здравствуйте, 4058, Вы писали:

4>так там std::string используется, т.е. это уже не про производительность, также неизвестно на сколько в данном случае было уместно использовать mmap.


Челлендж, кажется, до конца января, у вас есть возможность заменить std::string на то, что более производительно и показать, как нужно
Help will always be given at Hogwarts to those who ask for it.
Re: 1BRC: .NET [пока] впереди Java, C++ и Rust
От: Разраб  
Дата: 24.01.24 04:21
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Прошу прощения, если уже где-то обсуждается, но искал и не нашёл.


да, уже заценил. вопрос только в том насколько велика разница и сможет ли аналогичный код написать джун?
PS C:\tmp\ProbaConsole> .\WinTime64.exe -- dotnet C:\tmp\ProbaConsole\net8\bin\release\net8.0\net8.dll
sum 1000000000 = 4,99999999067109E+17
PageFaultCount: 983300
PeakWorkingSetSize: 3.742 GiB
QuotaPeakPagedPoolUsage: 203.2 KiB
QuotaPeakNonPagedPoolUsage: 16.07 KiB
PeakPagefileUsage: 3.748 GiB
Creation time 2024/01/24 11:19:22.785
    Exit time 2024/01/24 11:19:33.602
    Wall time:  0 days, 00:00:10.816 (10.82 seconds)
    User time:  0 days, 00:00:02.562 (2.56 seconds)
  Kernel time:  0 days, 00:00:08.437 (8.44 seconds)
PS C:\tmp\ProbaConsole> .\WinTime64.exe -- dotnet C:\tmp\ProbaConsole\net8\bin\release\net8.0\net8.dll
sum 1000000000 = 4,99999999067109E+17
PageFaultCount: 983278
PeakWorkingSetSize: 3.742 GiB
QuotaPeakPagedPoolUsage: 203.2 KiB
QuotaPeakNonPagedPoolUsage: 16.07 KiB
PeakPagefileUsage: 3.743 GiB
Creation time 2024/01/24 11:19:39.593
    Exit time 2024/01/24 11:19:49.310
    Wall time:  0 days, 00:00:09.717 (9.72 seconds)
    User time:  0 days, 00:00:01.937 (1.94 seconds)
  Kernel time:  0 days, 00:00:08.156 (8.16 seconds)
PS C:\tmp\ProbaConsole> .\WinTime64.exe -- .\proba_rust\target\release\proba_rust.exe
sum 1000000000 = 4.99999999067109e17!
PageFaultCount: 2030013
PeakWorkingSetSize: 4.004 GiB
QuotaPeakPagedPoolUsage: 26.11 KiB
QuotaPeakNonPagedPoolUsage: 4.906 KiB
PeakPagefileUsage: 6.013 GiB
Creation time 2024/01/24 11:19:59.401
    Exit time 2024/01/24 11:20:05.872
    Wall time:  0 days, 00:00:06.471 (6.47 seconds)
    User time:  0 days, 00:00:01.828 (1.83 seconds)
  Kernel time:  0 days, 00:00:04.234 (4.23 seconds)
PS C:\tmp\ProbaConsole> .\WinTime64.exe -- .\proba_rust\target\release\proba_rust.exe
sum 1000000000 = 4.99999999067109e17!
PageFaultCount: 2030001
PeakWorkingSetSize: 4.004 GiB
QuotaPeakPagedPoolUsage: 26.11 KiB
QuotaPeakNonPagedPoolUsage: 4.906 KiB
PeakPagefileUsage: 6.013 GiB
Creation time 2024/01/24 11:20:07.156
    Exit time 2024/01/24 11:20:13.266
    Wall time:  0 days, 00:00:06.110 (6.11 seconds)
    User time:  0 days, 00:00:01.984 (1.98 seconds)
  Kernel time:  0 days, 00:00:04.109 (4.11 seconds)



var capacity = 1000_000_000;
var list = new List<int>(1000_000_000);
double s = 0;
for (var e = 0; e < capacity; e++)
{
    list.Add(e);
}
for (var e = 0; e < list.Count; e++)
{
    s += list[e];
}

Console.WriteLine("sum {0} = {1}", list.Count, s);



fn main() {
    let mut v = Vec::new();
    let mut s: f64 = 0.0;
    for e in 0..1000_000_000 {
        v.push(e);
    }

    for e in 0..v.len() {
        s += v[e] as f64;
    }
    println!("sum {:?} = {:?}!", v.len(), s);
}
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: 1BRC: .NET [пока] впереди Java, C++ и Rust
От: kov_serg Россия  
Дата: 24.01.24 04:59
Оценка: +2
Здравствуйте, _FRED_, Вы писали:

Хм 13Гб это они так затейливо скорость SSD тестят?
Re[3]: 1BRC: .NET [пока] впереди Java, C++ и Rust
От: 4058  
Дата: 24.01.24 05:09
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, 4058, Вы писали:


4>>так там std::string используется, т.е. это уже не про производительность, также неизвестно на сколько в данном случае было уместно использовать mmap.


_FR>Челлендж, кажется, до конца января, у вас есть возможность заменить std::string на то, что более производительно и показать, как нужно


Нет, я себе позволить такое не могу, ибо:
— не работаю на любительском уровне (в частности за место на scoreboard и по слухам уникальную футболку)
— почти не пишу на C++ около 20-ти лет
Re[2]: 1BRC: .NET [пока] впереди Java, C++ и Rust
От: _FRED_ Черногория
Дата: 24.01.24 07:28
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Хм 13Гб это они так затейливо скорость SSD тестят?


Где-то читал, что они делают несколько прогонов, а на машинке чуть ли не 128Г памяти, так что файл уже и из кэша может читаться.
Help will always be given at Hogwarts to those who ask for it.
Re[4]: 1BRC: .NET [пока] впереди Java, C++ и Rust
От: Слава  
Дата: 24.01.24 09:59
Оценка: :))) :)
Здравствуйте, 4058, Вы писали:

4>- не работаю на любительском уровне (в частности за место на scoreboard и по слухам уникальную футболку)

4>- почти не пишу на C++ около 20-ти лет

Вот видите, как замечательно. С++ очень быстрый, но никто на нём не пишет, потому что всех от него тошнит.
Re[2]: 1BRC: .NET [пока] впереди Java, C++ и Rust
От: sergii.p  
Дата: 24.01.24 11:01
Оценка: +1 :))
Здравствуйте, 4058, Вы писали:

4>так там std::string используется, т.е. это уже не про производительность


а что с std::string не так? Чем она хуже например шарповской строки? Надо было делать immutable строки в данном случае?
Re[4]: 1BRC: .NET [пока] впереди Java, C++ и Rust
От: _FRED_ Черногория
Дата: 24.01.24 11:30
Оценка:
Здравствуйте, 4058, Вы писали:

4>>>так там std::string используется, т.е. это уже не про производительность, также неизвестно на сколько в данном случае было уместно использовать mmap.

_FR>>Челлендж, кажется, до конца января, у вас есть возможность заменить std::string на то, что более производительно и показать, как нужно
4>Нет, я себе позволить такое не могу, ибо:

А можете ли вы позволить и просто рассказать, чем же плох std::string и mmap в контексте данной задачи? Я знаком с плюсами скорее теоритически, поэтому будет интересно.
Help will always be given at Hogwarts to those who ask for it.
Re[5]: 1BRC: .NET [пока] впереди Java, C++ и Rust
От: 4058  
Дата: 24.01.24 17:51
Оценка: 2 (1) -1
Здравствуйте, _FRED_, Вы писали:

_FR> ... чем же плох std::string


Производительностью, наверно не просто так изобретают различные альтернативы типа std::string_view

_FR> и mmap в контексте данной задачи?


Не известно сколько будет обращений к IO в случае mmap, поэтому возможно уместнее явно читать большими блоками (например по 100 Мб), тем самым сократив кол-во обращений к IO до пары сотен.
Несмотря, что оперативки там много (128 Гб) и в кэш много чего может влезть, но в любом случае, чем меньше будет обращений к IO тем лучше.
Re[3]: 1BRC: .NET [пока] впереди Java, C++ и Rust
От: SkyDance Земля  
Дата: 24.01.24 18:07
Оценка: +1 -1
_FR>Челлендж, кажется, до конца января, у вас есть возможность заменить std::string на то, что более производительно и показать, как нужно

Помнится, в предыдущем варианте "челленджа" надо было опрокидывать на себя ведро холодной воды со льдом.

А еще раньше, вроде как в прорубь нырять.

Одного уровня сравнения. Что то, что другое не имеет отношения к производительности.
Re[4]: 1BRC: .NET [пока] впереди Java, C++ и Rust
От: _FRED_ Черногория
Дата: 24.01.24 18:19
Оценка: +1
Здравствуйте, SkyDance, Вы писали:

SD>Одного уровня сравнения. Что то, что другое не имеет отношения к производительности.


А что имеет? И к производительности чего?

Так-то, даже и любые соревнования по единоборствам не имеют отношения к тому, "кто сильнее", но соревнования позволяют в неких рамках (правилах) выявить лучшего, многое узнать о развитии физиологии и тому подобное, так что мне кажется это полезно.

Главное на мой взгляд позволяют узнать и попробовать способы обхода различных узких мест.
Help will always be given at Hogwarts to those who ask for it.
Re: 1BRC: впереди Java, C++ и Rust
От: r0nd  
Дата: 09.03.24 01:44
Оценка:
On Jan 23, 2024, 4:11 PM, _FRED_ <7138@users.rsdn.org> wrote:

FRE>пока что .NET почти вдвое быстрее Java и заметно быстрее плюсов (у нас же СВ, почему бы и не накинуть?):


Уже нет, решение TW 00:01.535

  Скрытый текст
[пока]
#Result (m:s.ms)ImplementationJDKSubmitterNotesCertificates
100:01.535link21.0.2-graalThomas Wuerthinger, Quan Anh Mai, Alfonso² PeterssenGraalVM native binary, uses UnsafeCertificate
200:01.587link21.0.2-graalArtsiom KorzunGraalVM native binary, uses UnsafeCertificate
300:01.608link21.0.2-graalJaromir HamalaGraalVM native binary, uses UnsafeCertificate
…≪ Dementor 1.6.1 ✪ Lets Play a Game ⚁⚁⚂⚂⚃ ≫
Re: 1BRC: .NET [пока] впереди Java, C++ и Rust
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 09.03.24 01:49
Оценка: +1 :))
Здравствуйте, _FRED_, Вы писали:

_FR>В результате пока что .NET почти вдвое быстрее Java и заметно быстрее плюсов (у нас же СВ, почему бы и не накинуть?):


Странно, как дот-нет быстрее плюсов. Он же тоже на плюсах. Ну, или на сишечке.

Если что-то быстрее плюсов, то мне начинает казаться, что это что-то на плюсах делали индусы, которым была поставлена задача сделать максимально медленно
Маньяк Робокряк колесит по городу
Re[5]: 1BRC: .NET [пока] впереди Java, C++ и Rust
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 09.03.24 01:50
Оценка:
Здравствуйте, Слава, Вы писали:

С>Вот видите, как замечательно. С++ очень быстрый, но никто на нём не пишет, потому что всех от него тошнит.


Плюсовики в дерьмочеленджах не участвуют
Маньяк Робокряк колесит по городу
Re[6]: 1BRC: .NET [пока] впереди Java, C++ и Rust
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 09.03.24 01:54
Оценка:
Здравствуйте, 4058, Вы писали:

_FR>> ... чем же плох std::string


4>Производительностью, наверно не просто так изобретают различные альтернативы типа std::string_view


string_view хорош, когда надо выжать по полной уже из плюсиков. А в менеджед языках имхо и без этого говна хватает.

А std::string и сам по себе очень хорош
Маньяк Робокряк колесит по городу
Re[5]: 1BRC: .NET [пока] впереди Java, C++ и Rust
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 09.03.24 01:55
Оценка: :)
Здравствуйте, _FRED_, Вы писали:

_FR>Главное на мой взгляд позволяют узнать и попробовать способы обхода различных узких мест.


Мне вот интересно, как ты себе представляешь, почему IL языки быстрее плюсов?
Маньяк Робокряк колесит по городу
Re[6]: 1BRC: .NET [пока] впереди Java, C++ и Rust
От: Артём Австралия жж
Дата: 09.03.24 03:27
Оценка: :))
Здравствуйте, Marty, Вы писали:

M>Мне вот интересно, как ты себе представляешь, почему IL языки быстрее плюсов?


Плюсодрочерство в стиле so5team — не про производительность.
Re[7]: 1BRC: .NET [пока] впереди Java, C++ и Rust
От: so5team https://stiffstream.com
Дата: 09.03.24 05:21
Оценка:
Здравствуйте, Артём, Вы писали:

M>>Мне вот интересно, как ты себе представляешь, почему IL языки быстрее плюсов?


Аё>Плюсодрочерство в стиле so5team — не про производительность.


Тёмчик, ну ёж-моёж, зачем ты помянул мое имя всуе? Я же здесь никому не мешал?

Но если уж ты сказал "А", то разверни уж тему, плз. Про "дрочество" в частности.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.