Czy mam obliczać matryce na GPU czy na CPU?

Czy wole obliczac matryce na CPU czy GPU?

Załóżmy, że mam następujące macierze P * V * M, Czy powinienem obliczyć je na procesorze, aby móc wysłać ostateczną matrycę do GPU (GLSL), czy powinienem wysłać te trzy macierze osobno do GPU, aby GLSL mógł obliczyć ostateczną matrycę?

Chodzi mi o to, że w tym przypadku GLSL musiałby obliczyć macierz MVP dla każdego wierzchołka, więc prawdopodobnie szybciej będzie ją wstępnie obliczyć na CPU.

Ale powiedzmy, że GLSL musi tylko raz obliczyć matrycę, czy GPU obliczy ostateczną matrycę szybciej niż procesor?

Author: Maik Klein, 2013-05-18

2 answers

Ogólna zasada: jeśli można przekazać go shaderowi w formie , Zawsze wstępnie Oblicz na procesorze; bez wyjątków. Obliczenia po stronie shadera mają sens tylko dla wartości, które różnią się między wierzchołkami i fragmentami. Wszystko, co jest stałe wśród całej partii wierzchołków, jest najefektywniej obsługiwane przez procesor.

GPU nie są magiczne "może zrobić szybciej wszystko" maszyny. Istnieją pewne zadania, w których procesor może łatwo przewyższyć GPU, nawet dla bardzo dużych zbiory danych. Tak więc bardzo prosta wskazówka brzmi: Jeśli możesz przenieść go na procesor bez poświęcania więcej czasu procesorowi Na wykonanie obliczeń, niż zajmuje to procesor graficzny w całkowitym napowietrzeniu, to zrób to na procesorze. Obliczanie pojedynczej macierzy jest jednym z tych zadań.

 56
Author: datenwolf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-18 08:24:06

Jak większość sytuacji z OpenGL, to zależy.

W większości przypadków pojedyncze obliczenia można wykonać szybciej na CPU niż na GPU. Zaletą GPU jest to, że może wykonywać wiele obliczeń równolegle.

Z drugiej strony, zależy również, gdzie są Twoje wąskie gardła. Jeśli procesor wykonuje wiele innych zadań, ale shadery nie są jeszcze wąskim gardłem w systemie docelowym o najniższej mocy, możesz łatwo zauważyć poprawę wydajności, przesuwając matrycę mnożenie do wierzchołka shadera.

Ogólnie rzecz biorąc, należy unikać wszelkich prac w cieniowaniu fragmentów, które można wykonać również w cieniowaniu wierzchołków lub na CPU, ale poza tym zależy to od sytuacji. Jeśli nie masz problemów z wydajnością, po prostu zrób to w dowolny sposób, który jest dla Ciebie najłatwiejszy, a jeśli masz problemy z wydajnością, zrób to w obie strony i profiluj wydajność, aby zobaczyć, która działa lepiej.

 13
Author: bcrist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-18 07:04:32