1. Си / Говнокод #27660

    +3

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    for (size_t i = 0; i < 4; ++i) {
        __m128 x0 = _mm_loadu_ps((const float*)blocks[0] + i * 4);
        __m128 x1 = _mm_loadu_ps((const float*)blocks[1] + i * 4);
        __m128 x2 = _mm_loadu_ps((const float*)blocks[2] + i * 4);
        __m128 x3 = _mm_loadu_ps((const float*)blocks[3] + i * 4);
     
        __m128 t0 = _mm_unpacklo_ps(x0, x1);
        __m128 t1 = _mm_unpackhi_ps(x0, x1);
        __m128 t2 = _mm_unpacklo_ps(x2, x3);
        __m128 t3 = _mm_unpackhi_ps(x2, x3);
     
        x[i * 4 + 0] = _mm_castps_si128(_mm_movelh_ps(t0, t2));
        x[i * 4 + 1] = _mm_castps_si128(_mm_movehl_ps(t2, t0));
        x[i * 4 + 2] = _mm_castps_si128(_mm_movelh_ps(t1, t3));
        x[i * 4 + 3] = _mm_castps_si128(_mm_movehl_ps(t3, t1));
    }

    4х MD5

    https://ideone.com/a8YcZ8

    Запостил: bormand, 12 Сентября 2021

    Комментарии (197) RSS

    • 50 Mh/s :3
      Ответить
      • (чистый хешрейт по показаниям профайлера, табличку с искомыми хешами пока не прикрутила)
        Ответить
    • Круто, работает. Но итоговая скорость в моей программе 2 Mh/s против 4 Mh/s, которые дала интеловская библиотека.

      Похоже, что там и перебор придётся делать на SIMD, чтобы соответствовать.
      Ответить
      • Хм, интересно что там интел навернул... AVX что ли?
        Ответить
        • Там автовыбор SSE, AVX, AVX2, AVX512. У меня она выбирает AVX.
          Ответить
          • Тогда понятно почему 2 против 4, у них тупо регистры вдвое длиннее ;(
            Ответить
            • Я пока не могу придумать, как применить SIMD к бруту.

              По идее можно стартовать так:
              [email protected]
              [email protected]
              [email protected]
              [email protected]

              Следующим шагом будет:
              [email protected]
              [email protected]
              [email protected]
              [email protected]

              Но мы не можем запихать четыре емейла в один регистр. Нужно транспонировать матрицу.

              Возьмём другую идею. Стартуем так:
              [email protected]
              [email protected]
              [email protected]
              [email protected]

              Следующим шагом будет так:
              [email protected]
              [email protected]
              [email protected]
              [email protected]

              Потом стартовый шаблон меняют.

              Всё равно ничего в голову не идёт...
              Ответить
              • > транспонировать матрицу

                Код, который я запостила в этом треде именно это и делает )))

                Всего 8 команд у тебя на транспонирование 4х4 уйдёт. Ну плюс выгрузки-загрузки если нужны.
                Ответить
                • Давно я не брался за SIMD. Последний раз это было, когда мы на «Говнокоде» разрабатывали ненормальную сортировку.
                  Ответить
              • З.Ы. А вообще -- почини профайлер, вдруг с брутом рано ещё пердолиться. У меня всего в районе 5% на него уходит (банальное вписывание символов по модулю от 64-битного числа). Основная нагрузка на хеширование и проверку.
                Ответить
                • К слову, рекорды того, что у меня получилось:
                  g++ -O3: 4 Mh/s;
                  clang++ -O3: 3,5 MH/s;
                  cl /O2: 3 MH/s.

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

                  С какими ключами можно выжать самый быстрый код в gcc, в clang и в msvc? PGO чем-нибудь поможет?
                  Ответить
                  • > -O3

                    Он иногда может делать только хуже, кстати.
                    Ответить
                    • Проверил PGO. Накидывает процентов 10 к скорости.
                      Ответить
                      • Хм, надо попробовать.
                        Ответить
                        • Дожал до 5 MH/s.

                          Две идеи:
                          1. Сократил количество вызовов итератора по именам. Заранее нагенерировал несколько префиксов, а потом к каждому префиксу добавлял суффикс, возвращённый итератором (не через strcat, а тупо через memmove, потому что размеры мне известны).

                          2. Использовал PGO.

                          Всё-таки, можно что-то выжать, меняя алгоритмы подбора.
                          Ответить
                          • > через memmove

                            Да можно прям в буфере инкремент делать, чтобы совсем zero copy.

                            Тебе всё равно надо учиться делить пространство на регионы чтобы треды поддержать. Вот выдай каждому буферу свой регион с конкретным префиксом, суффиксом и диапазоном символов и пусть себе инкрементит.

                            Заодно suspend/resume можно организовать чтобы не начинать каждый раз с нуля.
                            Ответить
                            • С инкрементом не всё просто. Нужно инкрементить не только последний символ, а ещё обрабатывать «перенос в следующий разряд», т. е. рекурсивную проверку на то, что дошли до последнего символа алфавита, с инкрементом «следующего разряда», если вдруг дошли.

                              Когда дошли до [email protected], нужно обновить строку до [email protected], т. е. выполнить инкремент одного разряда и сброс шести.

                              Если мы параллельно считаем суммы для строк с разными префиксами или с разными суффиксами, то мы одновременно будем выполнять одну и ту же рекурсивную проверку с инкрементами. А можно её сделать один раз на все префиксы/суффиксы и расклонировать результат. Так выходит быстрее.
                              Ответить
                              • А, я поняла. Ты инкрементишь один кусок и тестишь его с пачкой разных префиксов и суффиксов.

                                Да, тоже норм подход.

                                Хотя инкрементится обычно один символ. Переносы амортизируются, в среднем это О(1).
                                Ответить
                                • Вообще какой самый быстрый способ перебора?

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

                                  1024-- и я додумались только до рекурсивной проверки условия, когда разряд дошёл до последнего символа алфавита. При таком алгоритме проверять все разряды придётся редко.

                                  Только что подумал ещё об одной идее: предварительно сгенерировать массив часто перебираемых подстрок. Например, трёхсимвольных комбинаций букв латинского алфавита всего 17576, трёхсимвольных комбинаций букв латинского алфавита и цифр всего 46656. Их можно закэшировать, тогда проверок будет меньше. Хотя, пожалуй, лучше взять четыре. Тогда каждая кобенация займёт 32-битный регистр.
                                  Ответить
                                  • Я думаю стоит просто написать все и побенчить какой быстрее...

                                    Ставлю на инкремент при помощи таблички nextChar (и если старший бит стоит -- значит надо следующий тоже). Перенос амортизируется его редкостью, переход всего один.
                                    Ответить
                                  • Кстати, про это у меня тоже когда-то был говнокод https://govnokod.ru/20141
                                    Который я написал в ответ на этот говнокод https://govnokod.ru/20137
                                    Ответить
                                  • На ум приходит "код Грея", но неясно, как его можно применить.
                                    Ответить
                              • Есть ещё интересный вариант с avx broadcast. Можно за две команды впердолить переменную часть во все 8 блоков. Заодно можно будет выкинуть транспонирование матрицы т.к. мы работаем с уже транспонированными блоками.

                                Но это уже только с самодельной реализацией md5 возможно.
                                Ответить
                                • Если сразу вычислять контрольные суммы в AVX-регистрах?
                                  Ответить
                                  • Ну да, они и сейчас там считаются.

                                    Просто входные данные приходится немного препроцессить, чтобы слова упаковать по 8 в регистр (то самое транспонирование).

                                    Если данные будут сразу лежать как надо, можно неплохо сэкономить.

                                    Выходное транспонирование тоже по идее можно выкинуть, просто хеши будет чуть сложнее сравнивать и memcmp уже не прокатит.
                                    Ответить
                                  • Как сейчас:

                                    uint8_t data[8][64]

                                    Первый индекс номер блока, второй позиция в блоке.

                                    Как оптимально для avx:

                                    uint32_t data[16][8]

                                    Первый индекс позиция в блоке, второй номер блока.
                                    Ответить
                      • Не, не накидывает, по крайней мере в шланге.
                        Ответить
                      • А у нас в джаве PGO из коробки. Джит называется
                        Ответить
                  • PGO и LTO
                    Ответить
                    • Прочитал про LTO. Имеет смысл, если линкуется много объектных файлов.

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

                      Жалко, что на уровне языка модулей нет, а только архаичный препроцессор...
                      Ответить
              • прямой перебор это худший вариант. сделай частотный словарь буков и уже ответвляйся от дерева а не последовательности
                Ответить
          • > AVX

            Блин, почти портировала на AVX, но что-то запуталась в транс-понировании матрицы 8х8... Кручу-верчу запутать хочу.

            А подсматривать у интела как-то неспортивно.
            Ответить
        • Тут все реализации:
          https://github.com/intel/isa-l_crypto/tree/master/md5_mb
          Ответить
      • https://ideone.com/qrTdI1

        Интересно, а AVX сборка у тебя сравнима с интелом будет? Или их код лучше?

        З.Ы. ideone чот криво настроено, avx не умеет.
        Ответить
    • Добавила хешмапу с 65536 хешами.

      std::unordered_set:
      15 MH/s (37% на вычисление хеша, 60% на проверку по хешмапе)

      std::unordered_set + 20-битная битмапа:
      25 MH/s (74% на вычисление хеша, 20% на проверку по хешмапе)
      Ответить
      • Лол, вспомнила, что на метод, который роется в мапе, я добавляла noinline чтобы профайлер лучше его видел. Убрала. Пирфоманс поднялся до 33 MH/s.
        Ответить
    • Фильтр Блума что-то не приносит профита по сравнению с обычной битмапой. При маленьком размере он тупо переполняется единичками, при большом размере он работает медленнее.

      Может быть у меня лапки?
      Ответить
      • А как он у тебя используется?

        По идее надо подобрать параметры так, чтобы для 68000 вставленных элементов (эталонные хэши) вореатность ложного срабатывания была где-то в районе 1e-6, плюс-минус пара порядков — чтобы на один мегахэш были единицы (помимо реальных совпадений) «выпаданий» из горячего цикла.
        Ответить
        • Да тупо защищает мапу от обращений...

          Видимо сама мапа не такая уж тяжёлая, чтобы её защищать ценой лишних кешмиссов.

          А фильтр довольно жирный даже для 5% (19 бит).
          Ответить
        • У меня: на миллион посчитанных хэшей 10 найденных ящиков и 10 тысяч ложных срабатываний фильтра Блума. Т. е. выпадения из горячего цикла составляют целый 1%. Многовато...

          В фильтре Блума 6 хэш-функций, размер фильтра — 2 в 19 степени.

          Куда крутить?
          Ответить
          • Увеличил фильтр до 20 бит. Получил 200 промахов на миллион, т. е. 2e-4. Скорость не прибавилась.

            С фильтром на 21 бит получил 3 промаха на миллион, а скорость стала только меньше.
            Ответить
          • https://en.wikipedia.org/wiki/Bloom_filter#Optimal_number_of_hash_func tions
            Теория говорит, что для n = 68000 (количество элементов в фильтре) и e = 1e-6 (желаемая вероятность false positive) нужно k = -log2(e) ≈ 20 хэш-функций и m = -1.44*math.log2(e)*68000 ≈ 1951700 бит в фильтре.
            Ответить
            • Ну вот когда я взял фильтр из pow(2, 21) = 2097152 битов, я получил вероятность промаха 3e-6 на 6 функциях. Если увеличу их количество до 20, то, возможно, как раз 1e-6 и будет. Только скорость будет адово низкой.

              В такой задаче фильтр Блума мешает, потому что тратится время на его расчёт.
              Ответить
            • Наговнокодил 20 хэш-функций. Пашет вообще без промахов. Похоже, что фильтр Блума выполняет функцию мапы. Скорость упала на 1/8.
              Ответить
              • А если пойти в другую сторону и затаргетиться на 1e-3? 10 хэшей, 2^20 батов фильтра.
                Ответить
              • Попробуй переписать на JAWA. Скорость повысится в 0.05 раз.
                Ответить
                • Но это только на первые несколько секунд работы, потом включится СБОРЩИК МУСОРА и обоссыт весь перфоманс своими лагами. Потому что JAWA – это то, про что говорят «какой анскилл )))».
                  Ответить
                  • Ещё нужно не забыть опцию -Xmx, иначе соснешь OOM. Ну и памяти докупить, конечно.
                    Ответить
                    • А ещё крайне важно установить:

                      – Jawa8, чтобы играть в Майнкрафт.

                      – Jawa16, чтобы играть в Майнкрафт, написанный на новых версиях Jawa (если играть на старых версиях Jawa, то можно соснуть СТРАШНЫЙ EXCEPTION).

                      – jawa6, если ты работаешь в БАНКЕ.

                      Т.е. софт, написанный на Jawa8, может не запуститься на Jawa16 и наоборот, какой пиздец! В итоге все россказни про единую виртуальную машину и экосистему оказались ЛОЖЬЮ, ведь нужно иметь ДЕСЯТКИ виртуальных машин... Это всё продиктовано жаждой наживы корпорастов из Jawa-корпорации: засрать всю свободную оперативную и энергонезависимую память виртуальными машинами, чтобы пользователь не установил другие программы.
                      Ответить
                  • > СБОРЩИК МУСОРА

                    Какой анскилл )))

                    У меня вот в коде ни одной лаллокации после того как инициализация пройдена.
                    Ответить
                    • Перепиши на JAWA - появится. Будешь int в куче выделять.

                      + Integer i = new Integer(42);

                      - int i = 42;
                      Ответить
      • У меня тоже лапки. Библиотека robin_hood идеальна. Самодельный фильтр Блума её только портит.
        Ответить
        • > идеальна

          Я хочу еще с префетчем поиграться, как пи предлагал.

          После вычисления хешей проверять не текущую пачку, которая только закончилась, а прошлую. При этом стратегически расставив префетчи так, что нужные регионы хешмапы к этому моменту окажутся в L1 и проверка пройдёт мгновенно.

          З.Ы. Или вообще переплести проверку и рассчёт, не разбивая их на фазы. Во время расчета не нужна память, во время проверки не нужен проц. Вроде должно хорошо сочетаться.
          Ответить
          • С другой стороны, гипертрединг поди как раз эти остатки отдал второму треду и сильно лучше уже не выйдет...
            Ответить
            • VTune то уже расчехлил?
              Ответить
              • У меня на контроллерах нет никакого VTune
                Ответить
                • Я просто не очень понимаю как это можно тюнить "вслепую", если конечно у тебя не 286-й.

                  У тебя для твоих процов нет эмулятора или профайлера умного чотбы показать кешмисы, занятость префетчера, ождание памяти итд
                  Ответить
                  • У контроллеров обычно ничего этого и нет. Разве что пайплайн на пару стадий и небольшой буфер для кеша команд.
                    Ответить
                    • Ну то есть под них можно оптимизироваться почитывая доку.

                      Так у тебя есть Витюня, или ты просто знаешь, как это работает?
                      Ответить
                      • Под тот же avr вообще все тайминги в даташите расписаны.

                        arm'ы (Cortex M) безусловно сложнее, но тоже без фанатизма.
                        Ответить
                  • Для ранних штеудов были на каждый опкод таблицы таймингов, вполне можно было тюнить без профайлера.
                    Ответить
                    • Какой Фог ))

                      У современного камня всё так насрано внутри, что я вообще уже слабо понимаю что там происходит
                      Ответить
              • Лень... его же в репе нету скорее всего, придётся с сайта качать. А там поди регаться.
                Ответить
                • Кстати, даже там заводят общие учётки:
                  http://bugmenot.com/view/intel.com

                  nereyex908:bsuL4CQm25AV! подошёл.
                  Ответить
                  • Спасибо, так и поступлю.

                    У меня в общем-то была учётка, я там какие-то курсы про fpga слушала. Но они посчитали, что я давно не захожу и ёбнули её.
                    Ответить
                    • Какой багор )))
                      Ответить
                    • Кое-что из-под этой учётки уже скачал.

                      У них на сайте много чего изменилось. Оригинальный «icl» и компилятор «Фортрана» они куда-то убрали, а вместо «icl» теперь предлагают скачать модифицированный «Шланг», правда, с интеловскими библиотеками.
                      Ответить
                      • Объясните а зачем качать «VTune»?

                        Что он даёт, чего нет в perf?
                        Ответить
                        • Думаю это как сравнить Instruments и голый DTrace.
                          Хотя борманд может наверное и с perf справиться.

                          vtune еще небось умеет читать всякую проприетарную питушню, про которую интел никому не рассказывает
                          Ответить
                          • > perf

                            Блядь, вот я дура... Кто ж прогресс замеряет одним атомарным счётчиком на все 12 тредов.

                            Заменила на 12 отдельных счётчиков, разнесённых на кешлайн. Сразу 250 Mh/s -> 440 MH/s (64% от теоретических 12 х 57 MH/s)
                            Ответить
                          • В среднем 1 кешмисс в L2 на каждый хеш. Блядь, откуда, вроде всё в метр должно поместиться...

                            Надо std::map std::set всё-таки выкорчевать и заменить на что-то приличное.
                            Ответить
                            • std::unordered_map и std::unordered_set можно заменить на
                              https://github.com/martinus/robin-hood-hashing

                              А на что заменить упорядоченную карту, пока не знаю.
                              Ответить
                              • Мне на самом деле поднадоела уже эта задача...

                                Хочется выбить какое-нибудь круглое число в духе 500 MH/s, выложить куда-нибудь и забить.
                                Ответить
                              • > А на что заменить упорядоченную карту, пока не знаю
                                На Heap
                                Ответить
                          • Это же джва разных сорта профулеров.
                            А если у штеуда в процах был дебажный бэкдор, то давно уже была атака типа Spectre.
                            Ответить
                      • Продолжение. Классический компилятор сишки и «Фортран» теперь, оказывается, в «HPC Toolkit».

                        Напридумывали трёхбуквенных названий, из которых ничего не понятно.
                        Ответить
                        • Hewlett-Packard-Connexant
                          Ответить
                          • Тоже это приходит в голову. Но нет, это «high-perfomance computing» (как будто другой пакет — «Base Toolkit» — это low perfomance).
                            Ответить
    • Мы уже и забыли как борманд говнокодирует.
      Ответить
    • Ох блин, наконец-то подобрала нужную транс-позицию для AVX:
      for (size_t i = 0; i < 2; ++i) {
          __m256i x0 = _mm256_loadu_si256((const __m256i*)blocks[0] + i);
          __m256i x1 = _mm256_loadu_si256((const __m256i*)blocks[1] + i);
          __m256i x2 = _mm256_loadu_si256((const __m256i*)blocks[2] + i);
          __m256i x3 = _mm256_loadu_si256((const __m256i*)blocks[3] + i);
          __m256i x4 = _mm256_loadu_si256((const __m256i*)blocks[4] + i);
          __m256i x5 = _mm256_loadu_si256((const __m256i*)blocks[5] + i);
          __m256i x6 = _mm256_loadu_si256((const __m256i*)blocks[6] + i);
          __m256i x7 = _mm256_loadu_si256((const __m256i*)blocks[7] + i);
      
          __m256i t0 = _mm256_unpacklo_epi32(x0, x1);
          __m256i t1 = _mm256_unpackhi_epi32(x0, x1);
          __m256i t2 = _mm256_unpacklo_epi32(x2, x3);
          __m256i t3 = _mm256_unpackhi_epi32(x2, x3);
          __m256i t4 = _mm256_unpacklo_epi32(x4, x5);
          __m256i t5 = _mm256_unpackhi_epi32(x4, x5);
          __m256i t6 = _mm256_unpacklo_epi32(x6, x7);
          __m256i t7 = _mm256_unpackhi_epi32(x6, x7);
      
          __m256i s0 = _mm256_unpacklo_epi64(t0, t2);
          __m256i s1 = _mm256_unpackhi_epi64(t0, t2);
          __m256i s2 = _mm256_unpacklo_epi64(t1, t3);
          __m256i s3 = _mm256_unpackhi_epi64(t1, t3);
          __m256i s4 = _mm256_unpacklo_epi64(t4, t6);
          __m256i s5 = _mm256_unpackhi_epi64(t4, t6);
          __m256i s6 = _mm256_unpacklo_epi64(t5, t7);
          __m256i s7 = _mm256_unpackhi_epi64(t5, t7);
      
          x[i * 8 + 0] = _mm256_permute2x128_si256(s0, s4, 0x20);
          x[i * 8 + 1] = _mm256_permute2x128_si256(s1, s5, 0x20);
          x[i * 8 + 2] = _mm256_permute2x128_si256(s2, s6, 0x20);
          x[i * 8 + 3] = _mm256_permute2x128_si256(s3, s7, 0x20);
          x[i * 8 + 4] = _mm256_permute2x128_si256(s0, s4, 0x31);
          x[i * 8 + 5] = _mm256_permute2x128_si256(s1, s5, 0x31);
          x[i * 8 + 6] = _mm256_permute2x128_si256(s2, s6, 0x31);
          x[i * 8 + 7] = _mm256_permute2x128_si256(s3, s7, 0x31);
      }
      Теперь 54 Mh/s (62% вычисление хеша, 37% генератор и проверка по мапе). 8 хешей параллельно.
      Ответить
      • Если треды добавить, можно за 10 дней перебрать все 8-значные буквенно-цифровые сочетания...
        Ответить
        • Пиздец. И ты сможешь взломать любую учётку говнокода?
          Ответить
          • Не любую. Длина моего пароля - 11 знаков.
            Ответить
        • А хуй там, по памяти боттл-някнуло походу:

          12 тредов: 170 Mh/s
          6 тредов: 125 Mh/s
          4 треда: 105 Mh/s
          3 треда: 92 Mh/s
          2 треда: 77 Mh/s
          1 тред: 54 Mh/s
          Ответить
          • Блин, а нафиг я каждому треду свою мапу то сделала...

            С одной мапой и одним фильтром на всех 185 Mh/s
            Ответить
            • Упс, и профайлер надо отключать, оказывается... 250 Mh/s.
              Ответить
              • а что за профайлер, и как работает?
                переодически стопает треды и записывает их стек трейс?
                Ответить
              • Ничего не набрутил. Переведи на «GPU».
                Ответить
                • > Переведи на «GPU»

                  Отличное занятие для прохладного осеннего вечера...

                  Правда мне куду лень вспоминать.
                  Ответить
                  • Можешь переводить на машинные коды видеокарты, чтоб побольше хардкора
                    Ответить
                    • Они же вроде у nvidia не документирвоаны?
                      Ответить
                    • Мне на самом деле интереснее на циклоняшке попробовать... Догонит ли она интел или нет.
                      Ответить
            • А как получается такой пирфоманс?
              Казалось бы, если у каждого треда своя питушня, то нет лишних взаимодействий и изолированный код проще писать и компилировать.
              Ответить
              • И как будет отличаться по пирфомансу вариант с просто отдельными процессами?
                Ответить
              • Одна мапа может в кеше сидит?
                Ответить
              • Я там сдуру сделала общий атомарный счётчик для прогресса, который и угашивал весь пирфоманс.

                С отдельным счётчиком на каждый тред параллелиться стало считай в 2 раза лучше.

                Ну и да, обращений в L3 было овердохуя из-за того, что я в очередной раз облажалась с размером кеша (6 х 256К а не 1.5М).

                Детские ошибки, в общем.
                Ответить
        • Я подумал о том, что сочетания длиннее восьми знаков без фермы для майнинга перебирать придётся долго, и вспомнил про вореции:
          https://github.com/1024--/voretions/blob/master/src/md/vorec-hist-2014-09-16.md

          Генератор вореций можно обучить на сайте с большим количеством юзеров (я набрал кучу таблиц юзернеймов с разных сайтов). Да, будет неполный перебор, что-то можно пропустить, но зато будет шанс найти длинные логины.

          Для начала попробовал тупо выбрать четырёхсимвольные слайсы изо всех юзернеймов «Говнокода». Их оказалось всего 45 тысяч (при полном переборе таких сочетаний было бы два с половиной миллиона).

          Тупо сконкатенировав два таких слайса, можно получить два миллиарда восьмисимвольных кобенаций. А если применить вореции (марковские цепи), то можно найти вменяемое количество более длинных кобенаций.
          Ответить
          • Попробовал вореции.

            Какая-то фантастика. Даже неоптимальный алгоритм с использованием std::string вместо сырых массивов даёт 12 Mh/s.

            Обучил на юзернеймах «Говнокода». При ограничении на длину вореции 11 символов нашёл 542 емейла за очень короткое время.

            Надо будет попробовать на чём-нибудь более сложном обучить.
            Ответить
            • Пиздец.
              Ответить
              • Нашёл юзера DROP_TABLE_gosduma — у него емейл с девятизначной псевдорандомной частью до собаки, состоящей из букв и цифр.

                А у StertorPidor локальная часть вообще 11-значная. Тупым перебором 11-значные комбинации я бы за год не осилил.
                Ответить
              • Готов биться головой об заклад, что сентябрьский петух - не петух вовсе, а человек.
                Ответить
                • Откуда ты знаешь?
                  Ответить
                  • Печатать на клавиатуре могут:
                    - обезьяны, но вероятность ввода осмысленного текста практически равна нулю
                    - коты, но они обычно зажимают одну клавишу
                    - остаются люди или боты, но для бота икарус не похож - выглядит слишком умным
                    Ответить
                    • Хм, откуда инфа? Есть какие-то исследования?
                      Ответить
                      • Исследований не знаю, поэтому я не утверждаю, а бьюсь об заклад.

                        Вот можешь почитать: https://acm.timus.ru/problem.aspx?space=1&num=1677&locale=ru
                        Ответить
                        • Это про обезъян

                          А есть исследования, доказывающие что петух не в состоянии пользоваться клавиатурой?
                          Ответить
                          • На говнокоде можно провести исследования, показывающие что петух может пользоваться клавиатурой. Причём не один. Тут целый курятник развёлся.
                            Ответить
      • сделай расчетный шейдер и юзай видуху :)
        Ответить
    • какое байтойобство ))

      а зачем тебе? ты спиздил базу хешей и брутишь?
      Ответить
      • Х.з., просто не могла пройти мимо специальной олимпиады...
        Ответить
        • а я же правильно понимаю, что с переносом твоего кода на рязань нас могут ждать сюрпризы?)
          Ответить
          • Да не должно, у них SSE вроде ничем не отличается. Насчёт последней AVX версии -- х.з.
            Ответить
          • На эрзянь:
            https://youtu.be/ahzyJH-aejU
            Ответить
      • Восстанавливает аниме-картинки по md5-хешам.
        Ответить
        • В эпоху дискет, которые сыпались и размагничивались, многие мечтали о программе, которая бы брутила повреждённые байты архива под контрольную сумму.
          Ответить
          • P.S. Ну ещё на CD фольга часто до дыр протиралась. У DVD хоть защита от механических повреждений немного получше.
            Ответить
          • Рара с его избыточной инфой для восстановления ещё не было?
            Ответить
            • rar в 1996-м году появился
              Ответить
            • Я вспомнил прикол: скачал с одного сайта несколько программ в многотомных rar-архивах. Все тома, кроме первого оказались запоротыми.

              Оказывается, владелец сайта настроил сервер так, что файлы с расширением .rar, .zip и ещё некоторые отдаются как binary/octet-stream или как соответствующий мимими-тип архива, а все остальные отдаются как text/html или text/plain. Сервер тома с расширениями .r01, .r02, .r03 и т. д. посчитал текстовыми и зачем-то заменил в них байты с кодом 0 на байты с кодом 0x20=32 (код пробела). В итоге распаковать такие файлы можно, только набрутив, какие из пробелов нужно поменять на символы с кодом ноль.
              Ответить
              • тебе еще повезло, что там рашн апаче небыло
                Ответить
                • А что это такое и в чём его особенность?
                  Ответить
                  • mootools
                    Ответить
                  • http://apache.lexa.ru/intro.html

                    Он на лету перекодировал файлы.

                    Самое печальное, что он был установлен на серверах шаред хостингов до середины нулевых (когда проблемы кодировок уже и не существовало) и портил файлы
                    Ответить
          • Тогда винты были маленькие и радушная таблица CRC32 не помещалась
            Ответить
    • 77 — хозяйка всем… Хюмала, рюмала, пюмала… Пришил… Остыл… Трах… Взрыв… Пан, пан, пан… Времена, события, люди… надо мной Кащей Бесфамильный… Локхид элевэйтор приобритейтид… А мама такая молоденькая, Володенька я… тибол и ниф… пух и прах…
      Ответить
      • 77издец.
        Ответить
      • > 77

        Это что-то про typescript?
        Ответить
        • Требуется пояснительная бригада.
          Ответить
        • На вореции ответил.
          Ответить
        • Всё, понял. Жертву заставляют смешать юзернейм «ASD_77» и «typescript».
          Ответить
          • Между прочим, ASD это autism spectrum disorder

            хотя тут вообще много аутистов
            Ответить
            • И это прекрасно же.

              ASD мне напоминает чувака, который делал TempleOS.
              Ответить
            • Дай список аутистов.
              Ответить
              • ASD_77
                bormand
                CHayT
                j123123
                JloJle4Ka
                gost/ISO/PolinaAksenova (хотя тут под вопросом)
                Ответить
                • > PolinaAksenova

                  Вообще-то она няшка.

                  > JloJle4ka

                  Да и она тоже ничего.

                  С остальным согласен, можно утверждать.
                  Ответить
                  • >> JloJle4ka

                    > Да и она тоже ничего.

                    Да, ставить Gentoo и перебирать всякие полурабочие браузеры для аутистов это вполне норм.
                    Ответить
                    • Вообще-то она это делает, чтобы улучшить безопасность и производительность системы, то есть у неё нет аутизма.
                      Ответить
                      • Да, всё правильно говоришь. У меня, в отличие от некоторых, нет аутизма. Я занимаюсь серьёзными вещами: свободой и безопасностью.
                        Ответить
                        • Давно алгоритм Дейкстры написала, лолечка?
                          Ответить
                          • Как он поможет сделать мою систему свободнее или безопаснее?
                            Ответить
                            • Им можно находить кратчайший путь к безопасности в графе опасностей
                              Ответить
                              • Ладно, тогда ближе к выходным напишу. И запощщю на говнокод под СВОБОДНОЙ лицензией, чтобы вы тоже могли «найти кратчайший путь к безопасности в графе опасностей».
                                Ответить
                                • Ну как, написала?
                                  Ответить
                                  • Я не забыла, вообще-то.

                                    Сначала нужно написать сайт, чтобы там выложить потом исходные коды: вдруг получится больше 100 строчек и не удастся захостить исходники на говнокоде.

                                    Но я уже нахожусь в процессе, попозже всё будет готово. И можно будет «найти путь к безопасности в графе опасностей».
                                    Ответить
                                    • > Сначала нужно написать сайт, чтобы там выложить потом исходные коды

                                      Собери еще свой процессор из транзисторов. Зачем: для сервера, на котором тот сайт будет работать.
                                      Ответить
                                      • Я программист, а не инженер. Я даже паять не умею.
                                        Ответить
                                        • А ты крокодильчиками соедини.
                                          Ответить
                                          • Когда я не умел паять, я соединял транзисторы скрутками проводов. Было очень увлекательно искать, какая из скруток сглючила.
                                            Ответить
                                            • Я вообще часто провода скручивал в детстве, всякие лампочки куда-то подключал, итд.

                                              Потом узнал про клеммы.

                                              А паяю я до сих пор хуёво
                                              Ответить
                                              • Сейчас ещё есть макетки с дырками где ничего паять не надо.
                                                Ответить
                                                • И что, травить печатную плату не надо??
                                                  Ответить
                                      • > процессор из транзисторов

                                        А транзисторы из песка?
                                        Ответить
                                        • А песок из камня
                                          Ответить
                                        • Я знаю из чего вентилятор

                                          > макетки с дырками
                                          Это же атсраномически дорого
                                          Ответить
                                        • Транзисторы из кремния, а кремний из водорода через управляемый ядерный синтез. А водород из электрона и протона, протон при этом состоит из трех кварков uud
                                          Электрон не состоит ни из каких кварков или еще какой-то там хуйни, и кварки ни из чего не состоят. Но есть еще какая-то там теория струн, но это уже хуй знает
                                          Ответить
                                          • Кварков никто не наблюдал в чистом виде. Если попытаться оторвать кварк от протона, родится пара кварк-антикварк.
                                            Ответить
                                            • > А с какой pадости их наблюдать? Достаточно того, что наблюдается
                                              > наличие цветовой симметpии. Достаточно экспеpиментальных значений
                                              > \alpha_s, явно yказывающих на наличие конфайнмента. Достаточно
                                              > того, что ВСЕ адpонные массы можно паpаметpизовать всего лишь 7ю числами —
                                              > 6 масс кваpков и значение \alpha_s в одной точке. И не только адpонные
                                              > массы, а много чего ещё — пока что все теоpетические зависимости, полyченные
                                              > из QCD, с экспеpиментом совпадают — а, следовательно, пpедставлением о
                                              > кваpках МОЖHО ПОЛЬЗОВАТЬСЯ. Заметь, только подонки-фаллософы пиздят
                                              > пpо «сyществование», «истинности», и томy подобнyю поеботинy. Hаyкy это не волнyет.
                                              Ответить
                                          • Во, из колебущихся 26-мерных струн и собирать. Силой мысли.
                                            Ответить
                                            • Силой мысли собирать в астрале 26-мерную вайфу в альтернативной физической реальности, и потом исекайнуться туда
                                              Ответить
                                    • > Я не забыла, вообще-то.

                                      Ну так что?
                                      Ответить
                                • Ну как, написала? (2)
                                  Ответить
                • А вообще, можете тест попроходить https://www.rdos.net/ru/index.php
                  Ответить
                  • > Национальная принадлежность

                    Хороший тест )))
                    Ответить
                    • Это чтоб набрать статистику, какая национальная принадлежность более склонна к аутизму.
                      Ответить
                      • Давай позовём ГОСТа и рус-не накрутим аутизма?
                        Ответить
                        • Зачем? Зачем?
                          Ответить
                          • Ты же из Украины, разве ты не ненавидишь всех русских?
                            Ответить
                            • Русских в каком смысле? Проживающих на территории РФ? Имеющих какие-то гены, характерные только для русских? (если что, таких генов нет)

                              Что вообще значит "русскость"?
                              Ответить
                              • Исследования генов русских людей показали абсолютную генетическую идентичность русского населения на всем огромном пространстве России - между жителями Камчатки и Твери родства больше, чему немцев соседних земель. Но "русский ген" , оказывается, широко распространен и в Норвегии, Венгрии, Иране и даже во Франции.
                                Ответить
                                • Тут всё сложно.

                                  С одной стороны, между поляками, словаками, белорусами, украинцами, русскими нет чёткой границы.

                                  С другой стороны, на западе Украины и на севере России можно встретить гены, свойственные финно-уграм (через территорию Украины в своё время прошли венгры, некоторые остались). На юге Украины и России можно встретить гены, свойственные тюркам. В Польше можно встретить ассимилировавших пруссов.

                                  Ещё с одной стороны, Y-хромосому R1a можно встретить не только у славян, но и у таджиков и у киргизов. Поэтому вообще непонятно, какие гены считать основным признаком.
                                  Ответить
                                • Я считаю, что после всех катастроф, которые обрушились на Россию в двадцатом веке, начиная с первой мировой и заканчивая перестройкой, тот факт, что Россия еще сохранилась и развивается, говорит, что у нашего народа имеется одна лишняя хромосома.
                                  Ответить
                              • Ваша великорусская мечта — сидя по горло в дерьме, затащить туда всех остальных. Это и есть русизм.
                                Ответить
                  • Вот кстати мой результат
                    http://www.rdos.net/ru/poly10a.php?p1=81&p2=41&p3=21&p4=5&p5=60&p6=74&p7=74&p8=77&p9=25&p10=57
                    Ответить
                    • Никто больше протестироваться не хочет?
                      Ответить
                • Странно что любитель тестить старые фаерфоксы в XP в список не попал...
                  Ответить
                  • Можешь сделать свой расширенный список.
                    Ответить
      • вбил в гугл
        Ответить
    • Ответить
    • > Блядь, откуда, вроде всё в метр должно поместиться...

      Ну понятно, опять маркетинговое наебалово. L2 тоже "256 KB per core" а не "1.5MB shared". Т.е. надо втиснуть все горячие данные в 256КБ а не в 1.5 метра на самом деле.

      Выкинула нахрен std::unordered_set, подтюнила фильтр блума (2 теста по 20 бит).

      440 MH/s -> 470 MH/s

      Блин, ещё немножко...
      Ответить
    • На Дальнем востоке командира роты спецназа ГРУ обвинили в изнасиловании рядового шваброй, избиениях и вымогательстве денег

      В отношении майора Олега Панова, командира 78 отдельной роты спецназа ГРУ, и его заместителя, капитана Александра Ерушевича заведено уголовное дело о превышении должностных полномочий и насильственных действиях сексуального характера. Материалы дела опубликованы в Telegram-канале правозащитного проекта Gulagu.net.

      Основатель проекта Владимир Осечкин уточнил «Тайга.инфо», что преступления происходили в районе Уссурийска в расположении подразделений 14 бригады спецназа Главного управления генштаба (бывшее ГРУ). Арестованы ли подозреваемые — неизвестно.

      В обстоятельствах уголовного дела, которые опубликовал Telegram-канал, описываются несколько эпизодов с участием командиров. 6 января 2021 года Панов избил рядового, приказал ему раздеться догола, распорядился поставить военному клизму с водой и заставил приседать. После этого Панов заставил рядового лечь на стол животом и изнасиловал его шваброй. Ерушевич снимал происходящее на видео.

      В августе 2020 года Панов, угрожая насилием, водил шваброй с надетой на черенок медицинской перчаткой «в области ягодиц и промежности» ефрейтора, которого к нему привели для «воспитательной беседы».

      В период с 8 по 16 ноября 2020 года Панов требовал деньги от рядового «на нужды роты». Тот отказался, и командир приказал ему раздеться догола, связал и подвесил на дереве «в положении стоя с вытянутыми вверх руками». После этого Панов избил рядового веткой дерева, параллельно угрожая «применить к нему физическое насилие в виде прикрепления его полового члена к стволу дерева с использованием строительного степлера»
      Ответить
      • Это в пиздец-оффтоп.
        Ответить
      • Пошёл нахуй из моего треда. Это в пиздец-оффтоп.
        Ответить
      • Это же охуенно, негры уничтожают негров, грушники уничтожают грушников, вон начальник охраны хуйла тоже недавно уволился.
        Ответить

    Добавить комментарий