Size: a a a

2020 August 27

PK

Pavel Kazakov in pro.cxx
Andrei K
Окей, я понял. Кто-нибудь еще понимает о какой, чёрт возьми, методичке речь? Теперь я уже сознательно хочу её почитать.
Как я понял, "методичка" -- "клише", "заготовленный ответ". Странное сращение сленга из образования и религии, но при этом беседа идёт в канве программирования, при том гарантий стандарта. :/ Я бы порекомендовал галоперидола поесть, успокоиться.
источник

KO

Konstantin Osipov in pro.cxx
Здравствуйте. А давайте поговорим про генерацию случайных чисел в С++. Вот мне нужно генерировать  случайное число от 0 до 10 ~1000 раз в секунду. Это немного, но мне не хотелось бы лишних издержек. Я так понял, rand() в С++ не в почёте. sizeof(std::mt19937) = 5000 байт. У меня типичная инсталляция - 96 ядер. Это что, значит, мне нужно отвалить 500 килобайт чтобы псевдослучайными числами в С++ пользоваться?
источник

AK

Andrei K in pro.cxx
Konstantin Osipov
Здравствуйте. А давайте поговорим про генерацию случайных чисел в С++. Вот мне нужно генерировать  случайное число от 0 до 10 ~1000 раз в секунду. Это немного, но мне не хотелось бы лишних издержек. Я так понял, rand() в С++ не в почёте. sizeof(std::mt19937) = 5000 байт. У меня типичная инсталляция - 96 ядер. Это что, значит, мне нужно отвалить 500 килобайт чтобы псевдослучайными числами в С++ пользоваться?
Я не уверен, что размер действительно такой, я сейчас чекну, сколько у меня. Но вопрос такой, а правда, что для 96 ядерной платформы выделить 500кб, даже если они нужны — это проблема?
источник

AK

Andrei K in pro.cxx
Вопрос без подвоха.
источник

KO

Konstantin Osipov in pro.cxx
Мне кажется это просто плохая практика. У нас в софте ~400 000 строк кода сейчас. представьте каждый будет использовать static thread_local mt19937 чтобы чиселко получить.
источник

AK

Andrei K in pro.cxx
На случайные числа какие-то требования есть? Если там действительно числа от 0 до 10, явно это не для целей криптографии, а значит можно пожертвовать всякими кросс-бит энтропиями
источник

KO

Konstantin Osipov in pro.cxx
я понимаю, что надо бы сделать один глобальный генератор на всех, но контора не быстрая, заставить всех пользоваться им ещё та история.
источник

KO

Konstantin Osipov in pro.cxx
Andrei K
На случайные числа какие-то требования есть? Если там действительно числа от 0 до 10, явно это не для целей криптографии, а значит можно пожертвовать всякими кросс-бит энтропиями
нет, мне таймаут надо рандомизировать.
источник

AK

Andrei K in pro.cxx
В целом, клэйм про 5000 байтов выглядит очень странным. Должно быть 8 байт стейта и всё.
источник

KO

Konstantin Osipov in pro.cxx
для default_random_engine - да.
источник

KO

Konstantin Osipov in pro.cxx
а для псевдослучайных чисел я так понимаю это не работает так просто
источник

KO

Konstantin Osipov in pro.cxx
в любом случае я померял
источник

AK

Andrei K in pro.cxx
Это ж обычный конгруэтный генератор, там одно число быть должно. Оказывается нет.
источник

KO

Konstantin Osipov in pro.cxx
#include <random>
#include <stdio.h>
int main() {
       static thread_local std::mt19937 gen = std::mt19937(std::default_random_engine()());            
       std::uniform_int_distribution<size_t> tasks_dist{0, 10};
       printf("%lu %lu\n", sizeof(gen), sizeof(tasks_dist));
}
5000 16
источник

AK

Andrei K in pro.cxx
Ну тут можно только посоветовать навелосипедить свой LCG
источник

AK

Andrei K in pro.cxx
Взяв числа из того же мерсенна, если ботлнек в памяти.
источник

KO

Konstantin Osipov in pro.cxx
зачем, просто можно воспользоваться "некошерным" сишным rand()
источник

KO

Konstantin Osipov in pro.cxx
он thread local уже
источник

KO

Konstantin Osipov in pro.cxx
не надо платить лишних издержек.
источник

KO

Konstantin Osipov in pro.cxx
весь вопрос про штамп С++ шного кашрута
источник