Obecnie rozumiem, że wszystko, co dzieje się w pliku modułu cieniującego, jest wykonywane na GPU, a wszystko, co dzieje się w moim (Java, w moim przypadku) kodzie, jest wykonywane na CPU.
Czy to dokładny opis?
Obecnie rozumiem, że wszystko, co dzieje się w pliku modułu cieniującego, jest wykonywane na GPU, a wszystko, co dzieje się w moim (Java, w moim przypadku) kodzie, jest wykonywane na CPU.
Czy to dokładny opis?
Odpowiedzi:
To jest sedno tego.
Zasadniczo platforma mogłaby robić wszystko, co tylko zechce. Można sobie wyobrazić zaawansowany system operacyjny, który dokonuje translacji skompilowanego kodu „just in time” z, powiedzmy, x86 na kod GPU. Podobnie sterowniki OpenGL mogą uruchamiać cokolwiek zechce na procesorze hosta.
Ale tak naprawdę to, co właśnie opisałeś, dzieje się.
Ogólnie tak. Java jest używana do pisania programów działających na jednostce centralnej. Języki cieniujące (cg, hlsl, i in.) Są używane do pisania programów działających na GPU.
Wyjątkiem od tej reguły byłoby użycie api innych firm, które mogą wypełnić lukę.
David Van Brink ogólnie odpowiedział na twoje pytanie.
Ale, jak sam mówi, sterownik OpenGL może uruchamiać procesor na procesorze, a dzieje się tak naprawdę często. Zwłaszcza w kontekstach kompatybilności, w których niektóre dziwne starsze funkcje nie mogą być zaimplementowane na kartach graficznych. Wymagają emulacji oprogramowania. Na przykład, słyszałem, zanim to stippling zostanie wykonany na CPU. Możesz również spodziewać się niespodzianek przy wyborze.
Te niespodzianki mogą się zdarzyć jeszcze bardziej na MacOS przy użyciu kontekstów 2.1, ponieważ Apple dość dobrze ujednoliciło widok OpenGL w całym zakresie sprzętu, a niektórym mniejszym sprzętom brakuje pewnych elementów, które należy emulować. Jest tak dalece, że faktycznie można w pełni wykonać specyfikację CAŁĄ specyfikację OpenGL 2.1 na CPU, jeśli kod tworzenia kontekstu wyraźnie określa urządzenie programowe.
I odwrotnie, kod wykonywany za pomocą bibliotek obliczeniowych takich jak vexcl lub boost compute, AMP firmy Microsoft lub ciąg nVidia, MOŻE być wykonywany na GPU lub CPU w zależności od flag konfiguracji API.
I na koniec, wewnątrz procesora masz również architekturę DSP, której część nazywamy SIMD. Kompilator ispc firmy Intel zapewnia pomoc w generowaniu kodu „zapewnianego” do działania na liniach SIMD z dużą ilością diagnostyki wydajności w czasie kompilacji, aby pomóc Ci w pełni go wykorzystać. Dodaj do tego OpenMP, a otrzymasz wielowątkową kartę SIMD, która zbliża się do koncepcji układów GPU. Jeśli masz wysokiej klasy procesor i niską kartę graficzną, może to być bardziej wydajne.
http://ispc.github.io/