У меня есть цикл, в котором я добавляю шум в некоторые точки; позже они используются в качестве основы для некоторых статистических тестов.
Используемые наборы данных довольно большие, поэтому я хотел бы распараллелить их с помощью openMP, чтобы ускорить процесс. Проблема возникает, когда я хочу иметь несколько ГПСЧ. У меня есть собственный класс PRNG, основанный на методе NR по модулю (я думаю, rand4), но я не уверен, как правильно засеять PRNG, чтобы обеспечить соответствующую энтропию
Normalliy, я бы сделал что-то вроде этого
prng.initTimer();
Но если у меня есть массив из prngs, по одному на рабочий поток, то я не могу просто вызвать initTimer для каждого экземпляра - таймер может не измениться, а близкие таймеры могут вызвать корреляцию.
Мне нужно защитить от естественных корреляций, а не от злонамеренных злоумышленников ( это экспериментальные данные), поэтому мне нужен безопасный способ заполнения массива rng.
Я думал просто использовать
prng[0].initTimer()
for(int i=1; i<numRNGs; i++)
prng[i].init(prng[0].getRandNum());
Затем вызвать мой цикл, но не уверен, внесет ли это корреляцию в метод по модулю.