Wpis z mikrobloga

Takie pytanko, może mądre, może głupie, nie wiem.
Pracuję nad pewnym programikiem, który przyjmuje na wejściu sporo danych i wypluwa wynik, przy czym znaczną część czasu zajmuje odczytywanie danych z dysku, a program uruchamiam bardzo często na tych samych danych i zastanawiałem się czy można to jakoś przyspieszyć. Myślałem nad czymś w stylu: załadowanie całych danych wejściowych do pamięci i potem każdorazowo odczytywanie tych danych prosto z pamięci, a nie z dysku. Jest coś takiego w ogóle możliwe i w miarę proste do wdrożenia?
Pracuję na Ubuntu, a program wywołuje klasycznie: ./program /ścieżka/do/pliku/wejściowego
Najchętniej, żeby było to coś co nie ingeruje w kod programu, a tylko w jego wywołanie (może coś w stylu podawania wirtualnej ścieżki do pliku wejściowego w pamięci RAM?).
#programista15k #programowanie #linux #ubuntu #it #informatyka
  • 14
@Icyto: Pytanie co tak naprawdę trwa najwięcej w ładowaniu danych, musisz z profilować aplikacje. Może się okazać że najdłużej trwa deserializacja, wtedy zmiany formatu się nie obejdzie. Linux powinien cachować pliki w pamięci więc jeżeli jednak aplikacja stoi na odczycie z dysku to ponowne odpalenie powinno być szybsze pod warunkiem że pliki zmieszczą się w pamięci RAM.
góle możliwe i w mia


@Icyto: nie no nie, nie optymalizuj pamieci - lepiej zrób sobie md5 z danych albo inny hash, skoro mówisz że dużo razy to się odpala na tych samych danych to najpierw ograniczy sprawdzając czy te dane się zmieniły.
@lionbest: @Saly: A jeśli chodzi o szczegóły odczytywania, to trochę Was okłamałem. Program bierze na wejście serię kilkuset zdjęć, wywoływane jest to przez ./program /ścieżka/do/plików/wejściowych/*.jpg. Mam kilka serii takich zdjęć wejściowych, więc po każdej zmianie programu wywołuję go kilka razy na różnych seriach. Zdjęcia czytane są przy pomocy funkcji OpenCV imread(). Łącznie wszystkie dane zajmują ok. 7 GB, RAMu mam 32 GB, przy czym w idle'u na ogół