LINUX.ORG.RU

Посоветую несколько генераторов случайных чисел.

intelfx ★★★★★ ()

А чем плохо использовать Mersenne Twister в разных потоках по отдельности? Действительно интересно, а то в статье в википедии не нашел ничего, что бы запрещало его использовать в нескольких потоках.

lu4nik ★★★ ()
Ответ на: комментарий от Andrey_Utkin

Из /dev/urandom плохо читать больше пары байт, он быстро заканчивается

vzzo ★★★ ()
Ответ на: комментарий от vzzo

Заканчивается /dev/random, urandom просто не быстрый и может иметь более низкую энтропию.

mashina ★★★★★ ()

Я бы посоветовал просто организовать запрос к твоему любимому, через очередь. Пусть он в одном потоке генерирует чанками размера n, а в других эта очередь разбирается. Если прямо дробилка дробилка, то можно сделать очередь на интристиках.

pon4ik ★★★★★ ()
Ответ на: комментарий от pon4ik

Я бы посоветовал просто организовать запрос к твоему любимому, через очередь.

Нифига себе, просто. Просто это взять какой-нибудь Mersenne Twister

mashina ★★★★★ ()

Если не хочешь /dev/urandom читать, то тупо заведи отдельный поток ГСЧ через lrand48 — та же фигня получится, но шустрей.

anonymous ()

Делай rdtsc и хешируй.

anonymous ()
Ответ на: комментарий от vzzo

Лень искать пруфы, но вот...

А как на счёт продолжения борьбы с ленью, не хочешь ли сам прочитать что по ссылке написано?

mashina ★★★★★ ()

Написать свою функцию, в которой использовать mutex при вызове любого генератора случайных чисел. Ниже пример из MathGL

double MGL_EXPORT mgl_rnd()
{
#if MGL_HAVE_PTHREAD
	pthread_mutex_lock(&mutexRnd);
#endif
	double res;
#pragma omp critical(rnd)
	{
#if MGL_HAVE_GSL
		if(mgl_rng==0)
		{
			gsl_rng_env_setup();
			mgl_rng = gsl_rng_alloc(gsl_rng_default);
			gsl_rng_set(mgl_rng, time(0));
		}
		res = gsl_rng_uniform(mgl_rng);
//		gsl_rng_free(r);
#else
		res = rand()/(RAND_MAX-1.);
#endif
	}
#if MGL_HAVE_PTHREAD
	pthread_mutex_unlock(&mutexRnd);
#endif
	return res;
}

abalakin ★★ ()

Тебе какая скорость генерации нужна и на каком железе?

post-factum ★★★★★ ()
man initstate_r

random_r, srandom_r, initstate_r, setstate_r - reentrant random number generator

И на каждый тред свой генератор

zaz ★★★★ ()

intelfx правильно посоветовал. Заведи по генератору на поток с разными сидами и не парься.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.