| Быстрая рандомизация данных-2 (29.10.2026). |
|
| 2026 - Октябрь | |||
| 29.10.2026 11:30 | |||
Стало чисто интересно: ну, вдруг, я стажёру дал сложную задачу по диплому (хотя препод вуза считал это легкотнёй)? Будучи в маломобильном состоянии - встал-таки с полунаклоном тела за стационарный ПК - и провёл так час - болезненно. Всё получилось меньше чем за час - стажёр беспросветно тупой, раз не смог понять только теорию такой темы - с 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 ) |