Dlaczego filmy są renderowane przez procesor zamiast procesora?

8

Wiem, że to może brzmieć jak głupie pytanie, ale nie mogłem znaleźć odpowiedzi za pomocą Google, więc tak ...
Wiem, że istnieją techniki takie jak OpenCL i CUDA, ale dlaczego domyślnie używany jest procesor renderować np. plik wideo z oprogramowania do edycji wideo? Wydaje mi się sprzeczne z intuicją, że procesor graficzny nie jest używany do przetwarzania grafiki. Gdy grasz w grę wideo, procesor graficzny jest również odpowiedzialny za generowanie obrazu na moim ekranie, prawda?

Znów wiem, że może ci to brzmieć głupio. Proszę, bądź delikatny ° A °

Edycja: Mówiłem konkretnie o wyjściu wideo z oprogramowania NLE, takiego jak Premiere Pro

MoritzLost
źródło
3
Większość wideo online jest skompresowana, więc prawdziwą pracą jest dekompresja pliku, co jest ogólną operacją wykonywaną przez CPU. Procesory graficzne prawdopodobnie byłyby bardzo dobre w obsłudze kompresji / dekompresji plików, gdyby biblioteki je obsługiwały, ale generalnie są one wykorzystywane do określonych wywołań do rysowania elementów na ekranie, a nie do ogólnych obliczeń. Gry korzystają z tego, że wszystkie są dynamiczne, więc naprawdę wykorzystują procesor graficzny - wideo nie jest generowane w locie - jest wstępnie zdefiniowany ten kolorowy piksel o tej współrzędnej, więc procesory graficzne nie są do tego przydatne.
ernie
Czy mówisz konkretnie o oprogramowaniu do edycji wideo renderującym plik wideo? Jeśli nie, czy możesz podać inne przykłady? Ile GPU zużywa edytor wideo podczas renderowania, zależy w ogromnym stopniu od używanego pakietu oprogramowania do renderowania. Jest to zbyt szerokie (IMO).
ᴇcʜιᴇ007
Tak, mówiłem o tym. Przepraszam, jeśli to nie było jasne.
MoritzLost
Następnie edytuj swoje pytanie, aby dotyczyło konkretnego problemu, który napotykasz, dołącz oprogramowanie, którego wypróbowałeś, jaki system operacyjny i co próbowałeś naprawić. Następnie zadaj konkretne pytanie dotyczące tego konkretnego problemu. Ponownie, jak jest, jest to po prostu zbyt szerokie, ponieważ wiele pakietów renderowania wideo może korzystać z GPU, jeśli są odpowiednio skonfigurowane. W takim razie możemy pomóc Ci dowiedzieć się, dlaczego nie masz. :)
ᴇcʜιᴇ007

Odpowiedzi:

14

Zanim HD było czymś, procesory z łatwością radziły sobie z dekodowaniem wideo. Kiedy HD stało się popularne około 8 lat temu, producenci układów GPU zaczęli wdrażać przyspieszone dekodowanie wideo w swoich układach scalonych. Możesz łatwo znaleźć karty graficzne sprzedawane jako obsługujące filmy HD i niektóre inne hasła. Obecnie każdy procesor graficzny obsługuje przyspieszone wideo, nawet zintegrowane układy graficzne, takie jak Intel HD Graphics lub ich poprzednicy, Intel GMA. Bez tego dodatku procesor miałby trudności z trawieniem wideo 1080p z akceptowalną liczbą klatek na sekundę, nie mówiąc już o zwiększonym zużyciu energii. Więc już używasz przyspieszonego wideo na co dzień.

Teraz, gdy procesory graficzne mają coraz bardziej powszechne wykorzystanie mocy obliczeniowej, są one również szeroko stosowane do przyspieszenia przetwarzania wideo. Trend ten rozpoczął się mniej więcej w tym samym czasie, gdy wprowadzono przyspieszone dekodowanie. Programy takie jak Badaboom zaczęły zyskiwać na popularności, ponieważ okazało się, że procesory graficzne są znacznie lepsze w (re) kodowaniu wideo niż procesory. Nie można tego jednak zrobić wcześniej, ponieważ procesorom graficznym brakowało ogólnych zdolności obliczeniowych.

Ale procesory graficzne mogły już skalować, obracać i przekształcać zdjęcia od średniowiecza, więc dlaczego nie byliśmy w stanie wykorzystać tych funkcji do przetwarzania wideo? Cóż, te funkcje nigdy nie zostały zaimplementowane, aby mogły być używane w taki sposób, więc z różnych powodów były nieoptymalne.

Podczas programowania gry najpierw przesyłasz wszystkie grafiki, efekty itp. Do GPU, a następnie renderujesz wielokąty i mapujesz na nich odpowiednie obiekty. Nie musisz wysyłać tekstur za każdym razem, gdy są potrzebne, możesz je załadować i użyć ponownie. Jeśli chodzi o przetwarzanie wideo, musisz stale przesyłać ramki do GPU, przetwarzać je i pobierać z powrotem, aby ponownie zakodować je na CPU (pamiętaj, mówimy o czasach przed obliczeniowych GPU). Nie tak powinny działać GPU, więc wydajność nie była świetna.

Inną sprawą jest to, że procesory graficzne nie są zorientowane na jakość, jeśli chodzi o transformację obrazu. Kiedy grasz w grę z prędkością 40+ fps, tak naprawdę nie zauważysz niewielkich fałszywych informacji o pikselach. Nawet jeśli chcesz, grafika gry nie była wystarczająco szczegółowa, aby ludzie mogli się tym przejmować. Istnieją różne sztuczki i sztuczki używane do przyspieszenia renderowania, które mogą nieznacznie wpłynąć na jakość. Filmy są również odtwarzane z dość dużą liczbą klatek na sekundę, więc skalowanie ich dynamicznie podczas odtwarzania jest dopuszczalne, ale ponowne kodowanie lub renderowanie musi dawać wyniki, które są idealnie w pikselach lub przynajmniej tak zbliżone, jak to możliwe, przy rozsądnych kosztach. Nie można tego osiągnąć bez odpowiednich funkcji zaimplementowanych bezpośrednio w GPU.

W dzisiejszych czasach używanie procesorów graficznych do przetwarzania filmów jest dość powszechne, ponieważ potrzebujemy technologii. Dlaczego nie jest to domyślny wybór, jest raczej pytaniem do wydawcy programu, a nie do nas - to ich wybór. Być może uważają, że ich klienci mają sprzętowo zorientowane na przetwarzanie filmów wideo na procesorze, więc przejście na GPU negatywnie wpłynie na wydajność, ale tak sądzę. Inną możliwością jest to, że nadal traktują renderowanie GPU jako funkcję eksperymentalną, która nie jest wystarczająco stabilna, aby ustawić ją jako domyślną. Nie chcesz tracić godzin na renderowanie wideo, aby zdać sobie sprawę, że coś jest nie tak z powodu błędu renderowania GPU. Jeśli mimo to zdecydujesz się go użyć, nie możesz winić wydawcy oprogramowania - to była twoja decyzja.

gronostaj
źródło