Symulator EU07 (i nie tylko) > Na warsztacie
Optymalizacja symulatora
youBy:
Ja zastosowałem sztuczkę, iż przy oddaleniu się o więcej niż 10 km od początku układu współrzędnych cała sceneria zostaje przesunięta o 10km w "tył". Nie wiem jak wyglądają wyniki po 40-50 przeskokach (sądzę, że nie ma problemów, ale to trzeba zbadać dogłębnie).
--- Cytuj ---Pytanie, jak optymalizacja exe może wpłynąć na szybkość ładowania scenerii?
W przypadku dobrze wypasionych scn ten czas obecnie dochodzi do kilkunastu minut.
--- Koniec cytatu ---
Moim zdaniem przydałyby się scenerie binarne, ale zrobienie tego może wymagać głębokich modyfikacji kodu.
janek32:
--- Cytat: youBy w 24 Kwietnia 2008, 14:34:08 ---Moim zdaniem przydałyby się scenerie binarne, ale zrobienie tego może wymagać głębokich modyfikacji kodu.
--- Koniec cytatu ---
Takie scenerie są w TRS?
uetam:
--- Cytat: janek32 w 24 Kwietnia 2008, 16:41:19 ---
--- Cytat: youBy w 24 Kwietnia 2008, 14:34:08 ---Moim zdaniem przydałyby się scenerie binarne, ale zrobienie tego może wymagać głębokich modyfikacji kodu.
--- Koniec cytatu ---
Takie scenerie są w TRS?
--- Koniec cytatu ---
Y, ale co to ma wspolnego z tematem? Nikomu nie bedzie sie chcialo robic importu jezeli do tego zmierzasz ;]
youBy:
Przy optymalizacji należałoby również dokonać prób z wielordzeniowością procesorów (zawsze to troszkę więcej FPS będzie). Moje pierwsze próby wykazały tendencję spadkową, być może ze względu na złe podejście do sprawy, gdyż nie zajmowałem się tym kiedykolwiek wcześniej.
kj:
Programowanie wielowątkowe pociąga za sobą problem synchronizacji i blokowania danych. Problem wczytywania plików definiujących obiekty 3D faktycznie możnaby rozwiązać przy użyciu konwersji na formaty binarne (odpada konieczność parsowania pliku). Z teksturami może być nieco gorzej. Wczytywanie tekstur można by zaimplementować przy użyciu mapowania pliku w pamięci (w POSIX: mmap(), w Win32 - niestety nie wiem, nie programuję pod tą platformę). Moje małe testy wykazały 4-krotne przyspieszenie przy wczytywaniu pliku o rozmiarze 1MB oraz ponad 30-krotne w przypadku pliku o rozmiarze 10MB.
Jeśli chodzi o wstawki asemblerowe i ogólnie przepisywaniu kodu do asemblera - faktycznie, użycie SSE(2) może tutaj pomóc, jednak samo używanie wstawek w kodzie nie zawsze jest zalecane. Wstawki burzą optymalizacje, wprowadzane przez kompilator, dlatego dobrze by było dokładnie rozważyć, czy wstawienie wstawki w danym miejscu kodu przyniesie więcej pożytku, czy szkody.
Odniosę się jeszcze do pisania symulatora w dwóch językach. Może lepiej przepisać wszystko .pas na .cpp lub .c? Kompilatory Pascala mają złą sławę jeśli chodzi o jakość generowanego kodu. Nie wspomnę już o tym, że sam Pascal ma w sobie pewne mechanizmy, które są przydatne do wyszukiwania błędów, ale niekorzystnie wpływają na wydajność.
Oprócz tego warto się też zapoznać z dwoma dokumentami firmy AMD, dokładnie omawiającymi problem optymalizacji programu:
1, 2
Nawigacja
Idź do wersji pełnej