Привет, ребят - знаю, ноунейм тут, да и по жизни, тоже. Тем не менее, не преследуя и капли commerce, уже пару лет как веду свой небольшой tg channel - про оптимизации, фишки процессора и программирование в целом. Интересно ли вам такое? https://t.me/pro_optimise P.S ищу новую аудиторию - всегда мотивация писать больше, лучше и интереснее.
Посмотрел. Детский сад какой-то. Лучше бы статьи или мини-заметки писал, а не изрыгал в ТГ-канал всё, что ни попадя.
Привет, не изрыгаю что ни попадя - устраиваю интересные опросники и квизы, статьи пишу. Например, вот моя статья про новый БезКешевый способ перевода десятичных чисел в строки: https://habr.com/ru/post/522820/ А вот, например, про Диаграммы Вороного и способ, нигде в РУ не описанный: https://habr.com/ru/post/314852/ Вообще, хотел бы отметить, что многие интересные чуваки по типу Антона Полухина и прочих довольны контентом, подписаны и читают, а ребята из google рассматривают мой метод перевода чисел в строки, как основной. Кстати, посмотрел инфо о тебе, и могу лишь сказать, что да, круто что работаешь со звуком и видимо Дед Программирования. Круто - круче меня, это точно. Well Done! --- Сообщение объединено, 8 дек 2020 --- Кстати, в будущем планирую описать как переводят Числа с плавающей запятой(IEE754) в строки и обратно, и как это делать быстро(ага, ресерч этой темы идет до сих пор), ну и наверное, напишу WorkStealing ThreadPool, который работает шустрее чем Intell TBB Sheduler, OMP а на процессорах ARM(weak mm) - в разы шустрее.
Вы, конечно, извините, но ТГ-канал выглядит как полная помойка. Читать это всё очень тяжело. Надо над оформлением работать. То есть, тут важна форма речи, последовательность изложения. Сейчас как-то всё слишком сумбурно выглядит - в этом и претензия, потому я и назвал "детским садом". Я не умаляю ваших заслуг в оптимизации, но важно же ещё и донести свою мысль хорошо до других людей.
Согласен - буду работать над жэтим моментом. Честно. Спасибо за конструктивный отзыв и критику. Вот такое - грех не уважать.
И ещё, раз уж пошло о критике. Объясню на примере статьи: https://habr.com/ru/post/314852/ В чём явный недостаток? Явный недостаток - в последовательности. Рассказываю как человек, который ничего ранее не знал о построении диаграммы Вороного. Вы привели ссылку на оригинальную статью, но прежде, чем начать говорить о сложности и асимптоматике реализации, неплохо бы освежить информацию в памяти для человека, который не читал оригинальную статью. То есть, буквально одним абзацем пояснить: что такое алгоритм Вороного, для чего он нужен, какое частоупотребимое его применение. То есть, я ещё ничего не знаю об алгоритме, а меня уже начинают его асимптоматикой грузить. И только, пролистав разделы, обнаруживаю, что то, что мне нужно было в начале, находится в конце статьи. То есть, логическая последовательность "для чего это нужно - примеры - варианты реализации - конкретное описание алгоритма - оценка алгоритма" полностью перевернулась с ног на голову, а это очень сложно воспринимать.
ioann_V, > про оптимизации Реши вот эту задачу более эффективно https://wasm.in/threads/ukazatel-v-opisatel.33644/ тебя тут тогда будут уважать и я респектов выражу. 200mips(+1/3 по профайлу) реализуешь тогда я тебе свой акк отдам.
Написал в личку. Это не значит, что я брошусь и завтра дам результат, но значит, что мне это интересно. Много работы, нету выходных - поэтому так.
ioann_V, А толку то в личку писать, ты это решить не сможешь. Так как хэши полный бред, адреса произвольны. Одни понты выше уже сказали. А в ядерных синхронизациях ты очевидно нуби. > ного работы, нету выходных - поэтому так. А зачем ты сюда пришёл тогда, если у тебя времени нет размышлять. Тут всё сложно и нужно думать.
Я не понимаю, в чем твоя претензия. Я не понтоваться пришел. Думать надо везде и всегда, что ты мне этим хочешь сказать? Я лишь отметил, почему результата не будет завтра - остальное твое домыслы. Я не работаю под Win, да, но это не значит что я не понимаю, как устроены примитивы синхронизации и все в этом духе - как ты делаешь выводы, я не понимаю. Мой вопрос, к тебе, в личке был лишь в том, почему ты не используешь массив, но видимо ответ, в том и состоит, что ты черпаешь память ядра ала NtAlloc... И конечно, я реверсил в свое время, как Win выделяет память, как работает ее хиповый аллокатор. --- Сообщение объединено, 8 дек 2020 --- Забавно, что в своей теме ты никому не пишешь, что хеши это полный бред, хотя я конечно и про Perfect Hashing отметил, который, правда, я не знаю для скольки значения мы можем посчитать(не знаю лимитов твоей задачи). Если хочешь чтобы я попробовал решить, то хотябы объясни какие лимиты стоят и почему - остальное, просто демагогия и какие то выводы, высосанные из пальца. Сам я работаю под *nix. Но более верный ответ будет, вот на это > А зачем ты сюда пришёл тогда, если у тебя времени нет размышлять. Тут всё сложно и нужно думать. У тебя спросить забыл, зачем мне сюда приходить. Регистрация открытая - вот и пришел, я же о ВАСМЕ давно знаю.
ioann_V, Ты создал тему в виде приветствия, написал что решаешь задачи по оптимации - я привёл пример задачи которая важна на этом ресурсе и втором который закрылся, но ты не знаешь почитай может https://wasm.in/threads/vizory-bolshe-ne-nuzhny.33901/ Это последний актуальный ресурс в ру и если ты сюда пришёл, то сначала ознакомься с атмосферой на форуме. Ты пришёл и начал напрягать человека который давно тут очень много лет и понимает суть, а есчо и пост написал длинный тебе прежде такой не писавши. Давай решай оптимизируй или иди в комерс.
Не понимаю, кого чем напряг - вот этот момент в тумане. Мне о чем-то пишут, я отвечаю. Я не пишу что кто-то чего-то не знает, что я кого-то лучше и так далее. Я понимаю, что многие площадки, на которых я вырос, с которых начинал свой путь - закрываются, или просто скатываются до уровня болота. Я пришел сюда, может чем-то быть полезным и все в таком духе. Отвечаю, без грубости, критику принимаю спокойно и готов этой критике, если она обоснована - следовать. Пока я не понял, кого и чем я напряг ЧСХ. Мне интересны какие-то задачи, но я бы попросил без указания, что мне делать. Откуда столько вражды - не понимаю. Все что я делаю, я делаю потому что и сам, вырос на таких вот энтузиастах, писавших какие то интересные вещи - как Дань благодарности, например, и конечно многие журнальчики и езины, я помню также. Я почитаю, ознакомлюсь. Я тебе в личку, задал какие то конкретные вопросы, по типу - почему не Массив линейный, например - это все имеет отношение к решению задачи оптимизации, а ты видимо хочешь с меня, помимо того чем я занимаюсь, еще и какие то понимания в написании Деббагеров и Гипервизоров получить, а это как с оптимизацией связано?
ioann_V Реши покажи что ты что то можешь и знаешь. А эти большие посты сводятся к психиатрии и тут в этом у тебя тоже скилла нет иначе бы не портил клаву. Ты пришёл заявил что решу всё по оптимизации - давай решай, это ключевая задача сейчас.
> Ты пришёл заявил что решу всё по оптимизации Такого заявления не было. Это ложь, но подумать можно.
Напиши, пожалуйста, ограничения. У меня есть куча идей, как это можно сделать: от банально линейного массива(почему нельзя - ты не пишешь), до, скажем R-Tree, Hat-Tries, bitmap trie и прочие штуки. В твоей задаче самое важное, это кешированность данных, возможность распараллеливания, скажем Fine Grained Locking без false sharing, конечно управление памятью тут тоже играет роль и еще какие-то моменты по типу чейна цепочки инструкций процессора. Но я так и не понял ограничений, ты сначала задачу поставь грамотно, я же не местный, тогда и будет о чем говорить, а так можешь смело утверждать что я тупой и ничего не понимаю.
ioann_V, Всё описано подробно, быстрая синхронная адресная трансляция. Ваши деревья не годятся там профайл у авл в первом посте смешной.
АВЛ дерево, это разновидность самобалансирующегося бинарного дерева поиска и дает ассимптотику в n log n, те деревья, о которых я говорю - ничего не сортируют, а используют общие префиксы адресов, как одну ячейку. Это позволяет за O(1) делать все твои операции, хотя и не идеально ляжет в кеш, зато, при многопоточности позволяет блокировать одну ветку, а другие оставлять доступными. И это лишь один из вариантов, еще есть sparse_set - это ксатти, линейная штука, но занимает @*n памяти, но ее можно сделать странично, и не выделять там то, что у тебя хранится. Ты уж для начала, разберись, чем деревья друг от друга отличаются, и почему в JeMalloc - известном аллокаторе, используются именно они. Хорошо, прогуглю всю инфу, коль тебе вломы писать о лимитах. А то я знаешь и векторизацию использую, и GCC компилирую. Но когда все это сделаю - не скажу, сегодня работа и до конца года, тоже.
Индий просто на ровном месте докопался и стал писюнами меряться с новым членом комьюнити. За такой бред надо банить и банить надолго. TermoSINteZ и Mikl___, если вы баните за флуд, то самое время вступить и тут.
ioann_V, кстати по поводу бенчмарков. Предлагаю вот такой вот мини-фреймворк попробовать: https://github.com/sadko4u/lsp-test-fw Можно писать performance-тесты в таком виде: https://github.com/sadko4u/lsp-dsp-lib/blob/master/src/test/ptest/float/sanitize.cpp Которые будут выдавать вот такие таблички: Код (Text): Statistics of performance test 'dsp.float.sanitize': ┌Case──────────────────────┬Time[s]┬─────Iter┬Samp[s]┬──────Est┬──Perf[i/s]┬Cost[us/i]┬Rel[%]┐ │generic::sanitize1 x 128 │ 5.00│ 44940000│ 5.00│ 44936647│ 8987329.55│ 0.1113│100.00│ │sse2::sanitize1 x 128 │ 5.00│140150000│ 5.00│140143469│28028693.86│ 0.0357│311.87│ │avx::sanitize1 x 128 │ 5.00│145950000│ 5.00│145940980│29188196.17│ 0.0343│324.77│ │avx2::sanitize1 x 128 │ 5.00│145580000│ 5.00│145575196│29115039.20│ 0.0343│323.96│ ├──────────────────────────┼───────┼─────────┼───────┼─────────┼───────────┼──────────┼──────┤ │generic::sanitize2 x 128 │ 5.00│ 47670000│ 5.00│ 47661773│ 9532354.72│ 0.1049│100.00│ │sse2::sanitize2 x 128 │ 5.00│184660000│ 5.00│184654534│36930906.85│ 0.0271│387.43│ │avx::sanitize2 x 128 │ 5.00│199550000│ 5.00│199540861│39908172.21│ 0.0251│418.66│ │avx2::sanitize2 x 128 │ 5.00│194820000│ 5.00│194810220│38962044.11│ 0.0257│408.73│ ╞══════════════════════════╪═══════╪═════════╪═══════╪═════════╪═══════════╪══════════╪══════╡ │generic::sanitize1 x 256 │ 5.00│ 22870000│ 5.00│ 22867617│ 4573523.44│ 0.2186│100.00│ │sse2::sanitize1 x 256 │ 5.00│ 71350000│ 5.00│ 71340568│14268113.76│ 0.0701│311.97│ │avx::sanitize1 x 256 │ 5.00│ 73650000│ 5.00│ 73645419│14729083.85│ 0.0679│322.05│ │avx2::sanitize1 x 256 │ 5.00│ 74730000│ 5.00│ 74721974│14944394.97│ 0.0669│326.76│ ├──────────────────────────┼───────┼─────────┼───────┼─────────┼───────────┼──────────┼──────┤ │generic::sanitize2 x 256 │ 5.00│ 24800000│ 5.00│ 24793732│ 4958746.43│ 0.2017│100.00│ │sse2::sanitize2 x 256 │ 5.00│ 93970000│ 5.00│ 93969793│18793958.65│ 0.0532│379.01│ │avx::sanitize2 x 256 │ 5.00│101040000│ 5.00│101031796│20206359.24│ 0.0495│407.49│ │avx2::sanitize2 x 256 │ 5.00│101440000│ 5.00│101437768│20287553.67│ 0.0493│409.13│ ╞══════════════════════════╪═══════╪═════════╪═══════╪═════════╪═══════════╪══════════╪══════╡ │generic::sanitize1 x 512 │ 5.00│ 11710000│ 5.00│ 11706303│ 2341260.63│ 0.4271│100.00│ │sse2::sanitize1 x 512 │ 5.00│ 35170000│ 5.00│ 35161469│ 7032293.97│ 0.1422│300.36│ │avx::sanitize1 x 512 │ 5.00│ 36650000│ 5.00│ 36646613│ 7329322.77│ 0.1364│313.05│ │avx2::sanitize1 x 512 │ 5.00│ 38280000│ 5.00│ 38271404│ 7654280.85│ 0.1306│326.93│ ├──────────────────────────┼───────┼─────────┼───────┼─────────┼───────────┼──────────┼──────┤ │generic::sanitize2 x 512 │ 5.00│ 12700000│ 5.00│ 12693150│ 2538630.16│ 0.3939│100.00│ │sse2::sanitize2 x 512 │ 5.00│ 46030000│ 5.00│ 46029420│ 9205884.01│ 0.1086│362.63│ │avx::sanitize2 x 512 │ 5.00│ 48780000│ 5.00│ 48772147│ 9754429.54│ 0.1025│384.24│ │avx2::sanitize2 x 512 │ 5.00│ 50970000│ 5.00│ 50966473│10193294.62│ 0.0981│401.53│ ╞══════════════════════════╪═══════╪═════════╪═══════╪═════════╪═══════════╪══════════╪══════╡ │generic::sanitize1 x 1024 │ 5.01│ 5720000│ 5.00│ 5712326│ 1142465.21│ 0.8753│100.00│ │sse2::sanitize1 x 1024 │ 5.00│ 17520000│ 5.00│ 17515572│ 3503114.41│ 0.2855│306.63│ │avx::sanitize1 x 1024 │ 5.00│ 18060000│ 5.00│ 18050653│ 3610130.67│ 0.2770│315.99│ │avx2::sanitize1 x 1024 │ 5.00│ 18800000│ 5.00│ 18797233│ 3759446.61│ 0.2660│329.06│ ├──────────────────────────┼───────┼─────────┼───────┼─────────┼───────────┼──────────┼──────┤ │generic::sanitize2 x 1024 │ 5.01│ 6260000│ 5.00│ 6253305│ 1250661.04│ 0.7996│100.00│ │sse2::sanitize2 x 1024 │ 5.00│ 23270000│ 5.00│ 23267063│ 4653412.74│ 0.2149│372.08│ │avx::sanitize2 x 1024 │ 5.00│ 24700000│ 5.00│ 24692034│ 4938406.87│ 0.2025│394.86│ │avx2::sanitize2 x 1024 │ 5.00│ 24730000│ 5.00│ 24720606│ 4944121.23│ 0.2023│395.32│ ╞══════════════════════════╪═══════╪═════════╪═══════╪═════════╪═══════════╪══════════╪══════╡ │generic::sanitize1 x 2048 │ 5.01│ 2930000│ 5.00│ 2923519│ 584703.83│ 1.7103│100.00│ │sse2::sanitize1 x 2048 │ 5.00│ 8990000│ 5.00│ 8989699│ 1797939.95│ 0.5562│307.50│ │avx::sanitize1 x 2048 │ 5.00│ 9320000│ 5.00│ 9313839│ 1862767.97│ 0.5368│318.58│ │avx2::sanitize1 x 2048 │ 5.00│ 9410000│ 5.00│ 9401271│ 1880254.37│ 0.5318│321.57│ ├──────────────────────────┼───────┼─────────┼───────┼─────────┼───────────┼──────────┼──────┤ │generic::sanitize2 x 2048 │ 5.01│ 3130000│ 5.00│ 3126548│ 625309.78│ 1.5992│100.00│ │sse2::sanitize2 x 2048 │ 5.00│ 11600000│ 5.00│ 11598777│ 2319755.50│ 0.4311│370.98│ │avx::sanitize2 x 2048 │ 5.00│ 12670000│ 5.00│ 12663744│ 2532748.82│ 0.3948│405.04│ │avx2::sanitize2 x 2048 │ 5.00│ 12670000│ 5.00│ 12660231│ 2532046.27│ 0.3949│404.93│ ╞══════════════════════════╪═══════╪═════════╪═══════╪═════════╪═══════════╪══════════╪══════╡ │generic::sanitize1 x 4096 │ 5.02│ 1470000│ 5.00│ 1462865│ 292573.00│ 3.4180│100.00│ │sse2::sanitize1 x 4096 │ 5.00│ 4490000│ 5.00│ 4489051│ 897810.38│ 1.1138│306.87│ │avx::sanitize1 x 4096 │ 5.00│ 4640000│ 5.00│ 4637922│ 927584.44│ 1.0781│317.04│ │avx2::sanitize1 x 4096 │ 5.01│ 4590000│ 5.00│ 4584568│ 916913.64│ 1.0906│313.40│ ├──────────────────────────┼───────┼─────────┼───────┼─────────┼───────────┼──────────┼──────┤ │generic::sanitize2 x 4096 │ 5.02│ 1590000│ 5.00│ 1585036│ 317007.32│ 3.1545│100.00│ │sse2::sanitize2 x 4096 │ 5.00│ 5960000│ 5.00│ 5958331│ 1191666.33│ 0.8392│375.91│ │avx::sanitize2 x 4096 │ 5.01│ 6130000│ 5.00│ 6122419│ 1224483.84│ 0.8167│386.26│ │avx2::sanitize2 x 4096 │ 5.00│ 6340000│ 5.00│ 6338870│ 1267774.08│ 0.7888│399.92│ ╞══════════════════════════╪═══════╪═════════╪═══════╪═════════╪═══════════╪══════════╪══════╡ │generic::sanitize1 x 8192 │ 5.06│ 730000│ 5.00│ 721784│ 144356.90│ 6.9273│100.00│ │sse2::sanitize1 x 8192 │ 5.01│ 2210000│ 5.00│ 2203822│ 440764.54│ 2.2688│305.33│ │avx::sanitize1 x 8192 │ 5.01│ 2270000│ 5.00│ 2267518│ 453503.69│ 2.2051│314.15│ │avx2::sanitize1 x 8192 │ 5.01│ 2300000│ 5.00│ 2297391│ 459478.22│ 2.1764│318.29│ ├──────────────────────────┼───────┼─────────┼───────┼─────────┼───────────┼──────────┼──────┤ │generic::sanitize2 x 8192 │ 5.02│ 800000│ 5.00│ 796338│ 159267.66│ 6.2787│100.00│ │sse2::sanitize2 x 8192 │ 5.01│ 3000000│ 5.00│ 2991819│ 598363.95│ 1.6712│375.70│ │avx::sanitize2 x 8192 │ 5.01│ 3140000│ 5.00│ 3132252│ 626450.41│ 1.5963│393.33│ │avx2::sanitize2 x 8192 │ 5.00│ 3130000│ 5.00│ 3128184│ 625636.88│ 1.5984│392.82│ ╞══════════════════════════╪═══════╪═════════╪═══════╪═════════╪═══════════╪══════════╪══════╡ │generic::sanitize1 x 16384│ 5.10│ 370000│ 5.00│ 362865│ 72573.10│ 13.7792│100.00│ │sse2::sanitize1 x 16384 │ 5.02│ 1100000│ 5.00│ 1095730│ 219146.08│ 4.5632│301.97│ │avx::sanitize1 x 16384 │ 5.03│ 1170000│ 5.00│ 1162763│ 232552.64│ 4.3001│320.44│ │avx2::sanitize1 x 16384 │ 5.00│ 1170000│ 5.00│ 1169537│ 233907.56│ 4.2752│322.31│ ├──────────────────────────┼───────┼─────────┼───────┼─────────┼───────────┼──────────┼──────┤ │generic::sanitize2 x 16384│ 5.09│ 400000│ 5.00│ 393021│ 78604.29│ 12.7220│100.00│ │sse2::sanitize2 x 16384 │ 5.00│ 1480000│ 5.00│ 1478847│ 295769.60│ 3.3810│376.28│ │avx::sanitize2 x 16384 │ 5.01│ 1600000│ 5.00│ 1596115│ 319223.07│ 3.1326│406.11│ │avx2::sanitize2 x 16384 │ 5.02│ 1590000│ 5.00│ 1584449│ 316889.87│ 3.1557│403.15│ ╞══════════════════════════╪═══════╪═════════╪═══════╪═════════╪═══════════╪══════════╪══════╡ │generic::sanitize1 x 32768│ 5.24│ 190000│ 5.00│ 181180│ 36236.02│ 27.5968│100.00│ │sse2::sanitize1 x 32768 │ 5.00│ 560000│ 5.00│ 559850│ 111970.06│ 8.9310│309.00│ │avx::sanitize1 x 32768 │ 5.04│ 590000│ 5.00│ 585267│ 117053.44│ 8.5431│323.03│ │avx2::sanitize1 x 32768 │ 5.05│ 590000│ 5.00│ 583774│ 116754.88│ 8.5650│322.21│ ├──────────────────────────┼───────┼─────────┼───────┼─────────┼───────────┼──────────┼──────┤ │generic::sanitize2 x 32768│ 5.03│ 200000│ 5.00│ 198631│ 39726.36│ 25.1722│100.00│ │sse2::sanitize2 x 32768 │ 5.01│ 760000│ 5.00│ 758252│ 151650.48│ 6.5941│381.74│ │avx::sanitize2 x 32768 │ 5.03│ 810000│ 5.00│ 804707│ 160941.46│ 6.2134│405.13│ │avx2::sanitize2 x 32768 │ 5.02│ 810000│ 5.00│ 806350│ 161270.12│ 6.2008│405.95│ ╞══════════════════════════╪═══════╪═════════╪═══════╪═════════╪═══════════╪══════════╪══════╡ │generic::sanitize1 x 65536│ 5.55│ 100000│ 5.00│ 90152│ 18030.53│ 55.4615│100.00│ │sse2::sanitize1 x 65536 │ 5.07│ 270000│ 5.00│ 266040│ 53208.14│ 18.7941│295.10│ │avx::sanitize1 x 65536 │ 5.16│ 290000│ 5.00│ 281160│ 56232.12│ 17.7834│311.87│ │avx2::sanitize1 x 65536 │ 5.07│ 290000│ 5.00│ 286252│ 57250.45│ 17.4671│317.52│ ├──────────────────────────┼───────┼─────────┼───────┼─────────┼───────────┼──────────┼──────┤ │generic::sanitize2 x 65536│ 5.01│ 100000│ 5.00│ 99735│ 19947.18│ 50.1324│100.00│ │sse2::sanitize2 x 65536 │ 5.02│ 380000│ 5.00│ 378420│ 75684.11│ 13.2128│379.42│ │avx::sanitize2 x 65536 │ 5.10│ 410000│ 5.00│ 402218│ 80443.78│ 12.4310│403.28│ │avx2::sanitize2 x 65536 │ 5.08│ 410000│ 5.00│ 403513│ 80702.77│ 12.3911│404.58│ └──────────────────────────┴───────┴─────────┴───────┴─────────┴───────────┴──────────┴──────┘ Performance test 'dsp.float.sanitize' has succeeded, execution time: 402.38 s -------------------------------------------------------------------------------- Overall performance test statistics: execution time [s]: 402.38 launched: 1 ignored: 0 succeeded: 1 failed: 0
Indy_, Инди, ты вообще успокоиться можешь? Человек не писал что он пришел сюда решать задачки по оптимизации. Он сказал, что попробует, если будет время. Во вторых, некрасиво кидать ссылку - вот задача (размазанная по сообщениям) - реши. Там в той ссылке нет четкого описания. Опиши задачу четко по пунктам 1) что дано 2) что надо сделать с теми данными которые даны в 1 пункте 3) чего и как добился (твое текущее решение) (можно не кодом а словами даже если что) 4) какой результат ожидаешь в идеале (прогнозируешь). Собственно все. ioann_V, Теперь на счет ТГ канала, в целом SadKo правильно указал. Но я добавлю. У нас тут на форуме есть раздел статей (оптимизация) можешь предложить туда пару своих статей. Во первых это повысит интерес к тебе, а во вторых - далеко не все юзают телеграмм. Особенно среди серьезной публики.