Сравнение SFMT с Mersenne Twister и Ran2

Я пытаюсь оптимизировать код на основе C, используемый для биоинформатических целей. Он использует итерации Монте-Карло для большей части вычислений. Раньше он использовал ran2() для генерации случайных чисел, что делало его очень медленным. После тщательных исследований я обнаружил, что Mersenne Twister и sfmt являются более эффективными генераторами случайных чисел. Тем не менее, я пытался использовать их в своем коде, и они, похоже, не сильно влияют на скорость. Учитывая тот факт, что программа использует генератор более 10 раз для каждой итерации, я не могу понять, почему смена генератора не влияет на скорость.

Может ли кто-нибудь сказать мне, где я, возможно, ошибаюсь?


person user1105630    schedule 19.12.2011    source источник
comment
я. Генерация случайных чисел определенно занимает большую часть времени. но я понятия не имею, как в таком случае изменение генератора случайных чисел не имеет никакого значения.   -  person user1105630    schedule 19.12.2011
comment
Вы можете попробовать подделать RNG с помощью какой-нибудь глупой функции (например, вернуть последовательные числа), чтобы проверить влияние, может быть, ваше профилирование недостаточно точное?   -  person jv42    schedule 19.12.2011


Ответы (1)


Выбор генератора случайных чисел — это всегда баланс между качеством (чисел, которые они генерируют) и скоростью. Линейные конгруэнтные генераторы, как правило, самые быстрые, но они не подходят для какой-либо серьезной работы методом Монте-Карло.

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

При этом, вот сравнение нескольких генераторов: http://www.boost.org/doc/libs/1_48_0/doc/html/boost_random/performance.html

person ev-br    schedule 19.12.2011