LINUX.ORG.RU

1 биллион челлендж

 ,


2

4

Даётся CSV файл с температурой от метеостанции и названием локации. Таких записей миллиард. Нужно найти максимальную, минимальную и среднюю температуру по каждой локации за минимальное время. Подробнее https://www.morling.dev/blog/one-billion-row-challenge/

  • Срок до 31 января

  • Пишем на джаве (но там вроде и другие ЯП участвовали)

  • Приз имя на доске почёта

Предоставленные реализации на текущий момент https://github.com/gunnarmorling/1brc?tab=readme-ov-file#results

Реализации и челленджи на других ЯП https://github.com/gunnarmorling/1brc/discussions/categories/show-and-tell

★★★★★

Последнее исправление: foror (всего исправлений: 1)

Ответ на: комментарий от firkax

Ват зе хелл? Из-под залогиненного браузера видит, а из другого не видит акк. Акк новый, где-то неделя ему только. ГХ и юзера говорит, что такого нет. Может из-за левацкой почты?

Архив, с генератором данных на Си: https://0x0.st/H6IY.tar

Отдельный 1brc.c: https://0x0.st/H6Ig.c

anonymous
()
Ответ на: комментарий от foror

Зависит от задач, если ты не гранты пилишь, а реально развиваешь цивилизацию, то у тебя со временем будут возникать новые задачи.

Ога. И ключевым ресурсом тут являются не вычислительные мощности а время тех, кто эти задачи решает. Потому что разработчиков гораздо меньше чем компьютеров, и время разработчиков стоит гораздо больше чем компьютерное время.

За оооочень редким исключением, когда задача на кластере работает год - вот тогда превратив этот год в неделю получается реальный профит, и на такую оптимизацию не жалко потратить несколько лет труда команды специалистов.

Но задача рассматриваемая в этом посте к таким не относится.

AntonI ★★★★★
()
Ответ на: комментарий от anonymous

Чуть побыстрее, чем у @firkax

ага, на моей машине, с моими данными - тоже чуть быстрее выглядит ваш вариант.

real 0m19,288s против real 0m25,842s

----

В прошлый раз мы тут играли в похожую игру здесь: Задачка на самый быстрый подсчет встречаемости слов

Там vel на Си и kvpfs на С++, если память не изменяет, чемпионили.

Toxo2 ★★★★
()
Ответ на: комментарий от anonymous

Наверно просто видел реализацию ECS

Да.

в играх и на С++ (и C#) сейчас то же самое, отказ от ООП в пользу ECS

Так пилили бы на скриптоте, не? Просто когда из крестов/джавы ты пытаешься делать скриптоту, то мне этого не понять. Как потом всё это отлаживать и рефакторить, когда у тебя поля в рандомном месте добавляются и не отслеживаются компилятором/IDE?

foror ★★★★★
() автор топика
Последнее исправление: foror (всего исправлений: 1)
Ответ на: комментарий от AntonI

Но задача рассматриваемая в этом посте к таким не относится

Для решения подобных задач есть готовые решения, тот же кликхаус. То, что вы сидели пилили скрипт 20 минут или сколько? На кликхаусе делается за 1 минуту (при опыте работы с инструментом конечно). И отработает достаточно быстро (на порядок быстрее вашего скрипта).

Как видите, люди сели и заморочились сделав униварсальное решение для подобной группы задач. Если уж на то пошло и вы так переживаете за время и цепляетесь к мелочам.

foror ★★★★★
() автор топика
Ответ на: комментарий от Toxo2

real 0m19,288s против real 0m25,842s

Спасибо за замеры) А что за машина у вас?

В прошлый раз мы тут играли в похожую игру

Мой камент там) : Задачка на самый быстрый подсчет встречаемости слов (комментарий)

anonymous
()
Ответ на: комментарий от anonymous

А что за машина у вас?

AMD Zen2 (4650G), около 20ГБ памяти свободно для подобных развлекух, и в районе 10ГБ/с диск, если верить

$ time dd if=/home/Sources/1brc/measurements.txt bs=1M of=/dev/null
13156+1 записей получено
13156+1 записей отправлено
13795370153 байтов (14 GB, 13 GiB) скопировано, 1,34124 s, 10,3 GB/s
real	0m1,344s

Toxo2 ★★★★
()
Последнее исправление: Toxo2 (всего исправлений: 2)
Ответ на: комментарий от foror

вы сидели пилили скрипт 20 минут или сколько?

Не засекал точно, минуту-две максимум.

На кликхаусе делается за 1 минуту (при опыте работы с инструментом конечно).

Сколько времени уйдёт на овладение этим инструментом? Явно больше двух минут.

вы так переживаете за время и цепляетесь к мелочам

Я пытаюсь до Вас донести, что скорость работы приложения далеко не всегда является определяющей. Если конечно Вас заботит развитие цивилизации, а не челленджы за футболку…

AntonI ★★★★★
()
Ответ на: комментарий от AntonI

Ога. И ключевым ресурсом тут являются не вычислительные мощности а время тех, кто эти задачи решает. Потому что разработчиков гораздо меньше чем компьютеров, и время разработчиков стоит гораздо больше чем компьютерное время.

Плохой программист Джон сделал ошибку в коде, из–за которой каждый пользователь программы был вынужден потратить в среднем 15 минут времени на поиск обхода возникшей проблемы. Пользователей было 10 миллионов. Всего впустую ими потрачено 150 миллионов минут = 2.5 миллиона часов. Если человек спит 8 часов в сутки, то на сознательную деятельность у него остается 16 часов. То есть, Джон уничтожил 156250 человеко–дней = 2 427.8 человеко–лет. Средний мужчина живет 64 года, значит Джон убил примерно 6 целых 68 сотых человека.

Как тебе спится, Джон? Серийный ты, программист!

monk ★★★★★
()
Ответ на: комментарий от monk

О, если вы такие вещи начинаете считать, то тут можно начать с бюрократии. Сколько кучка депутатов убили человеко-лет без всяких войн просто ужас, если начать считать. Говорю как ИП-ик.

Ну, или вещи по проще https://3dnews.ru/1098318/evrosoyuz-peresmotrit-zakon-o-faylah-cookie-predupregdayushchie-banneri-budut-pokazivat-rege Сначала создали проблем, теперь решили с ними бороться. И я живу на этом шарике…

foror ★★★★★
() автор топика
Последнее исправление: foror (всего исправлений: 1)
Ответ на: комментарий от AntonI

Все правильно, освобождение части времени человека не гарантирует, что оно будет потрачено рационально, скорее наоборот. А так, 15 минут умственной деятельности хоть немного, но отодвинули деменцию. Может быть.

vvn_black ★★★★★
()
Ответ на: комментарий от anonymous

У github очень интересная лицензия (она и ранее была подобной нынешней).

Поэтому github не такая уж и «бесплатная».
Размести бесплатно, но теперь не только вы являетесь владельцем своих проектов.
Вообщем хитрая лицензия.

Одним словом всё, что на github «является вашим, а теперь стало и нашим».
Никогда не буду размещать свои проекты на github.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 2)
Ответ на: комментарий от monk

Сколько бы умерло человек, если бы программист Джон вообще на неписал свою программу? Целыми поколениями, вон, раньше мёрли, но так и не смогли досчитать хотя бы миллиардного разряда числа пи. И ты ещё не учёл затраты энергии. Сколько человек ежедневно убивает тормозной веб?

anonymous
()
Ответ на: комментарий от anonymous

Установите https://ru.wikipedia.org/wiki/Mathematica.
В ней напишите выражение типа A = пи и укажите значность дробной части после выражения, например 10000000.
Мгновенно получите правильный результат (миллиард не пробовал).)

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 3)
Ответ на: комментарий от anonymous

Это называется shadow ban - подлая штука, гитхаб такими развлекается.

Крысиный бан ещё это называется. Хоть бы где-то сообщили, что мой акк «помечен» (flagged).

Написал жалобу, сказал, что жду извинений.

Гитхаб - ужасная платформа, никому не рекомендую.

anonymous
()
Ответ на: комментарий от ugoday

возникают разные ограничения

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

rumgot ★★★★★
()
Ответ на: комментарий от AntonI

Сколько времени уйдёт на овладение этим инструментом?

Не будем впадать в крайности =)

Наверняка такие данные складывают в базку и перекидывают в хранилище оставляя в базке «последние N (или лучше даже М)». Более того, всякие разные частовостребываемые средние, минимумы и прочие сигма-квадраты автоматом считают один раз и тоже складируют.

Это никак не отменяет того, что для одноразового подсчёта случайной фигни сегодня подходит любой сколько-нибудь известный пользователю ЯП.

«Цивилизационная» проблема не в ниосиляторах-жабки-пишущих-тормозную-скриптоту-на-бидоне, а в том, что для многих пользователей скриптуемая-не-приходя-в-сознание задача потребует двухчасового поиска видосика на ютуб объясняющего как посчитать минимум в ёкселе (бонус: ещё полчаса и они могут посчитать и максимум тоже).
А если данные не лезут в ёксель, то задача переходит в разряд «учоные поражены тем, что обычный …»

frob ★★★★★
()
Ответ на: комментарий от ugoday

Самая адекватная позиция. Позиция того, кто находится в сердце процесса. Как противовес ублюку маркетологу, который ни фига не понимает в сути происходящего, зато умеет разноцветные линии рисовать и поддерживать необходимость армии дормоедов, которые ничего не делают целый день.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 2)
Ответ на: комментарий от AntonI

И получил бы от этого удовольствие. А так вместо этого получил лишнее страдание.

Так-то и разработчик сэкономленное от разработки программы время потратит на тех же котиков и новости.

Поэтому тезис «время разработчиков стоит гораздо больше чем компьютерное время» верен только для программ, которые работают недолго и имеют очень малое количество пользователей.

Машинное время для персоналки стоит порядка 5 рублей в час. Ошибка на 15 минут на 10 миллионов пользователей стоит 12,5 миллиона рублей. За 12,5 миллионов рублей можно заставить разработчика работать пару лет.

monk ★★★★★
()
Ответ на: комментарий от rumgot

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

Нативные инструменты почти всегда идут в комплекте с неопределённым поведением. Получается быстро, но иногда совсем неправильно.

Языка без UB быстрее джавы вроде нет.

monk ★★★★★
()
Ответ на: комментарий от monk

получил лишнее страдание

страданья дают прозренье
прозрение - благодать!(с)

разработчик сэкономленное от разработки программы время потратит на тех же котиков и новости.

В современном постмодернистком обществе основным ресурсом явяляется даже не время, а загадочные «душевные силы». И все равно нет - если мы говорим про околонаучные задачи, то поверьте - у нас тут разработчиков катастрофически не хватает, и их время/силы стоят значительно дороже чем компьютерное время. Особенно если это время работы персоналки а не кластера.

Ошибка на 15 минут на 10 миллионов пользователей стоит 12,5 миллиона рублей. За 12,5 миллионов рублей можно заставить разработчика работать пару лет.

А как эти деньги собрать? И если бы все было так благостно - софт на десктопах не скатывался бы в гавно ни по надежности, ни по производительности…

AntonI ★★★★★
()
Ответ на: комментарий от frob

Наверняка такие данные складывают в базку и перекидывают в хранилище оставляя в базке «последние N (или лучше даже М)».

Я ХЗ как там у метеорологов, а так то вообще учОные данные обычно в файлах хранят, СУБД не очень популярны по ряду причин. Ну и да, средние по дцати годам (или сколько там в это файле) считать довольно бессмысленно, да и средних бывает много разных - медианное, геометрическое и т.д. и т.п. Да и дисперсию почему то посчитать забыли… я бы уж тогда функцию распределения строил, и опять таки - сезонные колебания надо как то отслеживать;-)

А если данные не лезут в ёксель

Я видал мегаспецов (без сарказма) в геофизике, которые в икселе творили чудеса. Там APM побольше чем у чемпиона по старкрафту будет. Мне так скрипт как то ближе, а они все мышью тарабанят…

Хуже бывает когда иксель лажает и потом на этой лаже статью пишут. А потом отпровергают. Кажись в экономике была эпичная история.

AntonI ★★★★★
()
Ответ на: комментарий от AntonI

А как эти деньги собрать?

У техники есть ресурс, условный офисный комп за пятьдесят тысяч и служит пять лет. Интересная в целом арифметика получается.

софт на десктопах не скатывался бы в гавно ни по надежности, ни по производительности…

Вирусов под венду не видел со времён ХР, синих экранов уже давненько.

Ygor ★★★★★
()
Ответ на: комментарий от rumgot

Адекватность бывает разная. У программиста она заключается в красивом коде. У капиталиста — в том, чтобы денежка капала. У админа — чтобы сервер не падал и его не приходилось поднимать среди ночи. У менеджера — чтобы проблем (у него) не было. И все правы.

и поддерживать необходимость армии дормоедов, которые ничего не делают целый день.

Слишком самокритично для вечера сочельника. Давайте быть к себе добрее.

ugoday ★★★★★
()
Ответ на: комментарий от Ygor

Вирусов под венду не видел со времён ХР, синих экранов уже давненько.

Обновления ломающие систему что под виндой, что под бубунтой я наблюдаю регулярно.

AntonI ★★★★★
()
Ответ на: комментарий от rtxtxtrx

Ну питон тормозом оказался с его 305 секундами:

❯ python test.py      
min=-40.0, max=40.0, avg=0.0006985198499998723
                                                                                                                        
/tmp   305s
❯ cat test.py   
with open('data.txt') as fp:
  min = 100.0
  max = -100.0
  avg = 0.0
  count = 0
  for line in fp:
    val = float(line[line.find(';') + 1:])
    min = val if val < min else min
    max = val if val > max else max
    avg += val
    count += 1
avg /= count
print(f"{min=}, {max=}, {avg=}")
                                                                                                                        
/tmp   
❯ du -sh /tmp/data.txt
7.6G    /tmp/data.txt
                                                                                                                        
/tmp   
❯ tail /tmp/data.txt  
s;-19.61
s;-39.28
s;0.34
s;23.89
s;25.68
s;37.79
s;39.99
s;-6.86
s;31.15
s;-29.94
                                                                                                                        
/tmp   
❯ cat gen.py        
import random

with open('data.txt', 'w') as fp:
  for i in range(1_000_000_000):
    fp.write(f"s;{round(random.random()*80-40,2)}\n")

Медленее 45 секунд в лоб на джаве (там результат для тридрипера???). Но я не понимаю, что этот тест меряет…

Я попробовал на C++ наговнокодить тож самое:

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

int main() {
  ifstream file("/tmp/data.txt");
  float min = 100.0;
  float max = -100.0;
  float avg = 0.0;
  int count = 0;
  if (file.is_open()) {
    string line;
    string val;
    float temp;
    while (getline(file, line)) {
      val = line.substr(line.find(";") + 1);
      temp = stof(val);
      min = temp < min ? temp : min;
      max = temp > max ? temp : max;
      avg += temp;
      ++count;
    }
  }
  avg /= count;
  cout << "min=" << min << ", max=" << max << ", avg=" << avg << "\n";
}

Вышло:

❯ ./test              
min=-40, max=40, avg=-0.000427344
                                                                                                                        
/tmp   107s
❯

Нужно найти максимальную, минимальную и среднюю температуру по каждой локации за минимальное время

я только сейчас это прочел. там нужно мин/макс/сред для каждой деревни найти, а не просто… Все равно C++ расстраивает и выходит ненамного быстрее пистона, а потому Java тем более не нужна

rtxtxtrx ★★
()
Последнее исправление: rtxtxtrx (всего исправлений: 2)
Ответ на: комментарий от AntonI

Просто напомню:

monk ★★★★★ (06.01.24 23:35:11 TRT) химическое оружие в Ираке, падение башен-близнецов, падение боинга на Украине, коронавирус, отравление Навального новичком

thunar ★★★★★
()
Ответ на: комментарий от thunar

@monk тут один из самых вменяемых и компетентных людей, как программист он на три головы выше меня.

И, если уж на то пошло, политические взгляды человека никак не связаны с его адекватностью/неадекватностью - это же не вера в лунный заговор…

AntonI ★★★★★
()
Ответ на: комментарий от rumgot

где требуется наибольшая производительность

Создают новый CPU с архитектурой заточенной под задачу. У кого хватает мозгов ещё создают новый ЯП и компилятор под него. Но не у всех есть такие возможности.

Поэтому большинство останавливается на джаве и критические участи выносят на ассемблер/си/cuda для конкретной архитектуры. Безответственные останавливаются на крестах. Кто по тупее на ржавом.

foror ★★★★★
() автор топика
Последнее исправление: foror (всего исправлений: 1)
Ответ на: комментарий от foror

Наконец подвезли SIMD https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_merykitty.java Правда только на парсинг. Выигрыш в 3.75% по сравнению с классическим циклом. Хотя там код хеш карты более грамотный, так что хз. Первые места начинает занимать branchless подход.

foror ★★★★★
() автор топика
Ответ на: комментарий от AntonI

у нас тут разработчиков катастрофически не хватает, и их время/силы стоят значительно дороже чем компьютерное время. Особенно если это время работы персоналки а не кластера.

Это всё для одноразовых программ.

А как эти деньги собрать?

С пользователей же. Все франчайзи 1С живут именно на том, что пользователю дешевле заплатить один раз пару тысяч рублей, чем каждый день тратить лишних 15 минут на какую-то операцию.

Для тиражных решений ещё более заметно. Пользователь, при наличии выбора, почти всегда купит чуть более дорогую программу, если с ней результат его работы получается быстрее. Ведь даже MS Office покупают несмотря на наличие бесплатного Libre.

софт на десктопах не скатывался бы в гавно ни по надежности, ни по производительности

Потому что привязка к поставщику. Если ты успел вывести ПО на рынок на месяц раньше конкурента, уже не важно, насколько хорошее ПО у конкурента. Клиенты твоё ПО уже купили. И ПО конкурента теперь должно быть лучше не на разницу стоимости, а на всю стоимость этого ПО плюс стоимость переноса данных из твоего ПО в ПО конкурента.

К тому же появилось много бесплатного/условно бесплатного софта, разработчики которого вообще никому ничего не обязаны, но пользователи выбирают его, так как бесплатно.

monk ★★★★★
()
Ответ на: комментарий от foror

Какие-то вялые симды, к тому же и избыточные. Он симдами, или их джава-подобием, зачем-то ищет значение в хешмапе.

И ещё неизвестно сколько там тредов, вроде как на Эпиках запускают, но точные спеки не афишируются. Там может быть от 8 до 192 тредов.

Results are determined by running the program on a Hetzner Cloud CCX33 instance (8 dedicated vCPU, 32 GB RAM).

С сайта Хетцнера:

AMD Milan EPYC™ 7003 and AMD Genoa EPYC™ 9654

CCX33 vCPU 8 AMD

Судя по результатам конкурса, код запускается на каких-то младших процах серий. Не может же жабка быть настолько унылой.

anonymous
()
Ответ на: комментарий от foror

Создают новый CPU с архитектурой заточенной под задачу

Это слишком затратно. Написать на том же ассемблере особо узкие участки (которых не особо много) дешевле будет.

У кого хватает мозгов ещё создают новый ЯП и компилятор под него

Создание новых ЯП сейчас - это такой спорт и признак престижа. Практической пользы от этого не особо много. Если кто-то считает себя умнее от этого - это просто чсв.

Безответственные останавливаются на крестах

Кто по тупее на ржавом

Ой да ты шо :-)

Наоборот, кто тупее учит, что проще, т.е. джаву, жс и т.п.

rumgot ★★★★★
()
Ответ на: комментарий от foror

CPU не создают, юзают FPGA - и то крайне редко, для всяких реалтайм систем как правило. В HPC умеют считать деньги, кластер на массовых CPU всегда забодает узкозаточенную разработку за те же деньги.

С новыми ЯП и компиляторами та же история. Основной ЯП HPC это плюсы, иногда по старой памяти фортран. Питон и ко для верхнего управляющего слоя и кодогенерации. Ява там почти не встречается.

Такие дела.

AntonI ★★★★★
()
Ответ на: комментарий от rumgot

Создание новых ЯП сейчас - это такой спорт и признак престижа. Практической пользы от этого не особо много.

Так потому что одни идиоты со смузи на перевес. Последние умные люди ЯП в 80-90-х создавали. Пока голяк на умных, одно ЧСВ.

foror ★★★★★
() автор топика