난수와 멀티 코어 패키지


15

R로 프로그래밍 할 때 멀티 코어 패키지를 몇 번 사용했습니다. 그러나 난수가 어떻게 처리되는지에 대한 진술을 본 적이 없습니다. C와 함께 openMP를 사용할 때 적절한 병렬 RNG를 사용하는 데주의를 기울이지 만 R에서는 합리적인 무언가가 발생한다고 가정했습니다. 누구든지 현명한 일이 일어나고 있음을 확인할 수 있습니까?

문서에서 우리는

x <- foreach(icount(1000), .combine = "+") %do% rnorm(4)

는 어떻게 rnorm생성됩니까?

답변:


8

어떻게 foreach작동 하는지 잘 모르겠습니다 (doMC 패키지에서), 멀티 코어 mclapply에서 mc.set.seed매개 변수 기본값 과 같은 작업 을 TRUE수행하면 각 프로세스에 다른 시드 (예 :) 를 제공합니다 mclapply(1:1000, rnorm). 코드가 비슷한 것으로 번역되었다고 가정합니다. 즉 parallel, 동일한 규칙을 가진 호출로 귀결됩니다 .

또한 Charlie Geyer 의 슬라이드 16 페이지를 참조하십시오. Charlie Geyer 는 이론적 보증을 제공하는 병렬 독립 스트림 용 rlecuyer 패키지를 권장합니다 . Geyer 's 페이지에는 다양한 설정을위한 R의 샘플 코드도 있습니다.


7

이 5 페이지에서 볼 수도 있습니다 문서 및이의 문서 . 기본적으로 R에서 각 코어 세트는 자체 시드입니다 (고정밀 시간을 사용하여 호출하는 것 같습니다).

NB : Windows에서 Revolution-computing의 foreach ()를 사용하면 합리적인 무언가가 발생 하지 않을 것입니다. Windows는 POSIX를 준수하지 않으므로 각 코어마다 다른 높은 정확도가 필요할 때 문제가 발생합니다. 시작 시간은 씨앗을 설정합니다 (불행히도 창문이 편리하지 않으므로 경험적으로 확인할 수 없습니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.