W moim programie symuluję system N-body dla dużej liczby iteracji. Dla każdej iteracji generuję zestaw współrzędnych 6N, które muszę dołączyć do pliku, a następnie użyć do wykonania następnej iteracji. Kod jest napisany w C++ i obecnie korzysta z metody ofstream
write()
do zapisywania danych w formacie binarnym w każdej iteracji.Najszybszy sposób zapisu danych podczas ich tworzenia
Nie jestem ekspertem w tej dziedzinie, ale chciałbym poprawić tę część programu, ponieważ jestem w trakcie optymalizacji całego kodu. Uważam, że opóźnienie związane z zapisywaniem wyniku obliczeń w każdym cyklu znacznie spowalnia działanie oprogramowania.
Jestem zdezorientowany, ponieważ nie mam doświadczenia w programowaniu równoległym i we/wy dla plików o niskim poziomie. Myślałem o pewnych abstrakcyjnych technik Wyobrażałem mogłaby wdrożyć, ponieważ jestem programowanie dla współczesnego (ewentualnie wielordzeniowych) maszyny z uniksach:
- Zapisywanie danych w pliku w kawałki n iteracjach (nie wydaje być lepsze sposoby, aby kontynuować ...)
- parallelizing kod z OpenMP (jak faktycznie realizują bufor tak, że nici są synchronizowane prawidłowo i nie pokrywają się?)
- Korzystanie
mmap
(rozmiar pliku może być ogromny, rzędu GB, czy to podejście jest wystarczająco solidne?)
Jednak nie wiem, jak najlepiej je wdrożyć i odpowiednio je połączyć.
Jakie jest twoje pytanie? –
"Uważam, że opóźnienie związane z zapisywaniem wyniku obliczeń w każdym cyklu znacznie spowalnia działanie oprogramowania." czy czujesz to czy sprofilowałeś swój kod? –
Czy profilowałeś kod, aby upewnić się, że twoje odczucia dotyczące opóźnień są prawidłowe? – Grizzly