Số ngẫu nhiên và gói đa lõi


15

Khi lập trình trong R, tôi đã sử dụng gói đa lõi một vài lần. Tuy nhiên, tôi chưa bao giờ thấy một tuyên bố nào về cách nó xử lý các số ngẫu nhiên. Khi tôi sử dụng openMP với C, tôi cẩn thận sử dụng RNG song song thích hợp, nhưng với R tôi đã cho rằng điều gì đó hợp lý xảy ra. Bất cứ ai có thể xác nhận rằng một cái gì đó hợp lý xảy ra?

Thí dụ

Từ tài liệu, chúng tôi có

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

Làm thế nào các rnorm`s được tạo ra?

Câu trả lời:


8

Tôi không chắc chắn như thế nào foreachcông trình (từ gói doMC, tôi đoán), nhưng trong đa lõi nếu bạn đã làm điều gì đó như mclapplycác mc.set.seedgiá trị mặc định tham số để TRUEmang đến cho mỗi quá trình một hạt giống khác nhau (ví dụ mclapply(1:1000, rnorm)). Tôi giả sử mã của bạn được dịch sang một cái gì đó tương tự, tức là nó thực hiện các cuộc gọi đến parallelcùng quy ước.

Nhưng cũng xem trang 16 của các slide của Charlie Geyer, trong đó khuyến nghị gói rlecuyer cho các luồng độc lập song song với các đảm bảo về mặt lý thuyết. Trang của Geyer cũng có mã mẫu trong R cho các thiết lập khác nhau.


7

Bạn có thể muốn xem trang 5 của tài liệu này và tài liệu này . Theo mặc định, dưới R, mỗi bộ lõi là hạt giống riêng (tôi dường như nhớ lại bằng cách sử dụng thời gian chính xác cao).

Lưu ý: nếu bạn sử dụng foreach () từ tính toán Cách mạng dưới cửa sổ thì tôi nghi ngờ điều gì đó hợp lý sẽ không xảy ra. Windows không tuân thủ POSIX và điều này sẽ gây ra vấn đề khi mỗi lõi cần một mức cao trước khác nhau. bắt đầu thời gian để thiết lập hạt giống của nó (tiếc là tôi không có cửa sổ tiện dụng vì vậy tôi không thể kiểm tra điều này theo kinh nghiệm).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.