" title="Написать письмо">Написать письмо
На выжить после операций проктологии
2200 4002 2461 6363

Статистика

Пользователи : 1
Статьи : 2536
Просмотры материалов : 10978300
 
Генератор хаоса >118ГБ/с (08.11.2026). Печать E-mail
2026 - Ноябрь
08.11.2026 05:01
Save & Share
Последние пару суток, взаимодействие со сборщиком и компилятором среды программирования - шло в абсолютной подчинительной позиции с их стороны. Пришлось расшибиться всмятку - но научиться работать с ранее неизведанной областью памяти: сегментом данных. Награда - создание быстрого генератора криптостойкого мусора со скоростью >118ГБ/с - выше верхнего предела алгоритма XORShift128+ - выкуси, Себастьяно Винья! Правда, цена вышла страшная: 16МБ RAM - и это, реально, большая расплата, с учётом подробностей.



Устал давать ссылки на предыдущие материалы - пусть будет 1 самый начальный, а там в конце ссылки на весь остальной десяток. Самый главный провал произошедший: отказ и кучи, и стека, выдавать мусор в самих себе при инициализации: Windows подтирает нулями всё, что насоздавали предыдущие программы, - независимо от корректности их завершения.

Шло время. Был создан просто быстрый генератор unsigned int со скоростью >4ГБ/с. Начала применяться парадигма генератора в генераторе - скорость выросла до 5.91ГБ/с, порциями по 512Б. Но жестоко пострадала энтропия, криптостойкость - человек всё ещё мог, зная примерный алгоритм генерации, распознать хаотичный мусор в месте бывших полезных данных. Парадигма генератора в генераторе применилась повторно - результат превзошёл все ожидания.

Генератор в генераторе. Изначальный псевдослучайный генератор был модернизирован для псевдослучайной генерации long double. Long double использовались как мера хаоса, второй генератор: неуправляемое поведение мантиссы, относительно управляемое поведение целой части - прибавил число большое сильно дробное - получил все 10Б другими числами. Псевдохаос превратился в хаос, но скорость по-прежнему была недостаточной. Ускорил - но превратил хаос обратно в псевдохаос - коэффициенты энтропии Шеннона поплыли вниз, ниже изначального псевдослучайного генератора.

Чтобы сделать генератор в генераторе в генераторе, не осталось выбора - пришлось создавать свой класс. Написание "class", потом фигурная скобочка, потом public-protected-private, потом конструктор писать - всё это всегда вызывало омерзение при создании класса с нуля. И омерзение не оказалось напрасным: скорость вызова просто функции и скорость вызова её же из класса - в режиме дебага отличается в медленную сторону процентов на 20. Поэтому - уничтожил класс, со всеми написанными функциями и методами уже, - чтобы не ущемлять программиста в разработке при использовании генератора и найти другое решение вопроса.

В момент уничтожения класса, вспомнилось: как точно так же потратил дохрена времени на стек и кучу, пытаясь халявный мусор достать из них. И тут озаряет: если стек маленький, а куча медленнее стека в 100+ раз, - то есть сегмент данных со средней скоростью. Далее гугл опять меняет свои показания: утверждает, что сегмент данных не средний по скорости - а работает со скоростью стека. Далее заявляет, что его максимальный размер 2ГБ, - полное враньё, вплоть до падения среды разработки и зависания ОС, - неисследованный максимум 64МБ, исследованный максимум 26МБ.

Казалось бы, провал. Не имею права приближаться к максимуму: программисту тоже нужен сегмент данных - как минимум, для своих глобальных переменных. Но тут приходит понимание: какого хрена упёрся в 32768 элементов по 512Б, когда можно упереться в 1677726 элемента по 1Б. Это же поле непаханое для генерации мусора: тратишь менее секунды на генерацию мусора 16МБ - и ультрабыстро бродишь по нему хаотично указателем, и выкусываешь куски по 512Б. Всё, что нужно (и то лишь вероятно: зачем хаос портить), - обеспечить, чтобы номинал указателя всегда отличался на 512Б в обе стороны от предыдущего: не захватывать мусор от предыдущего элемента.

Такая парадигма, в сыром варианте реализации, - не просто дала скорость генерации мусора >118ГБ/с, а увеличение коэффициентов Шеннона до 7.1-7.4 для всех данных 200МБ и 6.7-6.8 для блока данных 512Б.

Исходников пока не будет: причёсывать всё надо. Использованы все известные способы ускорения.


...но, может быть, можно ещё быстрее?..

Да не, бред какой-то (c).

А вот не бред. В режиме релиза - скорость падает до 149ГБ/. Либо время пустого цикла считается с огромной погрешностью, что ведёт к искажению измерения скорости, либо х.з. что. Ответ: маленькие изначальные генераторы - работают в релизе медленнее, чем в дебаге: баг среды разработки.
Обновлено ( 08.11.2026 15:04 )
 
 

Последние новости


©2008-2026. All Rights Reserved. Разработчик - " title="Сергей Белов">Сергей Белов. Материалы сайта предоставляются по принципу "как есть". Автор не несет никакой ответственности и не гарантирует отсутствие неправильных сведений и ошибок. Вся ответственность за использование материалов лежит полностью на читателях. Размещение материалов данного сайта на иных сайтах запрещено без указания активной ссылки на данный сайт-первоисточник (ГК РФ: ст.1259 п.1 + ст.1274 п.1-3).

Много статей не имеет срока устаревания. Есть смысл смотреть и 2011, и даже 2008 год. Политика сайта: написать статью, а потом обновлять ее много лет.
Рекламодателям! Перестаньте спамить мне на почту с предложениями о размещении рекламы на этом сайте. Я никогда спамером/рекламщиком не был и не буду!
Top.Mail.Ru