Zastępowanie integracji QuasiMonteCarlo Mathematiki w C ++

12

Mam program Mathematica, który wykonuje niektóre całki w 3 lub 4 wymiarach przy użyciu tej QuasiMonteCarlometody. Problem polega na tym, że uruchomienie zajmuje denerwująco dużo czasu, do momentu, gdy niektóre z tych obliczeń nie mogą się zakończyć w maksymalnym czasie pracy dostępnym w naszym klastrze HPC. Zastanawiam się więc nad przepisaniem programu w C ++, co, jak podejrzewam, przyspieszy go w dużym stopniu.

Spojrzałem na dokumenty GSL i chociaż są sekcje na temat quasirandomowych sekwencji i regularnej integracji MC , nie widzę niczego, co je łączy. Również wyszukiwarka Google nie wykryła niczego, co wyglądałoby jak zaufane wdrożenie. Jakie są moje opcje dobrze przetestowanej implementacji integracji QMC w C ++?

W trosce o spójność wolałbym zastosować coś podobnego do metody Halton-Hammersley-Woźniakowskiego, którą Mathematica implementuje , jeśli taka jest opcja.

David Z
źródło
2
możesz zamieścić całkę na Stackoverflow, a my możemy zobaczyć, co się dzieje. Zauważ, że Mathematica jest oparta na MKL dla precyzji maszyny, która jest dość wydajna.
2
Nie jest to odpowiedź na twoje pytanie, ale zastanawiałem się, czy próbowałeś podać Compilecałkę (do kodu C) przed jej przekazaniem NIntegrate, tj. Czy jest to NIntegratepowolne czy obliczanie funkcji? Jednak korzystanie z funkcji skompilowanych w języku C może wymagać nieco dodatkowej pracy w klastrze.
Szabolcs
1
Kompilacja brzmi jak bardzo dobry pomysł, nie myślałem o tym. Dam temu szansę. Według moich szacunków każde z tych obliczeń ocenia funkcję około 5 milionów razy, a ponieważ całe obliczenie zajmuje około 3 godzin, jest to 2 ms na ocenę funkcji, co wydaje się raczej powolne w przypadku niektórych obliczeń czysto numerycznych.
David Z
@ruebenko: Będę o tym pamiętać.
David Z
2
Biblioteka CUBA ma wiele algorytmów dla problemów niskowymiarowych. Ma nawet interfejs Mathematica. feynarts.de/cuba
DLS

Odpowiedzi:

1

Biorąc pod uwagę pozorny brak quasi-integratorów Monte Carlo dla C ++ (lub C), napisałem własną implementację do użycia z GSL. Nie jest specjalnie dobrze przetestowany, ani nie implementuje algorytmu Mathematica, ale powinien być lepszy niż nic.

David Z
źródło