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

GPUGrid: NVidia

MilkyWay@home: AMD; NVidia

MooWrapper@home: AMD: NVidia

Numberfields@home: NVidia (aplikacja w fazie beta)

PrimeGrid: AMD; NVidia

SETI@home: AMD; NVidia; Intel

Xansons4COD@home: AMD; NVidia (próbki dostępne sporadycznie)

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.