Liczenie na GPU.
Lista projektów które można liczyć na GPU:
AmicableNumbers: AMD; NVidia
Asteroids@home: NVidia (liczenie na GPU nieefektywne w porównaniu do CPU).
Collatz@home: AMD; NVidia; Intel
Einstein@home: AMD; NVidia; Intel
Enigma@home: AMD; NVidia (projekt zakończony/brak informacji)
GPUGrid: NVidia
MilkyWay@home: AMD; NVidia
MineCraft@home: AMD; NVidia; Intel
MLC@home: NVidia
MooWrapper@home: AMD; NVidia
Numberfields@home: AMD; NVidia
PrimeGrid: AMD; NVidia; Intel
SETI@home: AMD; NVidia; Intel (projekt zakończony)
SR-Base: AMD; Nvidia
WorldCommunityGrid – OpenPandemics: AMD; NVidia; Intel
Po co w ogóle liczyć na GPU? Bo jest zwyczajnie szybciej oraz ekonomiczniej. Z technicznego punktu widzenia GPU może wykonywać wiele obliczeń jednocześnie. Lecz powoduje to również kłopoty w przygotowaniu aplikacji liczącej. Z tego względu relatywnie niewiele projektów posiada aplikacje dla GPU.
Z naszego punktu widzenia rozpoczęcie liczenia na GPU jest proste. Wystarczy odpowiednia karta graficzna, sterownik w wymaganej wersji, oraz wizyta w opcjach swojego konta i zaznaczenie liczenia na GPU. I już możemy cieszyć się bardzo dużą (w porównaniu do CPU) wydajnością.
A kiedy już się nacieszymy, możemy zadać pytanie, czy można liczyć szybciej. W wielu przypadkach: tak. Większość aplikacji GPU musi część obliczeń powierzać również CPU. Ponieważ obecne GPU są nadzwyczaj szybkie, obliczenia są hamowane przez CPU.
W związku z tym trzeba wszystko tak skonfigurować, aby CPU spowalniało GPU w jak najmniejszym stopniu.
Poniżej znajdziecie kilka trików pozwalających przyśpieszyć obliczenia GPU:
1) Przydział zasobów CPU. Aplikacje GPU zawsze używają CPU, lecz domyślny przydział może być niewystarczający. Dlatego w BOINC Managerze (BM) możemy zmniejszyć ilość rdzeni wykorzystywanych na obliczenia CPU pozostawiając dość zasobów dla GPU. Uzyskuje się to poprzez edycję pola „używaj nie więcej niż XX % of CPU”. Np dla CPU czterordzeniowego wpisanie 75% spowoduje liczenie na 3 rdzeniach. Jeden będzie dostępny dla systemu oraz do wykarmienia GPU.
2) Zwiększenie ilości przeliczanych jednocześnie WU na karcie graficznej. Działa to na zasadzie 1 WU obciąża GPU w 70%? To dwa WU obciążą bardziej. Długość przeliczania WU wydłuży się, lecz będą obliczane 2 WU jednocześnie. W większości przypadków ilość przeliczonych WU w jednostce czasu wzrośnie.
Aby uzyskać ten efekt konieczne jest utworzenie pliku cc_config.xml w katalogu odpowiedniego projektu i wstawieniu tam:
<app_config>
<app>
<name>acemdlong</name>
<gpu_versions>
<gpu_usage>0.5</gpu_usage>
<cpu_usage>1.0</cpu_usage>
</gpu_versions>
</app>
<app>
<name>acemdshort</name>
<gpu_versions>
<gpu_usage>0.5</gpu_usage>
<cpu_usage>1.0</cpu_usage>
</gpu_versions>
</app>
</app_config>
Ten plik jest dla projektu GPUGrid. Parametr name mówi nam o nazwie aplikacji liczących (dla innych projektów są to oczywiście inne nazwy).
gpu_usage daje nam możliwość uruchomienia odpowiedniej ilości WU: w podanym przykładzie 0.5 daje nam liczenie 2 WU jednocześnie. 0.33 to będą 3, zaś 0.25 to 4 WU jednocześnie.
cpu_usage zaś to przydział rdzeni CPU dla każdego WU. Przykładowy 1.0 to 1 rdzeń (wątek), zaś 0.5 to by był 1 rdzeń (wątek) dla 2 WU.
3) Dla systemu Windows możemy również pobawić się parametrem Swan_sync. System Windows ma tendencję do przerzucania danych między rdzeniami CPU co powoduje wolniejsze wykonywanie kodu potrzebnego dla wykarmienia GPU. Problem ten możemy obejść ustawiając parametr Swan_sync na 1.
Aby to zrobić należy: wejść w „system”->”zaawansowane ustawienia systemu”->”zmienne środowiskowe”->kliknąć „nowy” pod zmiennymi środowiskowymi i w polu „nazwy zmiennej” wpisać swan_sync; w polu „wartości zmiennej” wpisać”1″. Ok, Ok, Ok oraz restart systemu pozwolą cieszyć się w niektórych projektach zwiększoną wydajnością.
Istnieje również metoda swan_sync dla systemu Linux. Jako, że nie mam możliwości przetestowania jej, podaję jedynie link: http://www.gpugrid.net/forum_thread.php?id=4813&nowrap=true#50824
Powyższe metody można używać jednocześnie wyciskając 99-100% obciążenia GPU.
Miłej zabawy.