Сравнение SFMT с Mersenne Twister и Ran2 - PullRequest
0 голосов
/ 19 декабря 2011

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

Может кто-нибудь сказать мне, где я могу пойти не так?

1 Ответ

1 голос
/ 19 декабря 2011

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

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

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

...