Symulator EU07 (i nie tylko) > Na warsztacie

 Optymalizacja symulatora

(1/2) > >>

panthero:
Więc na początek - kilka godzin męczyłem się wczoraj z portowaniem kodu z BC++B 5 na BC++B 6 - z marnym skutkiem - wprawdzie udało się ogarnąć błędy występujące zarówno w czasie kompilacji jak i linkowania, ale efekt był marny - symek nie ładował obrazków ani dźwięków - słowem tragedia. Z tego co przekazał mi @KURS90 to symek nie za bardzo chciał kompilować się w innym środowisku niż BC++ 5. Ale trzeba iść z duchem czasu więc ściągnąłem i zainstalowałem Turbo C++ Explorer - najnowsze dziecko Borlanda z tej rodziny i tutaj wszystko pięknie działa bez dodatkowych zmian w kodzie (mały rebuilt unitów pascalowych). Mam więc bazę i jako tako przyznaję - nie wszystko tutaj rozumiem, ale na początek zabieram się za optymalizację biblioteki odpowiedzialnej za obliczenia na wektorach - to będzie pierwszy punkt pracy. Na razie tyle.

Przenoszę.
Akvin

panthero:
Co w zasadzie mam zamiar zrobić w kodzie:

* obliczenia na wektorach w pełni w SSE - doświadczalnie sprawdziłem, że skalary wcale nie muszą być typu double(podwójna precyzja) - to w zasadzie pozwala na spokojną pracę bez wymogów procesora z SSE2. Funkcje obliczające wyznaczniki - pozbycie się - małych porcji kodu(det2x2), na rzecz większego kodu, obrabiającego jednocześnie wiele danych w trybie SIMD. (wyznacznik 3x3 macierzy przepisany na nowo w SSE - poprzednia wersja enkapsulowała det2x2 - nawet gdy det2x2 jest w SSE to efekt jest odwrotny - spowolnienie - gdyż zbyt mało danych jest do obróbki,a kilka instrukcji trzeba poświęcić na rozmieszczenie danych w rejestrach)
* ogólnie wepchnięcie wstawek asemblera gdzie się da - i gdzie to nie zaszkodzi
* ciągle analizuję kod - może pewne klasy da się zoptymalizować...
Na razie tyle

Ra:
Trzeba uważać z pozycjami obiektów zapisanymi w typie single. Typ ten ma mantysę 23 bit, czyli niecałe 7 cyfr dziesiętnych. Jeśli oddalimy pojazd od środka układu o 8km mamy niedokładność obliczeń rzędu 1mm. Przy 83km daje to już 10mm drgań wynikających z błędów obliczeń z użyciem takiej mantysy. (Scenerie raczej nie mają większego promienia.)

Kiedyś w symulatorze objawiało się to zwiększonymi drganiami przy oddalaniu się od środka, po czym zostało poprawione - podejrzewam, że poprzez zwiększenie typu. Może się wydawać, że wszystko jest dobrze, póki się jest niedaleko od początku układu współrzędnych. Ale w odległości np. 100km od środka będzie już rzucało.

Dobrym rozwiązaniem mogłoby być przemieszczanie środka układu współrzędnych. Ale nie wiem na ile zaawansowanych zmian to wymaga. Można by podzielić scenerię na kratki wielkości np. 8km, a numer kratki trzymać w oddzielnym bajcie.

Innym rozwiązaniem może być przechowywanie pozycji jako int z wartością w [mm]. Tylko wtedy dochodzą konwersje na typ zmiennoprzecinkowy do obliczeń. (Też trzeba przemieszczać początek układu robiąc dzielenie modulo, jedynie pamiętanie współrzędnej obiektów wymaga 32 bitów, a nie 64.)

uetam:

--- Cytat: Ra w 24 Kwietnia 2008, 02:50:42 ---Kiedyś w symulatorze objawiało się to zwiększonymi drganiami przy oddalaniu się od środka, po czym zostało poprawione - podejrzewam, że poprzez zwiększenie typu. Może się wydawać, że wszystko jest dobrze, póki się jest niedaleko od początku układu współrzędnych. Ale w odległości np. 100km od środka będzie już rzucało.

--- Koniec cytatu ---
yb właśnie poprawił to rzucanie. Jestem po testach - 100 km od środka układu nie trzęsie nic a nic.

Krzysiek626:

--- Cytat: Mateu w 24 Kwietnia 2008, 12:22:08 ---
--- Cytat: Ra w 24 Kwietnia 2008, 02:50:42 ---Kiedyś w symulatorze objawiało się to zwiększonymi drganiami przy oddalaniu się od środka, po czym zostało poprawione - podejrzewam, że poprzez zwiększenie typu. Może się wydawać, że wszystko jest dobrze, póki się jest niedaleko od początku układu współrzędnych. Ale w odległości np. 100km od środka będzie już rzucało.

--- Koniec cytatu ---
yb właśnie poprawił to rzucanie. Jestem po testach - 100 km od środka układu nie trzęsie nic a nic.

--- Koniec cytatu ---
@Mateu, sprawdziłeś to na starym byku? Chodzi jeszcze o prawidłowe bujanie kamery.
Pytanie, jak optymalizacja exe może wpłynąć na szybkość ładowania scenerii?
W przypadku dobrze wypasionych scn ten czas obecnie dochodzi do kilkunastu minut.

Nawigacja

[0] Indeks wiadomości

[#] Następna strona

Idź do wersji pełnej
Powered by Advanced Topic Prefix Pro
Powered by SMFPacks Likes Pro Mod