home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1997 #3 / amigamamagazinepolishissue03-1 / ma_1995 / 01 / ami023.txt < prev    next >
Text File  |  1997-04-06  |  10KB  |  204 lines

  1. ------------------Uwaga! Fragmenty w >...< pogrubione---------------
  2.  
  3. Jak ulepszyê procedurë? (cz. 3.)
  4. --------------------------------
  5.  
  6. OPTYMALIZACJA NA MC68020
  7.  
  8. <lead> Dzisiaj nareszcie zajmiemy sië problemem optymalizacji
  9. naszych procedur z wykorzystaniem specyficznych cech procesora
  10. Motorola 68020, które to umoûliwiajâ przyspieszenie
  11. zoptymalizowanego juû kodu w stosunku do kodu napisanego dla
  12. procesora Motorola 68000. Let's go!
  13.  
  14. <a> Miklesz/Damage
  15.  
  16. <txt> Zacznë od spraw ogólnych, by na koïcu artykuîu przedstawiê
  17. przykîady. A zatem, przypomnijmy sobie, co mamy nowego lub
  18. zmodyfikowanego, a jednoczeônie opîacalnego w uûyciu?
  19.  
  20. Przy konwersji liczb z normalnego formatu na BCD i na odwrót mamy
  21. dwie instrukcje: PACK oraz UNPACK. Radzë z nimi
  22. poeksperymentowaê! Zmieniî sië czas wykonywania instrukcji
  23. przesuniëê bitowych. W chwili obecnej wolniejsze sâ przesuniëcia
  24. arytmetyczne: ASR.a i ASL.a, natomiast szybsze sâ przesuniëcia
  25. logiczne: LSR.a i LSL.a.
  26.  
  27. Ponadto wszystkie instrukcje z danej grupy przesuniëê wykonujâ
  28. sië z tâ samâ prëdkoôciâ. Co to oznacza w praktyce? Przede
  29. wszystkim to, ûe jedynie instrukcje:
  30.  
  31. <l>   aSL.b  #1,Dc
  32.  
  33. <txt>warto zamieniaê na:
  34.  
  35. <l>    ADD.b  Dc,Dc
  36.  
  37. <txt> Mamy takûe dostëp do absolutnej nowoôci: instrukcji na
  38. polach bitowych. Na przykîad instrukcja BFINS jest znacznie
  39. szybsza od odpowiadajâcej jej kombinacji MOVE, OR i AND. Ale tu
  40. uwaga, nie we wszystkich wypadkach, radzë sprawdziê samemu, gdyû
  41. na rozwaûanie wszystkich trybów adresowania nie starczyîoby
  42. objëtoôci tego numeru. Natomiast BFINS jest niewâtpliwie bardzo
  43. wygodnâ instrukcjâ, która na pewno "zoptymalizuje" nam czas
  44. poôwiëcony na napisanie rutynki. Jeûeli potrzebujesz postawiê
  45. "ileô tam" punktów i zaleûy Ci na czasie, sprawdú wczeôniej
  46. szybkoôê, nim uûyjesz BFINS. Jeûeli chcesz jednak tylko coô
  47. przetablicowaê, to wal ômiaîo! Polecam teû uûywanie BFEXTS (do
  48. "wyciâgania" pola bitowego ze znakiem) i BFEXTU (to samo, ale bez
  49. znaku). Za pomocâ BFFFO moûesz znaleúê najstarszy, zapalony, bit
  50. pola bitowego, a uûywajâc BFCLR, BFCHG i BFSET kasowaê, negowaê
  51. lub ustawiaê pole bitowe. Ale przestrzegam jeszcze raz, najpierw
  52. sprawdú szybkoôê dla danego trybu adresowania.
  53.  
  54. Przy okazji warto zauwaûyê, ûe na MC68020 istniejâ instrukcje,
  55. które sië pozornie nie zmieniîy, lecz majâ teraz wiëksze rozmiary
  56. offsetów.
  57.  
  58. Pozornie nie zmienione instrukcje TST, CMP oraz nowa CMP2
  59. dziaîajâ teraz równieû z uûyciem adresowania wzglëdem licznika
  60. programu, o czym warto pamiëtaê...
  61.  
  62. Oprócz tego wprowadzono nowâ instrukcjë: EXTB, która to
  63. "rozszerza" nam zapisanâ bezpoôrednio w bajcie wartoôê do
  64. dîugiego sîowa. Jest znacznie szybsza niû uûycie kombinacji dwóch
  65. innych instrukcji: EXT.W, a nastëpnie EXT.L.
  66.  
  67. Czy ktoô z Was próbowaî wykonaê mnoûenie dwóch 32-bitowych
  68. wartoôci na procesorze MC68000? Trzeba byîo kombinowaê jak koï
  69. pod górkë, co nie? Procedurka zajmowaîa "trochë" linii i miaîa
  70. raczej charakter ciekawostki niû normalnego "odpowiednika"
  71. instrukcji. Teraz mamy MC68020, i cóû? Odpowiednia instrukcja
  72. zaîatwia nam wszystko za jednym zamachem! Moûemy mnoûyê 32 bity
  73. przez 32 bity, i otrzymaê wynik 32-bitowy lub 64-bitowy, oraz
  74. dzieliê 64 bity lub 32 bity przez 32 bity. Wzrost prëdkoôci jest
  75. oczywisty, to chyba jasne!
  76.  
  77. Na tym koïczâ sië nowe instrukcje, które mogâ wpîynâê na szybkoôê
  78. dziaîania naszych procedur. Pozostaîo jednak kilka innych
  79. ciekawych cech procesora Motorola 68020, które warto omówiê i
  80. które moûemy wykorzystaê.
  81.  
  82. Kiedy zabraknie nam wolnych rejestrów adresowych, cóû robimy? Na
  83. MC68000 kombinujemy poprzez zapisywanie na stos lub przez podobne
  84. machinacje. A na MC68020 po prostu uûywajâc poôredniego trybu
  85. adresowania przyjmujemy komórkë pamiëci, jak rejestr adresowy, i
  86. sprawë mamy z gîowy. Oczywiôcie prëdkoôê spada, ale to juû mniej
  87. waûne. Jednakûe moûe sië przydarzyê, ûe brakuje nam tylko
  88. rejestrów adresowych, a rejestrów danych mamy w bród... Wtedy
  89. procesor MC68020 przyjmie nam tryb adresowania wzglëdem rejestru
  90. danych, czyli: (Da), gdzie a naleûy do przedziaîu [0;7]. Tym
  91. razem takie adresowanie bëdzie wolniejsze od (Aa) jedynie o 3
  92. cykle. Jak wiëc widzicie na podstawie dwóch ostatnich przykîadów,
  93. mamy teraz osiem szybkich rejestrów, osiem trochë wolniejszych
  94. rejestrów adresowych, emulowanych w rejestrach danych, oraz w
  95. krytycznych sytuacjach juû dosyê wolnâ caîâ pamiëê. Pamiëtajcie
  96. jednak, ûe bardzo czësto wystarczy umiejëtniej gospodarowaê
  97. rejestrami lub chwilowo zachowaê gdzieô stos i uûywaê jedynie
  98. rejestrów adresowych.
  99.  
  100. Jeûeli jeszcze o tym nie wiecie, to spieszë donieôê, ûe procesor
  101. MC68000 zezwala na adresowanie z 16-bitowym przesuniëciem
  102. wzglëdem podstawowego rejestru adresowego. Na MC68000 moûliwe
  103. byîo tylko przesuniëcie 8-bitowe. Jeûeli uûywamy 16-bitowego
  104. przesuniëcia, to warto zauwaûyê, ûe instrukcja wykonywana z
  105. cache'a nie jest przy tym wolniejsza ani o jeden cykl w stosunku
  106. do odpowiednika z 8 bitami, natomiast wykonywana z pamiëci jest
  107. wolniejsza tylko o jeden cykl. Co wiëcej, moûemy uûywaê teû i
  108. 32-bitowych przesuniëê, lecz te zabiorâ nam kolejne cztery cykle
  109. instrukcji... Warto tu zauwaûyê, ûe w wiëkszoôci dobrych
  110. asemblerów nie musimy podawaê rozmiaru po wartoôci przesuniëcia,
  111. gdyû przy asemblacji i tak wybrany zostanie najkorzystniejszy
  112. tryb. Radzë to jednak sprawdziê, aby sië póúniej nie okazaîo, ûe
  113. niepotrzebnie operujemy caîy czas na dîugich sîowach. Pamiëtajcie
  114. teû, ûe czasami moûna uûyê mniejszego przesuniëcia poprzez
  115. odpowiednie ulokowanie danych.
  116.  
  117. Jak zapewne juû wiecie, procesor MC68020 umoûliwia nam skalowanie
  118. przesuniëê opartych na rejestrach adresowych. Jest to zupeînie
  119. nowy tryb adresowania, którego radzë Wam uûywaê. Skala moûe mieê
  120. wartoôê 1, 2, 4 lub 8. Przy tym warto zauwaûyê, ûe niezaleûnie od
  121. uûytej skali, instrukcja wykonuje sië z tâ samâ prëdkoôciâ.
  122. Poniûej przedstawiam przykîad uûycia skalowanych danych:
  123.  
  124. <l> ASL.a  #b,Dc          ->       MOVE.d (Ae,Dc.a*b),f
  125.  
  126.     MOVE.d (Ae,Dc.a),f
  127.  
  128. <txt>Oczywiôcie b moûe przyjmowaê wartoôci: {1;2;4;8}. Ten nowy
  129. sposób adresowania jest bardzo przydatny przy wszelkiego rodzaju
  130. tablicach, copper-listach, listach adresów lub bardziej zîoûonych
  131. strukturach danych. Skalowanie moûe byê uûyte zarówno w
  132. operandzie úródîowym, jak teû i docelowym. Naturalnie, kiedy nie
  133. uûywamy znaku *, procesor automatycznie przyjmie skalë=1.
  134. Jednakûe kiedy piszemy na nowym procesorze, kod pod MC68000, nie
  135. wolno uûywaê znaku *, gdyû skalowanie nie jest rozszerzonâ wersjâ
  136. skalowania MC68000, lecz zupeînie nowâ funkcjâ, której MC68000
  137. nie ma. Tak na marginesie, zapytacie pewnie dlaczego akurat skala
  138. 1, 2, 4 i 8, a nie, powiedzmy, 3, 5, 6? Otóû zauwaûcie, ûe
  139. procesor w tym wypadku musiaîby sobie wewnëtrznie te dane
  140. przemnoûyê, co wpîynëîoby na szybkoôê wykonywania instrukcji!
  141.  
  142. Podsumujmy wiadomoôci o nowym trybie adresowania:
  143.  
  144. * Procesor Motorola 68020 oferuje nam 18 trybów adresowania, w
  145. stosunku do 12 trybów Motoroli 68000.
  146.  
  147. * Nowa Motorola umoûliwia adresowanie "poôrednie", które moûe byê
  148. czasami uûyteczne.
  149.  
  150. * Mamy teraz moûliwoôê stosowania wiëkszego rozmiaru przesuniëê,
  151. co w wypadku duûych tablic daje nam szansë przyspieszenia naszych
  152. procedur.
  153.  
  154. * Uzyskujemy moûliwoôê "skalowania" przesuniëê, zawartych w
  155. rejestrach adresowych, zastosowanie -- oczywiste.
  156.  
  157. Na koniec zajmë sië jeszcze jednym problemem, a mianowicie czasem
  158. dostëpu do poszczególnych typów pamiëci, których liczba zaleûy od
  159. typu komputera, zastosowanych rozszerzeï i typu procesora.
  160. Konfiguracjâ, którâ sië zajmë, bëdzie bardzo popularna dziô Amiga
  161. 1200 z pamiëciâ Fast. W takim modelu mamy do dyspozycji: Chip
  162. Memory, ROM, Cache Memory i Fast Memory. Omówmy je zatem.
  163.  
  164. >Chip Memory.< Jest to standardowa pamiëê kaûdej Amigi, w naszym
  165. wypadku jest jej 2 MB. Dostëp do niej majâ wszystkie typy ukîadów
  166. komputera. Moûna przechowywaê tu zarówno kody programów, jak teû
  167. dane. Jest to bardzo wolna pamiëê, wiëc polecam uûywaê jej
  168. tylko wtedy, kiedy jest to konieczne.
  169.  
  170. >ROM.< Kaûdy przedszkolak wie, ûe do ROM-u nic nie moûna zapisaê
  171. (na ogóî). Po co wiëc go omawiam? Otóû warto zwróciê uwagë na to,
  172. ûe ROM jest szybszy od Chip Memory, wiëc wykonywanie sië kodu z
  173. ROM-u trwa krócej. A przecieû w ROM-ie mamy zapisane gotowe
  174. procedurki, które mogâ sië nam przydaê przy kodowaniu. Moûemy
  175. takûe wykorzystywaê dane zawarte w ROM-ie, choê ma to juû
  176. mniejszy sens. Tak wiëc jeôli masz umieôciê swój kod w Chip
  177. Memory, spróbuj znaleúê i uûyê odpowiadajâcej mu procedurki z
  178. posiadanego przez Ciebie 0,5 MB ROM-u, a nuû bëdzie to szybsze
  179. rozwiâzanie.
  180.  
  181. >Cache Memory.< Jest to pamiëê, do której bezpoôrednio równieû
  182. nic nie moûemy zapisaê ani odczytaê z niej, jednakûe procesor
  183. automatycznie przepisuje sobie do niej swój wykonujâcy sië kod.
  184. Mamy 256 B pamiëci Cache. Tutaj uwaga, w naszym wypadku jest ona
  185. przeznaczona wyîâcznie na kod, a nie na dane, jak ma to miejsce w
  186. nowszych Motorolach. Co daje nam Cache Memory. Znaczny wzrost
  187. prëdkoôci programu, wykonujâcego sië z niej w porównaniu do, np.
  188. Chip Memory. Radzë wiëc tak konstruowaê wszelkie pëtle, aby w
  189. caîoôci mieôciîy sië w Cache Memory!
  190.  
  191. >Fast Memory.< Na koniec zostawiîem sobie ten najbardziej
  192. uûyteczny typ pamiëci. Amiga wyposaûona w Fast Memory pracuje
  193. standardowo o ok. 2,14 raza szybciej. Standardowy procesor Amigi
  194. 1200, wykonujâcy kod znajdujâcy sië w Fast Memory, dziaîa z
  195. prëdkoôciami dochodzâcymi do 3 MIPS-ów, co utalentowanemu
  196. koderowi pozwoli na tworzenie efektów, znanych np. z pecetycznych
  197. gierek typu Doom czy Comanche. Naleûy zauwaûyê, ûe dostëp do
  198. pamiëci Fast Memory ma tylko procesor gîówny, tak wiëc wszelkie
  199. bezpoôrednie wyôwietlanie grafiki, bâdú odtwarzanie sampli z Fast
  200. Memory jest niemoûliwe!
  201.  
  202. W tym momencie przerywam opis typów pamiëci, by juû za miesiâc
  203. zajâê sië ich praktycznym wykorzystaniem spod poziomu asemblera.
  204.