Por que os vídeos são renderizados pela CPU em vez da GPU?


8

Bem, eu sei que isso pode parecer uma pergunta muito estúpida, mas não consegui encontrar uma resposta usando o google, então sim ...
Então, eu sei que existem técnicas como OpenCL e CUDA, mas por que, por padrão, é o processador usado renderizar, por exemplo, um arquivo de vídeo de um software de edição de vídeo? Parece contra-intuitivo para mim que a unidade de processamento de gráficos não seja usada para processar, bem, gráficos. Ao jogar um videogame, a GPU também é responsável por produzir a imagem na minha tela, não é?

Novamente, eu sei que isso pode parecer estúpido para você. Por favor, seja gentil ° A °

Edit: Eu estava falando especificamente sobre a saída de vídeo de um software NLE como o Premiere Pro


3
A maioria dos vídeos on-line é compactada; portanto, o trabalho real é descompactar o arquivo, que é uma operação geral gerenciada pela CPU. As GPUs provavelmente seriam muito boas em lidar com a compactação / descompactação de arquivos se as bibliotecas o suportassem, mas geralmente elas são aproveitadas para chamadas específicas para desenhar itens na tela, não para computação geral. Os jogos tiram vantagem porque são dinâmicos, então eles realmente aproveitam a GPU - o vídeo não é gerado rapidamente - é predefinido esse pixel colorido nessa coordenada, para que as GPUs não sejam úteis para isso.
Ernie 30/07

Você está falando especificamente sobre um software de edição de vídeo processando um arquivo de vídeo? Caso contrário, você pode oferecer outros exemplos? A quantidade de GPU que um editor de vídeo usa durante a renderização depende imensamente do pacote de software de renderização que está sendo usado. Como está, isso é muito amplo (IMO).
Ƭᴇcʜιᴇ007

Sim, eu estava falando sobre isso. Desculpe se isso não estava claro.
MoritzLost

Em seguida, edite sua pergunta para abordar o problema específico que você está enfrentando, inclua o software que você tentou, qual SO e o que tentou corrigi-lo. Em seguida, faça uma pergunta específica sobre esse problema específico. Novamente, como está, isso é muito amplo, pois muitos pacotes de renderização de vídeo podem usar a GPU, se estiverem configurados corretamente. Talvez possamos ajudá-lo a descobrir por que o seu não é. :)
Ƭᴇcʜιᴇ007

Respostas:


14

Antes que o HD existisse, as CPUs podiam lidar com decodificação de vídeo facilmente. Quando o HD se tornou popular há cerca de 8 anos, os fabricantes de GPU começaram a implementar a decodificação acelerada de vídeo em seus chips. Você pode encontrar facilmente placas gráficas comercializadas como suportando vídeos em HD e outros slogans. Hoje, qualquer GPU suporta vídeo acelerado, até GPUs integradas, como Intel HD Graphics ou seus antecessores, Intel GMA. Sem essa adição, sua CPU teria dificuldade em digerir vídeo 1080p com taxa de quadros aceitável, sem mencionar o aumento do consumo de energia. Então você já está usando vídeo acelerado todos os dias.

Agora, quando as GPUs têm um poder computacional de uso cada vez mais geral, elas também são amplamente usadas para acelerar o processamento de vídeo. Essa tendência começou na mesma época em que a decodificação acelerada foi introduzida. Programas como o Badaboom começaram a ganhar popularidade, pois as GPUs são muito melhores em (re) codificar vídeo do que as CPUs. Porém, isso não podia ser feito antes, porque as GPUs careciam de habilidades computacionais genéricas.

Mas as GPUs já podiam escalar, girar e transformar imagens desde a idade média, então por que não conseguimos usar esses recursos para o processamento de vídeo? Bem, esses recursos nunca foram implementados para serem usados ​​dessa maneira; portanto, foram abaixo do ideal por vários motivos.

Ao programar um jogo, você primeiro carrega todos os gráficos, efeitos etc. na GPU e, em seguida, apenas renderiza polígonos e mapeia objetos apropriados para eles. Você não precisa enviar texturas sempre que necessário, pode carregá-las e reutilizá-las. Quando se trata de processamento de vídeo, é necessário alimentar constantemente os quadros na GPU, processá-los e buscá-los de volta para recodificá-los na CPU (lembre-se, estamos falando de tempos pré-computacionais da GPU). Não era assim que as GPUs deveriam funcionar, então o desempenho não era ótimo.

Outra coisa é que as GPUs não são orientadas para a qualidade quando se trata de transformações de imagem. Quando você está jogando um jogo a mais de 40 qps, não notará realmente pequenas deturpações de pixel. Mesmo que você queira, os gráficos do jogo não foram detalhados o suficiente para as pessoas se importarem. Existem vários truques e truques usados ​​para acelerar a renderização que podem afetar um pouco a qualidade. Os vídeos também são reproduzidos em taxas de quadros bastante altas, portanto é aceitável dimensioná-los dinamicamente na reprodução, mas a reencodificação ou renderização deve produzir resultados perfeitos em pixels ou pelo menos o mais próximo possível a um custo razoável. Você não pode conseguir isso sem os recursos adequados implementados diretamente na GPU.

Atualmente, o uso de GPUs para processar vídeos é bastante comum, porque exigimos tecnologia. Por que não é a opção padrão, é uma questão para o editor do programa, não para nós - é a escolha deles. Talvez eles acreditem que seus clientes tenham hardware orientado para processar vídeos na CPU, portanto, mudar para GPU afetará negativamente o desempenho, mas esse é apenas o meu palpite. Outra possibilidade é que eles ainda tratem a renderização da GPU como recurso experimental que não é estável o suficiente para defini-la como padrão ainda. Você não quer perder horas renderizando seu vídeo apenas para perceber que algo está errado devido ao erro de renderização da GPU. Se você decidir usá-lo de qualquer maneira, não poderá culpar o editor do software - a decisão foi sua.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.