Быстрая рандомизация данных-2 (29.10.2026). Печать
2026 - Октябрь
29.10.2026 11:30
Save & Share
Экс-стажёр саботировал моё наставничество и обучение нового стажёра - и успешно поднасрал нам обоим (см. последние заметки от 22.10.2026 и до конца: это полный сюр, как будто во сне всё происходило).

Стало чисто интересно: ну, вдруг, я стажёру дал сложную задачу по диплому (хотя препод вуза считал это легкотнёй)? Будучи в маломобильном состоянии - встал-таки с полунаклоном тела за стационарный ПК - и провёл так час - болезненно. Всё получилось меньше чем за час - стажёр беспросветно тупой, раз не смог понять только теорию такой темы - с 3 раза на протяжение месяца. И прикол в том, что он сменил тему диплома на более сложную - не со своими исходниками с нуля, а с чужими, - и так как аналитики у него нет вообще (которую я мог ему подтянуть), его ждут очень весёлые времена в ближайшем будущем.

Время указано в размерности "мс/Б" (постоянное изменение делителя в функции расчёта мс). Скрины - для внимательных людей: были косяки - но не шибко сильно отразилось на результатах. Язык - Borland C++ Builder v.6.0, 2002 г.

Доказательство проблемы медленной штатной генерации чисел - 10мин.


Доказательство медленной генерации чисел предлагаемыми костылями в интернете (первый попавшийся в гугле + подрихтовать чутка) - 3-4мин.


Простейшие эксперименты с типами данных и успешным результатом ускорения (свой алгоритм, обязательно на основе имеющегося, - выведя его на 4Б по хаотичности) - 35мин. В них входят и попытки интегрировать многопоточный BLAKE3 и однопоточный SHA512 (провал из-за странных ошибок - надо думать: тут профит - просто гигантский может быть: 64Б за раз). С double теория не совпала (нет прироста в скорости, но есть повышение хаотичности из-за мантиссы), но long double дал отличный результат. Также воспроизвёлся заранее известный факт: числа - быстрее переменных, их содержащих (ну, этот скрин, реально, просто до кучи).







Итого: меньше часа, от обнаружения проблемы до её решения, - скелет диплома полностью собран, и без всяких там ИИ. Остаётся - вода: больше алгоритмов из интернета, ГОСТы и ISO (запрещающие именно занулять информацию), интерфейс простецкий для программы (отражение процесса генерации).

Но за всё это время я не показал коэффициент ускорения. Потому что помимо 4-байтной (как выяснилось) int random(int) существует ещё 2-байтная rand(void). Это значит, время 33592 делится на 4 - изначальная скорость 8398мс/Б (да: все эти числа надо делить на 4млрд - но не это оценивается сейчас). Rand() порождает числа медленнее - отбрасывается. Интернетовский пример (с правильным числом) - быстрее штатного всего в 11.18 раза. Модернизированный пример - быстрее штатного всего в 13.22 раза. А вот дальше - прикол: указывание максимального числа в random(), как обеспечение наибольшей хаотичности, - уменьшило её скорость до 8902мс/Б, в отличие от увеличения в интернет-примере. То есть, итоговый алгоритм (добавление одной строчки кода всего) быстрее штатного в 14 раз. Маловато для внедрения - но для диплома бакалавра вполне сойдёт.



А мне - нужно думать, как заставить работать BLAKE3 или SHA512. Потому что, если это занимать столько же времени, как тяжёлое перетипирование в long double, - на выходе будет 64Б вместо 10Б - а это уже намёк на сотку в ускорении. В интернете пишут, что эти алгоритмы - это какой лютый писец по скорости, по сравнению с MD5.

Но программировать - реально больно, на физическом уровне, - я отступаю. И давайте опустим, что rand(), в итоге, оказалась 4-байтной - и скорость генерации штатная составляет ~5500мс/Б. Не, ну хватит там калькуляторы открывать уже...
Обновлено ( 29.10.2026 14:07 )