Прошу прощения, если уже где-то обсуждается, но искал и не нашёл.
Кратко: в начале января 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.
Здравствуйте, 4058, Вы писали:
4>так там std::string используется, т.е. это уже не про производительность, также неизвестно на сколько в данном случае было уместно использовать mmap.
Челлендж, кажется, до конца января, у вас есть возможность заменить std::string на то, что более производительно и показать, как нужно
Help will always be given at Hogwarts to those who ask for it.
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);
}
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, 4058, Вы писали:
4>>так там std::string используется, т.е. это уже не про производительность, также неизвестно на сколько в данном случае было уместно использовать mmap.
_FR>Челлендж, кажется, до конца января, у вас есть возможность заменить std::string на то, что более производительно и показать, как нужно
Нет, я себе позволить такое не могу, ибо:
— не работаю на любительском уровне (в частности за место на scoreboard и по слухам уникальную футболку)
— почти не пишу на C++ около 20-ти лет
Здравствуйте, 4058, Вы писали:
4>- не работаю на любительском уровне (в частности за место на scoreboard и по слухам уникальную футболку) 4>- почти не пишу на C++ около 20-ти лет
Вот видите, как замечательно. С++ очень быстрый, но никто на нём не пишет, потому что всех от него тошнит.
Здравствуйте, 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.
Здравствуйте, _FRED_, Вы писали:
_FR> ... чем же плох std::string
Производительностью, наверно не просто так изобретают различные альтернативы типа std::string_view
_FR> и mmap в контексте данной задачи?
Не известно сколько будет обращений к IO в случае mmap, поэтому возможно уместнее явно читать большими блоками (например по 100 Мб), тем самым сократив кол-во обращений к IO до пары сотен.
Несмотря, что оперативки там много (128 Гб) и в кэш много чего может влезть, но в любом случае, чем меньше будет обращений к IO тем лучше.
Здравствуйте, SkyDance, Вы писали:
SD>Одного уровня сравнения. Что то, что другое не имеет отношения к производительности.
А что имеет? И к производительности чего?
Так-то, даже и любые соревнования по единоборствам не имеют отношения к тому, "кто сильнее", но соревнования позволяют в неких рамках (правилах) выявить лучшего, многое узнать о развитии физиологии и тому подобное, так что мне кажется это полезно.
Главное на мой взгляд позволяют узнать и попробовать способы обхода различных узких мест.
Help will always be given at Hogwarts to those who ask for it.
On Jan 23, 2024, 4:11 PM, _FRED_ <7138@users.rsdn.org> wrote: FRE>пока что .NET почти вдвое быстрее Java и заметно быстрее плюсов (у нас же СВ, почему бы и не накинуть?):
Здравствуйте, _FRED_, Вы писали:
_FR>В результате пока что .NET почти вдвое быстрее Java и заметно быстрее плюсов (у нас же СВ, почему бы и не накинуть?):
Странно, как дот-нет быстрее плюсов. Он же тоже на плюсах. Ну, или на сишечке.
Если что-то быстрее плюсов, то мне начинает казаться, что это что-то на плюсах делали индусы, которым была поставлена задача сделать максимально медленно
Здравствуйте, 4058, Вы писали:
_FR>> ... чем же плох std::string
4>Производительностью, наверно не просто так изобретают различные альтернативы типа std::string_view
string_view хорош, когда надо выжать по полной уже из плюсиков. А в менеджед языках имхо и без этого говна хватает.
Здравствуйте, Артём, Вы писали:
M>>Мне вот интересно, как ты себе представляешь, почему IL языки быстрее плюсов?
Аё>Плюсодрочерство в стиле so5team — не про производительность.
Тёмчик, ну ёж-моёж, зачем ты помянул мое имя всуе? Я же здесь никому не мешал?
Но если уж ты сказал "А", то разверни уж тему, плз. Про "дрочество" в частности.