Mining kryptowalut - część 3/4 - optymalizacja

Mining kryptowalut - część 3/4 - optymalizacja

Przechodzimy płynnie do kart produkcji AMD. Tutaj mamy zdecydowanie więcej pola do manewru, ponieważ format BIOS-u jest znany od kilku lat, a informacje w nim zawarte zostały już zanalizowane przy okazji reverse engineeringu sterowników linuxowych. W przypadku kart AMD mamy pełną elastyczność modyfikacji i aby to uzyskać, musimy uzbroić się w znacznie potężniejszy arsenał narzędzi:

  • Potrzebujemy edytor BIOS-ów, który będzie się różnił pomiędzy rodzinami kart, ale sama idea działania jest podobna – pozwoli nam to na zmianę zegarów, TDP oraz przeliczenie sumy kontrolnej BIOS-u
  • Do modyfikowania zawartości pliku potrzebujemy zastosować edytor dyskowy (heksadecymalny), np. HexEdit.
  • Oprócz tego będą nam potrzebne standardowe narzędzia, takie jak GPU-Z, MSI Afterburner i ATiFlash
Podgląd BIOS-u z karty - źródło: phoronix.com (https://www.phoronix.com/scan.php?page=article&item=amd_atombios_dumper&num=1)

Musimy pamiętać o tym, że karty różnią się od siebie dość znacznie, nawet pomiędzy rewizjami PCB tego samego modelu. Objawia się to tym, że np. wielkości TDP i regulacji power limitu będą inne, zegary i napięcia będą się różnić albo – w najgorszym wypadku – regulacja napięcia będzie kompletnie zablokowana sprzętowo (przykładem kart, które były tym dotknięte, są późniejsze rewizje Gigabyte’ów 7950 i 7970) . Dlatego zawsze należy wychodzić od oryginalnego BIOS-u jako punktu wyjścia. Ogólna procedura, która może być zresztą aplikowana do każdej karty, wygląda tak:

W przypadku kart AMD mamy pełną elastyczność modyfikacji i aby to uzyskać, musimy uzbroić się w znacznie potężniejszy arsenał narzędzi

  1. Zapisujemy kopię domyślnego BIOS-u do pliku przy użyciu GPU-Z lub AtiWinFlasha. Tego pliku nigdy nie ruszamy – w przypadku jakichś problemów będziemy mogli go wykorzystać do przywrócenia początkowego stanu sprzętu.
  2. Robimy kopię pliku z oryginalnym BIOS-em i na nim pracujemy.
  3. Otwieramy plik z poprzedniego kroku w edytorze.
  4. Dokonujemy zmiany jednego parametru.
  5. Zapisujemy zmieniony BIOS pod nowa nazwą.
  6. Flashujemy kartę nowym BIOS-em.
  7. Po udanym flashu restartujemy komputer.
  8. Jeśli komputer bootuje poprawnie, przystępujemy do testów. Jeśli wyniki są niezadowalające albo chcemy jeszcze coś podciągnąć, możemy powtórzyć procedurę startując z kroku 3.
  9. Jeśli komputer nie bootuje, przystępujemy do procedury ratunkowej:
    1. Jeśli karta posiada układ dual BIOS, możemy wykonać hot flash.
    2. Jeśli karta nie ma układu dual BIOS, potrzebujemy pomocniczej karty, która będzie służyć do wyświetlania pulpitu.

 

Dobrze jest też przeprowadzić modyfikację BIOS-u na przetestowanej karcie, której OC rdzenia i pamięci jest już znane. Wtedy można w ramach modyfikacji ustawić w BIOS-ie sprawdzone zegary, ale z jednym zastrzeżeniem – modyfikacja timingów pamięci (tzw. memory strap) najczęściej pociąga za sobą zmianę „podkręcalności” VRAM. Modyfikacja strapów jest z kolei konieczna ze względu na to, jak działają kontroler pamięci w GPU i sterownik karty:

Memory strap, czyli zestaw timingów, jest zapisany na stałe w BIOS-ie karty i jest powiązany z częstotliwością taktowania pamięci – w BIOS-ie jest miejsce na kilkanaście strapów, które są uszeregowane rosnąco względem przypisanej częstotliwości. Domyślnie są zorganizowane tak, że wraz ze wzrostem zegara VRAM timingi skokowo przełączane są na luźniejsze (w skokach po 125-250 MHz) i to właśnie powoduje obserwowalne wyraźnie spadki wydajności kart w przypadku OC pamięci o 1 MHz ponad ustawienie domyślne – wybierany jest następny strap, który zawiera dużo luźniejsze timingi, a większe opóźnienia powodują spadek wydajności. Dlatego konieczne jest OC o jakieś 60-70 MHz, żeby zrekompensować stratę, a to czasem powoduje już niestabilność – kości mogą nie być w stanie pracować przy takiej kombinacji napięcie/częstotliwość/opóźnienia. Rozwiązaniem jest modyfikacja strapów, która w ogólnym przypadku jest prosta – nadpisujemy timingi w BIOS-ie w wyższych strapach kopią z niższych, np. z 1125 MHz. Wymusza to na kontrolerze pamięci w GPU pracę ze stałymi timingami, a co za tym idzie – brak spadku wydajności przy OC i przeskakiwaniu między strapami. Skutkiem ubocznym jest też wspomniana wcześniej zmiana podatności pamięci na podkręcanie – czasem na plus, natomiast po przekroczeniu pewnej granicy OC pamięci gwałtownie spada i to jest już sygnał, że modyfikacje zaszły za daleko.

Sam strap składa się z 52 bajtów, z czego pierwsze trzy opisują zakres częstotliwości, czwarty bajt odpowiada za producenta pamięci, a pozostałe 48 zawierają zestaw opóźnień:

  • Częstotliwość jest rozwiązana tak – ponieważ strapy są w BIOS-ie umieszczone rosnąco względem zegara, to umieszczenie wartości n w strapie powoduje, że obowiązuje on dla częstotliwości mniejszych lub równych n, a większych od tej z poprzedzającego (czyli strap 1250 działa dla częstotliwości <= 1250, a większych od 1000 lub 1125, w zależności od poprzednika), sama liczba jest zapisana w kodowaniu little-endian (najmłodszy bajt na początku), tyle że pomnożona przez 100. Dla 1250 będziemy szukać w BIOS-ie ciągu znaków 48 E8 01, bo 1250 * 100 = 125000 = 1E848 szesnastkowo, a zgodnie z little-endian odwracamy kolejność bajtów i dostajemy 48 E8 01
  • W czwartym bajcie spotkać można trzy wartości – 00, 01, 02 i 03, które odpowiadają Samsung, Hynix, Elpida i Micron. Te wartości są jedynie używane do mapowania timingów – niektóre BIOS-y zawierają dwa komplety strapów, a właściwa informacja o producencie zastosowanych pamięci jest zawarta w nagłówku BIOS-u.
  • Sam strap składa się z 12 rejestrów, każdy o długości 32 bitów, również zakodowanych w postaci little-endian i opisuje w sumie zestaw około 50 timingów. Na szczęście nie musimy ruszać wszystkich :) wystarczy zmienić kilka podstawowych, żeby zauważyć różnicę. Szczegóły później, w częściach poświęconych poszczególnym kartom.

Dlatego proponowana procedura OC, która pozwoli na zaobserwowanie różnic spowodowanych naszymi zmianami, jest następująca:

  1. Testujemy stabilność na ustawieniach stockowych. Odnotowujemy zegary, temperatury i pobór mocy.
  2. Znajdujemy maksymalne stabilne OC na domyślnym napięciu przy użyciu standardowej metody (max GPU, max VRAM i obydwa).
  3. Modyfikujemy strapy w BIOS-ie.
  4. Sprawdzamy, czy poprzednio znaleziona najwyższa stabilna częstotliwość pracy pamięci jest nadal OK – jeśli tak, próbujemy kręcić wyżej; jeśli nie, zaczynamy od stockowego zegara. Zapisujemy osiągnięte wyniki.
  5. Ponawiamy modyfikację strapów z ostrzejszym – jeśli poprzedni był przypisany początkowo do 1250 MHz, bierzemy ten z 1125 albo 1000.
  6. Ponawiamy test – jeśli karta nie pracuje stabilnie, ten strap jest już za ostry (opóźnienia są zbyt małe) i trzeba wrócić do poprzedniego.
  7. Zbieramy wyniki i wybieramy najbardziej optymalne ustawienie.
  8. Na koniec w edytorze BIOS-u obniżamy napięcie rdzenia i TDP – ponownie stopniowo, testując za każdym razem stabilność.

 

Po tym nieco przydługim wprowadzeniu teoretycznym przejdźmy do zastosowania tej procedury w praktyce na kilku różnych kartach, a następnie porównamy wyniki. Z uwagi na przeprowadzoną w poprzedniej części analizę skoncentruję się na testach w najbardziej opłacalnym algorytmie – dla kart na rdzeniu Tahiti i Fury wybieram Equihash, dla 390 i Polarisów będzie to Ethash.

Obserwuj nas w Google News

Pokaż / Dodaj komentarze do: Mining kryptowalut - część 3/4 - optymalizacja

 0