2011-12-19 1 views
0

생물 정보학 목적으로 사용되는 C 기반 코드를 최적화하려고합니다. 계산의 주요 부분에 몬테카를로 반복을 사용합니다. 이전에 random2()를 사용하여 난수를 생성 했으므로 속도가 느려졌습니다. 철저한 연구 끝에 mersenne twister 및 sfmt가 더 효율적인 난수 생성기임을 알게되었습니다. 그러나, 나는 그들을 코드에서 사용하려고 시도했다. 그리고 그들은 속도의 차이를 크게 만들지 않는 것처럼 보인다. 프로그램이 각 반복마다 10 번 이상 발전기를 사용한다는 사실을 감안할 때 발전기를 변경하면 속도에 아무런 변화가없는 이유를 알 수 없습니다.SFMT와 Mersenne Twister 및 Ran2의 비교

아무도 내가 잘못 가고 있다고 말할 수 있습니까?

+1

하지 사용하여 프로파일 :

이 말했다되고

, 여기에 몇 가지 발전기의 비교입니까? – jv42

+0

나는 있습니다. 난수 생성은 확실히 시간 소비의 큰 부분을 차지합니다. 하지만 난 그런 경우에, 임의의 숫자 생성기를 변경하는 것은 어떤 차이를 만들지에 관해서는 우둔입니다. – user1105630

+1

당신은 어떤 어리석은 함수 (연속적인 숫자를 반환하는 것과 같은)로 RNG를 가짜로 시험해보고 충격을 검사 할 수 있습니다. 아마도 프로파일 링이 충분히 정확하지 않을 수 있습니다. – jv42

답변

1

난수 생성기를 선택하는 것은 항상 품질 (생성되는 숫자)과 속도 사이의 균형입니다. 선형 합동 발전기는 일반적으로 가장 빠르지 만 이 아니며은 심각한 몬테카를로 작업에 적합합니다.

경험상 저는 메르 센 트위스터가 아주 훌륭하다고 말했을 것입니다. 그것은 슈퍼 슬로우가 아니므로 품질에 대해 걱정할 필요가 없습니다. 병목 현상이 발전기에있는 한, 당신이 하나의 코어에서 할 수있는 일이별로 없다고 말할 수 있습니다. http://www.boost.org/doc/libs/1_48_0/doc/html/boost_random/performance.html