2010-06-26 38 views
9

Tôi đang điều tra bằng cách sử dụng GPU nvidia cho các mô phỏng Monte-Carlo. Tuy nhiên, tôi muốn sử dụng các trình tạo số ngẫu nhiên gsl và cũng là bộ tạo số ngẫu nhiên song song như SPRNG. Có ai biết nếu điều này là có thể?Sử dụng số ngẫu nhiên với GPU

Cập nhật

Tôi đã chơi về với RNG sử dụng GPU. Hiện tại không có một giải pháp tốt đẹp. Mersenne Twister đi kèm với SDK không thực sự thích hợp cho các mô phỏng Monte-Carlo của tôi vì phải mất một thời gian rất dài để tạo ra hạt giống.

Thư viện NAG hứa hẹn hơn. Bạn có thể tạo RN theo lô hoặc theo từng chủ đề riêng lẻ. Tuy nhiên, chỉ có một vài bản phân phối hiện được hỗ trợ - Đồng bộ, theo cấp số nhân và Bình thường.

+0

Có thể bạn không thể gọi bất kỳ loại RNG nào từ GPU, nhưng bạn có thể tạo trước số ngẫu nhiên và sử dụng chúng làm đầu vào cho chương trình của mình. – Gabe

Trả lời

5

Hướng dẫn GSL recommends the Mersenne Twister.

Tác giả Twister Mersenne có version for Nvidia GPUs. Tôi đã xem xét việc chuyển gói này sang gói R gputools nhưng thấy rằng tôi cần quá nhiều bản vẽ (hàng triệu, tôi nghĩ) trước khi kết hợp 'tạo GPU và tạo sẵn cho R' nhanh hơn chỉ vẽ trong R (chỉ sử dụng CPU).

Nó thực sự là một sự cân bằng tính toán/giao tiếp.

-2

Bạn sẽ phải thực hiện chúng một mình.

+5

Hmmm ... * luôn luôn * đáng nói rằng điều này không * không * có nghĩa là thiết kế một mình. Sử dụng thuật toán được hiểu rõ, chất lượng cao. Có thật không. – dmckee

+0

Ông đã nói về 2 thuật toán đặc biệt, vì vậy tôi nghĩ rằng nó rõ ràng ông sẽ thực hiện hai thuật toán đặc biệt và không phát minh ra một cái gì đó mới. –

+0

GSL và SPRNG không phải là thuật toán, chúng là các thư viện. Chúng chứa một số máy phát điện khác nhau. –

5

Tạo song song ngẫu nhiên lớn khi bạn cần nó cho GPU là một vấn đề khó khăn. Đây là một chủ đề nghiên cứu tích cực. Bạn thực sự phải cẩn thận không chỉ để có một trình tạo ngẫu nhiên tuần tự tốt (những thứ bạn tìm thấy trong văn học) mà còn đảm bảo rằng chúng là độc lập. Độc lập theo từng cặp là không đủ cho một mô phỏng Monte Carlo tốt. AFAIK không có sẵn mã miền công cộng tốt.

2

Tôi vừa phát hiện ra rằng NAG cung cấp một số RNG routines. Các thư viện này miễn phí cho các học giả.

0

Sử dụng Misterenne Twister PRNG, như được cung cấp trong SDK CUDA.

0

Ở đây chúng tôi sử dụng chuỗi sobol trên GPU.

4

Đồng nghiệp của tôi và tôi có một số preprint, to appear in the SC11 conference xem lại kỹ thuật thay thế để tạo số ngẫu nhiên phù hợp với GPU. Ý tưởng là số ngẫu nhiên thứ n là:

x_n = f(n) 

Ngược lại với cách tiếp cận truyền thống nơi

x_n = f(x_{n-1}) 

Source code có sẵn, mà thực hiện phát điện khác nhau. cung cấp 2^64 luồng trở lên, mỗi luồng có khoảng thời gian từ 2^128 trở lên. Tất cả đều trải qua một loạt các bài kiểm tra (các bộ TestU01 Crush và BigCrush) của cả độc lập thống kê trong dòng và liên tục. Thư viện cũng bao gồm các bộ điều hợp cho phép bạn sử dụng các trình tạo của chúng tôi trong một khung công tác GSL.