Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Wiadomości - panthero

Strony: [1]
1
Na warsztacie / Odp: Optymalizacja symulatora
« dnia: 24 Kwietnia 2008, 02:26:33 »
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

2
Na warsztacie / Optymalizacja symulatora
« dnia: 23 Kwietnia 2008, 14:06:53 »
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

3
Poszukuję, chcę zrobić / Odp: Optymalizacja symulatora
« dnia: 22 Kwietnia 2008, 19:43:44 »
Dzięki @KURS90 mam aktualne źródła i muszę przyznać, że łącznie z header'ami ponad 2 000 000 linii kodu robi wrażenie. Do rzeczy - obecnie od dłuższego czasu pracuję nad przenosinami kodu pod C++ Builder 6 - jakoś się udaje - trochę jest błędów w header'ach, ale powoli praca postępuje - jeśli po kompilacji symulator zadziała normalnie to przyjrzę się bliżej źródłom odpowiedzialnym za 3D - jest tam sporo zamieszania, ale widziałem już kilka funkcji, które ładnie będą mogły być zoptymalizowane.

4
Poszukuję, chcę zrobić / Odp: Optymalizacja symulatora
« dnia: 21 Kwietnia 2008, 17:12:45 »
150 FPS w Mocznikach mam, gdy renderuje się tylko kabina; Normalnie w granicach 15 - 30, a
maksimum wyciągane na moim sprzęcie to jakieś 350-400 FPS. Jak widać to rendering daje ostro po czasie przetwarzania.
(Dane zostały zebrane przypadkowo podczas testów funkcji - wynik negatywny).

A najbardziej aktualne źródła ma chyba @KURS90.

Oczywiście przetwarzanie grafiki w największym stopniu będzie obciążać... no właśnie co - w OpenGL operuje się na tzw. primitives - w zasadzie podejście do programowania grafiki w OpenGL nie jest podejściem czysto obiektowym - jeśli dla ułatwienia sobie pracy programiści "opakowali" w klasy zbiory funkcji OpenGL'a to faktycznie duża ilość obiektów nie będzie wpływać na spowolnienie renderowania - dzisiejsze karty graficzne są kilkakrotnie bardziej skomplikowane w architekturze zewnętrznej niż dzisiejsze CPU, spowolnienie bierze się ze specyficznego operowania obiektami w programie - zależy też jak są wiązane metody - czy statycznie, czy w tzw. runtime - to już się przedkłada na szybkość działania gdyż zawsze przed wywołaniami metod odpowiednio są obliczane ich adresy a to spowalnia - zwłaszcza przy wielu obiektach... Temu zaradzić za bardzo się nie da bo wszystko trzeba by od nowa - z innym podejściem pisać, nie w tym rzecz. Przecież nawet w metodach klas odpowiedzialnych za tworzenie i "układanie" wierzchołków można wykorzystać instrukcje SIMD - a najlepiej tam gdzie na większej liczbie nie powiązanych ze sobą danych (współrzędne wierzchołków) wykonuje się takie same operacje. Większość aplikacji, które korzystają z OpenGL używa także natywnych funkcji OpenGL np GL_NV_... ale na tym niestety się nie znam.

Podsumowując - owszem to karta graficzna (i jej sterownik) zajmuje się przetwarzaniem i realizowaniem poleceń OpenGL, ale... dane wierzchołków - ich współrzędne oblicza procesor. Tak samo zresztą wykrywanie kolizji - tego OpenGL nie zrobi - to wszystko robota CPU - optymalizując funkcje obliczające wierzchołki i całą resztę graficznych detali - można znacząco przyspieszyć wydajność aplikacji. Aha - ja na razie źródeł nie chcę - miną tygodnie zanim pewnie - doczytam się o co chodziło developerom - z całym szacunkiem dla Was - to Wy wiecie gdzie są "wąskie gardła" - na razie potrzebna mi taka jakby "dokumentacja" Waszego projektu - pro prostu - jak poradzono sobie z konkretnymi rzeczami - czy projekt używa wielu wątków, jak zorganizowano program w klasy itp. Potem można zacząć właściwą pracę - nie można tuningować silnika w aucie znając tylko metody tuningu - trzeba znać i silnik i całe auto.

5
Poszukuję, chcę zrobić / Odp: Optymalizacja symulatora
« dnia: 18 Kwietnia 2008, 10:34:06 »
Myślę, że potencjał może być w wykorzystaniu równoczesnego (równoległego?) mnożenia liczb zmiennoprzecinkowych...

A to m. in. można właśnie uzyskać na określonych instrukcjach SSE - http://pl.wikipedia.org/wiki/Streaming_SIMD_Extensions

Wszystkie nowsze procesory - od Pentium III wzwyż to posiadają, więc można tą technologię wykorzystać. Jednym słowem - wiem, że w OpenGL np. w określaniu współrzędnych wykorzystuje się typ Single. Rejestr XMM w SSE może jednocześnie przeprowadzić CZTERY równoległe operacje mnożenia na tym typie. Możliwości są - nie można ich nie wykorzystać. Ja proponuję coś takiego - napiszę sobie np. w Delphi jakiś program, który będzie wykonywał jakieś złożone obliczeniowo operacje. I zrobię go w dwóch lub trzech wersjach - pierwsza "normalna" tj. bez wstawek asemblerowych, druga - wstawki asemblera, ale tylko z wykorzystaniem FPU i trzecia - wstawki asemblera z wykorzystaniem MMX/SSE. Następnie przesłałbym to chętnym developerom, a oni mogliby wyrazić swoje zdanie i odrzucić lub ewentualnie zaaprobować mój pomysł.

6
Poszukuję, chcę zrobić / Odp: Optymalizacja symulatora
« dnia: 17 Kwietnia 2008, 22:59:47 »
Ok, w końcu znów siedzę przed komputerem, bo wracałem do domu z Opola - swoją drogą - 3 x Kiblem podróż czasem może być męcząca, a czasem fascynująca - dziś to drugie, ale do rzeczy.

Tak pobieżnie czytam te Wasze posty i przyznaję, że nie ogarniam całego forum - jeśli wcześniej się podobny temat postu do mojego pojawił, to przepraszam za powtórzenie. Sedno całej sprawy - z mojego punktu widzenia jest takie - nie neguję tego, że symulator jest optymalnie napisany:
 
Witam, i jednoczenie nie rospisujac sie o zawilosci i balaganie w kodzie zaproponuje funkcje Ground.Update(dt, n);, ale jako ze to jest zbyt obszerne to moze cos innego... uno momento ...
To akurat jest dosyć dobrze zrobiona funkcja jednak :)

Po prostu - w Delphi pisze od kilku lat, funkcje "inline" asemblera też już pisałem - teraz na studiach zabrałem sie ostro za "myślenie" w asemblerze z dobrym efektem, więc pomyślałem, że mogę jakoś się Wam przydać. Przyznam się na przykład, że też próbowałem (na projekt) zrobić grę w OpenGL(Tetris) ale jakoś to zarzuciłem, zaliczyłem czym innym - jednak pojęcie o tym pewne mam - ale mnie najbardziej chodzi o doraźne przepisanie metod typowo obliczeniowych - koprocesor, liczby nawet z precyzją większą niż double (tbyte) to wszystko potrafię wykorzystać - instrukcję typu MMX i SEE też można wykorzystać. Ogólnie temat rzeka. Naprawdę chce też coś dać od siebie - kabin ani modeli nie zrobię bo grafik ze mnie marny, ale programowaniem mogę pomć.

7
Poszukuję, chcę zrobić / Optymalizacja symulatora
« dnia: 17 Kwietnia 2008, 19:25:57 »
Witam serdecznie wszystkich użytkowników - jestem nowy na forum, ale Waszego Dzieła używam już od dawna - kolej kochałem także od dawna. Od dawna jestem także programistą - pascal/delphi, c/c++, java i asembler. Zakładam ten wątek ponieważ chce poznać zdanie programistów symulatora na temat sensowności wykonania optymalizacji funkcji użytych w tymże symulatorze i przepisania ich całkowicie jako tak samo funkcjonalne, ale bezpośrednio języku asemblera - mam na myśli np. fizykę. Sam symulator zdaje mi się - po oględzinach być napisany w Delphi, lub C++ Builderze Borlanda. Naprawdę Wasz projekt jest niesamowitym przedsięwzięciem i chyląc czoło wszystkim, którzy pracowali nad symulatorem - oferuję moje umiejętności pisania w języku asemblera x86 (jako całej rodziny tego typu procesorów) aby zoptymalizować najbardziej obliczeniowo obciążające procesor metody poszczególnych klas, których zapewne użyliście w tym symulatorze. Wiem, że po prostu możecie nie uwierzyć w moje umiejętności programowania ogólnie dlatego - zapraszam na http://panthero.republika.pl. To takie moje małe portfolio - hehs - niby programy w Javie pod platformę J2ME, ale one niech będą potwierdzeniem, że potrafię programować obiektowo. A efekty moich prac w asemblerze, które de facto powstały w czasie moich studiów, a które dalej trwają mogę przesłać zainteresowanym - teraz z grupą kolegów na studiach wprawdzie tworzymy - dydaktycznie w asemblerze prosty system operacyjny, ale naprawdę wielkim zaszczytem byłoby dla mnie gdybym mógł także pomóc w pracach nad tak wspaniałym projektem jakim jest MaSzyna:) Zaznaczam - to nie jest kolejny post typu - proszę o źródła - wcale ich nie chcę i nie potrzebuję - developerzy wiedzą o co mi chodzi - wystarczy ciało jednej metody - która ma wykonać złożone obliczenia, a ja mogę napisać taką samą w asemblerze - maksymalnie ją optymalizując. Oczywiście niekiedy nie można pisać "wyrwanych z kontekstu" metod, ale myślę, że dam radę:)
Pozdrawiam:)

Strony: [1]