Współczesne gry są bardzo wymagającymi aplikacjami. Renderowanie dynamicznego, pełnego efektów, obrazu ze stałą prędkością co najmniej 30
FPS staje się coraz trudniejszym zadaniem, nawet dla obiektywnie mocnych komputerów. Dobra optymalizacja kodu jest podstawą do sprawnego i szybkiego działania programu. Mówiąc "optymalizacja" mamy zazwyczaj na myśli lepsze konstruowanie algorytmów lub wykorzystanie innych technik dążących do rozwiązania problemu. Czasem jednak, trzeba przejść "o jeden poziom niżej" - stworzyć kod, który jest bliżej określonego sprzętu. Najprościej sytuacja wygląda na konsolach. Tam developer ma z góry ustalona platformę na którą zostanie stworzona gra. Jest więc w stanie stworzyć takie funkcje, które będą działać maksymalnie szybko. Gorzej jest w przypadku PC. Jak powszechnie wiadomo: ilu graczy, tyle różnych konfiguracji. Istnieją jednak pewne ustalone standardy. W przypadku kart graficznych definiowane są one poprzez obsługę odpowiednich wersji DirectX lub OpenGL. Co prawda, różne rozwiązania sprzętowe sprawiają, że wydajność renderowania może być różna, jednak minimalne wymagania zostają ustalone. W kwestii programisty, zostaje odpowiednio wydajne wykorzystanie powyższych API.
Wbrew pozorom, procesory także posiadają możliwości, które jesteśmy w stanie bezpośrednio wykorzystać. Mowa tutaj o dodatkowych rozszerzeniach multimedialnych.
Są to specjalne instrukcje, dzięki którym możemy znacznie przyśpieszyć działanie naszej aplikacji:
- MMX (Początkowo Intel, teraz także AMD)
- 3DNow! (AMD)
- SSE(Początkowo tylko Intel, teraz także AAMD)
MMX. Jest to zestaw dodatkowych 57 instrukcji wykonujących operacje arytmetyczne i logiczne w technologii SIMD. SIMD (Single Instruction, Multiple Data) umożliwia nam dokonanie obliczeń za pomocą jednej instrukcji na grupie danych, spakowanych do jednego rejestru. Dzięki MMX programista mógł wykonywać równoległe obliczenia na maksymalnie dwóch, 32 bitowych zmiennych. Całość posiadała jednak, z dłuższej perspektywy, dość istotną wadę: Intel nie przeznaczył żadnych dodatkowych rejestrów dla MMX. Wszystkie operacje odbywały się na ośmiu 64 bitowych aliasach rejestrów
FPU, co zmuszało koprocesor do przełączania kontekstów działania - w niektórych przypadkach kod MMX był wolniejszy od tego tradycyjnego.
3DNow! Była to odpowiedź AMD na MMX. Założenia są bardzo podobne to tych zastosowanych u konkurencji, aczkolwiek nie obeszło się bez pewnych różnic. Podstawową był typ danych na których mogły być wykonywane operacje: u AMD były to liczby zmiennoprzecinkowe pojedynczej precyzji. Poza tym, dla 3DNow! przygotowano tylko 21 instrukcji, jednak w kolejnych generacjach procesorów zestaw ten powiększał się.
SSE. Technologia z pozoru wydaje sie być podobna do wyżej zaprezentowanych, jednak wprowadzenie jej wraz z procesorami Pentium III było dość istoną ewolucją. Do dyspozycji programisty oddano osiem oddzielnych, 128 bitowych rejestrów, mogących przechować do czterych wartości zmiennoprzecinkowych pojedynczej precyzji. Dzięki temu wzorst wydajności jest zuważalny, szczególnie podczas wykonywania operacji wektorowych i macierzowych. Kolejne genereacje SSE dodają nowe instrukcje, dzięki czemu czesc operacji matematycznych (np. dot product), można wykonać za pomocą jednego wywołania instrukcji w assemblerze.
Brak komentarzy:
Prześlij komentarz