Czy rdzenie CUDA są takie same jak rdzenie renderujące w GPU?

1

Po przeczytaniu rdzeni CUDA zakładam, że rdzenie CUDA są zwykłymi rdzeniami GPU. Można ich używać do wykonywania obliczeń fizycznych w celu rozładowania procesora za pomocą PhysX lub mogą być one wykorzystywane do wykonywania innych pracochłonnych obliczeń, takich jak kodowanie / renderowanie, które jest często wolniejsze na CPU. Zakłada to również, że renderowanie grafiki to nic innego jak dużo komputerów, które są poprawne według mojej wiedzy.

Kontekstem do zadawania pytań jest to, że chciałbym wiedzieć, czy można grać w gry i renderować / konwertować rzeczy w tym samym czasie, zwiększając produktywność, gdy moja maszyna jest włączona.

Czy rdzenie CUDA są rdzeniami roboczymi procesora graficznego, czy też są osobnymi rdzeniami, które można wykorzystać wyłącznie do obliczeń?

Remy Baratte
źródło
znalazłem to być użytecznym opisem tego, jak nowoczesny GPU rysuje wielokąty. Shadery (rdzenie cuda dla Nvidii) są bardzo ściśle zaangażowane w definiowanie sposobu rysowania „wieloboku” i wydaje się, że rdzenie cieniowania rozwiązują rzeczywiste trójkąty i radzą sobie z wyjściem pikseli. Jest oparty na procesorze ARM, ale zasada GPU jest taka sama.
Mokubai
@Mokubai Dzięki za linkowanie artykułu, miło jest przeczytać rysunek GPU. Rozumiem, dlaczego jest to istotne, ale to nie pomaga w przypadku konkretnych rdzeni CUDA.
Remy Baratte

Odpowiedzi:

2

Nowoczesne silniki graficzne oparte są na shaderach. Shadery to programy działające na sprzęcie graficznym w celu tworzenia geometrii (sceny), obrazów (renderowanej sceny), a następnie efektów post-pikselowych.

Z artykułu w Wikipedii na temat shaderów:

Shadery to proste programy opisujące cechy wierzchołka lub piksela. Cieniowanie wierzchołków opisuje cechy (położenie, współrzędne tekstury, kolory itp.) Wierzchołka, podczas gdy cieniowanie pikseli opisuje cechy (kolor, głębokość z i wartość alfa) piksela. Moduł cieniujący wierzchołków jest wywoływany dla każdego wierzchołka w prymitywie (prawdopodobnie po teselacji); zatem jeden wierzchołek, jeden (zaktualizowany) wierzchołek. Każdy wierzchołek jest następnie renderowany jako seria pikseli na powierzchni (bloku pamięci), która zostanie ostatecznie wysłana na ekran.

Nowoczesne karty graficzne mają od setek do tysięcy rdzeni obliczeniowych zdolnych do wykonywania tych shaderów. Kiedyś były dzielone między moduły cieniowania geometrii, wierzchołków i pikseli, ale architektura jest teraz zunifikowana, rdzeń jest zdolny do wykonywania dowolnego typu modułu cieniującego. Pozwala to na znacznie lepsze wykorzystanie zasobów, ponieważ silnik gry i / lub sterownik karty graficznej może dostosować liczbę shaderów, które mają zostać przypisane do danego zadania. Więcej rdzeni przydzielonych do cieniowania geometrii może dać więcej szczegółów w krajobrazie, więcej rdzeni przydzielonych do cieniowania pikseli może dać lepsze efekty, takie jak rozmycie ruchu lub efekty świetlne.

Zasadniczo dla każdego piksela widocznego na ekranie wiele shaderów jest uruchamianych na różnych poziomach dostępnych rdzeni obliczeniowych.

CUDA to po prostu API Nvidias, które daje programistom dostęp do rdzeni w GPU. Podczas gdy słyszałem termin „rdzeń CUDA”, w grafice rdzeń CUDA jest analogiczny do procesora strumieniowego, który jest rodzajem rdzenia przetwarzania używanego przez karty graficzne. CUDA uruchamia programy na rdzenie graficzne, programy mogą być shaderami lub mogą być zadaniami obliczeniowymi do wykonywania bardzo równoległych zadań, takich jak kodowanie wideo.

Jeśli zmniejszysz poziom szczegółowości w grze, możesz zmniejszyć obciążenie obliczeniowe karty graficznej do punktu, w którym mogą używaj go do robienia innych rzeczy, ale chyba że możesz powiedzieć tym innym, aby zwolniły, to prawdopodobnie spróbują zepsuć rdzenie procesora graficznego i uniemożliwić grę.

Mokubai
źródło
Dziękujemy za wyjaśnienie, że ujednolicone rdzenie mogą przetwarzać dowolny moduł cieniujący. „CUDA to po prostu Nvidias API, które daje programistom dostęp do rdzeni GPU”. tego właśnie szukałem. Tak długo, jak GPU nie jest nasycony, powinienem móc korzystać z jego pozostałej mocy obliczeniowej przy użyciu CUDA.
Remy Baratte
Chciałbym polecić GPU-z aby zobaczyć, co dzieje się z kartą graficzną. Jako przykład mogę zagrać w Far Cry 3 w ustawieniach „ultra” i maksymalnie zwiększyć obciążenie procesora graficznego do 98%, ale jeśli po prostu wyłączyłem wygładzanie i ograniczę przetwarzanie końcowe (przy niewielkim real utrata jakości grafiki) moje obciążenie GPU spada do 45-55%. Będziesz chciał włączyć synchronizację pionową w grach, ponieważ zapewnia „pauzę” przed wygenerowaniem następnej klatki, a tym samym wstrzymuje przetwarzanie shaderów grafiki, ponieważ vsync wyłącza ramki generowane tak szybko, jak to możliwe, co oznacza pełne obciążenie grafiki.
Mokubai
Osobiście używam Adaptive V-sync w tej chwili, chociaż w niektórych grach łzawienie jest gorsze. Mój GPU zazwyczaj siedzi na około 50-80% na maksimum w większości gier (GTX 970 MSI). Zazwyczaj dostosowuję niektóre Post-Processing i AA do zauważalnych poziomów lub według ramek / obciążenia (zwykle nieistotne). Używam MSI Afterburner do monitorowania użycia i mam miejsce do podkręcania o ~ 10% wzrostu, jeśli naprawdę potrzebuję dodatkowego soku. Po prostu nie byłem pewien, czy renderowanie lub konwertowanie elementów przy użyciu CUDA spowodowałoby ograniczenie wydajności gry, ponieważ nie jest to wyraźnie określone.
Remy Baratte