¿Por qué los videos son procesados ​​por la CPU en lugar de la GPU?

8

Bueno, sé que esto puede sonar como una pregunta bastante estúpida, pero no pude encontrar una respuesta usando google, así que sí ...
Entonces, sé que hay técnicas como OpenCL y CUDA, pero ¿por qué el procesador utiliza por defecto? para procesar, por ejemplo, un archivo de video de un software de edición de video? Me parece contradictorio que la unidad de procesamiento de gráficos no se use para procesar, bueno, gráficos. Cuando juego un videojuego, la GPU también se encarga de producir la imagen en mi pantalla, ¿no?

De nuevo, sé que esto puede sonar estúpido para ti. Por favor, sé gentil ° A °

Editar: estaba hablando específicamente sobre la salida de video de un software NLE como Premiere Pro

MoritzPerdido
fuente
3
La mayoría de los videos en línea están comprimidos, por lo que el trabajo real es descomprimir el archivo, que es una operación general manejada por la CPU. Las GPU probablemente serían muy buenas para manejar la compresión / descompresión de archivos si las bibliotecas lo admitieran, pero generalmente se aprovechan para llamadas específicas para dibujar elementos en la pantalla, no para el cálculo general. Los juegos se aprovechan, ya que todos son dinámicos, por lo que realmente aprovechan la GPU (el video no se genera sobre la marcha), está predefinido este píxel de color en esta coordenada, por lo que las GPU no son útiles para eso.
ernie
¿Estás hablando específicamente sobre el software de edición de video que renderiza un archivo de video? Si no es así, ¿puede ofrecer otros ejemplos? La cantidad de GPU que utiliza un editor de video mientras se procesa depende inmensamente del paquete de software de representación que se esté utilizando. Tal como está esto es demasiado amplio (IMO).
Ƭᴇcʜιᴇ007
Sí, estaba hablando de eso. Lo siento si eso no estaba claro.
MoritzLost
Luego, edite su pregunta para tratar el problema específico que enfrenta, incluya el software que ha probado, qué sistema operativo y qué ha intentado corregir. Luego haga una pregunta específica sobre ese problema específico. Una vez más, tal como es, es demasiado amplio, ya que muchos paquetes de representación de video pueden usar la GPU, si están configurados correctamente. Entonces podremos ayudarlo a descubrir por qué el suyo no lo es. :)
Ƭᴇcʜιᴇ007

Respuestas:

14

Antes de que HD fuera una cosa, las CPU podían manejar la decodificación de video fácilmente. Cuando HD se hizo popular hace unos 8 años, los fabricantes de GPU comenzaron a implementar la decodificación de video acelerada en sus chips. Puede encontrar fácilmente tarjetas gráficas comercializadas como compatibles con videos HD y algunos otros lemas. Hoy en día, cualquier GPU admite video acelerado, incluso GPU integradas como Intel HD Graphics o sus predecesoras, Intel GMA. Sin esa adición, su CPU tendría dificultades para tratar de digerir video de 1080p con una velocidad de fotogramas aceptable, sin mencionar el mayor consumo de energía. Entonces ya estás usando videos acelerados todos los días.

Ahora, cuando las GPU tienen un poder computacional de uso cada vez más general, también se usan ampliamente para acelerar el procesamiento de video. Esta tendencia comenzó casi al mismo tiempo cuando se introdujo la decodificación acelerada. Programas como Badaboom comenzaron a ganar popularidad, ya que resultó que las GPU son mucho mejores en (re) codificar video que las CPU. Sin embargo, no se podía hacer antes, porque las GPU carecían de capacidades computacionales genéricas.

Pero las GPU ya podían escalar, rotar y transformar imágenes desde la edad media, entonces, ¿por qué no pudimos usar estas funciones para el procesamiento de video? Bueno, estas características nunca se implementaron para usarse de esa manera, por lo que no eran óptimas por varias razones.

Cuando programa un juego, primero carga todos los gráficos, efectos, etc. a la GPU y luego simplemente renderiza polígonos y asigna objetos apropiados a ellos. No tiene que enviar texturas cada vez que las necesite, puede cargarlas y reutilizarlas. Cuando se trata del procesamiento de video, debe alimentar constantemente los cuadros a la GPU, procesarlos y recuperarlos para volver a codificarlos en la CPU (recuerde, estamos hablando de tiempos de GPU pre-computacionales). Así no se suponía que las GPU funcionaran, por lo que el rendimiento no fue excelente.

Otra cosa es que las GPU no están orientadas a la calidad cuando se trata de transformaciones de imágenes. Cuando juegas un juego a más de 40 fps, realmente no notarás ligeras tergiversaciones de píxeles. Incluso si quisieras, los gráficos del juego no eran lo suficientemente detallados para que la gente se preocupara. Hay varios trucos y trucos utilizados para acelerar el renderizado que pueden afectar ligeramente la calidad. Los videos también se reproducen a una velocidad de fotogramas bastante alta, por lo que es aceptable escalarlos dinámicamente en la reproducción, pero volver a codificar o renderizar debe producir resultados que sean perfectos en píxeles o al menos lo más cerca posible a un costo razonable. No puede lograr eso sin las características adecuadas implementadas directamente en la GPU.

Hoy en día, el uso de GPU para procesar videos es bastante común porque hemos requerido tecnología en su lugar. Por qué no es la opción predeterminada es más bien una pregunta para el editor del programa, no para nosotros, es su elección. Tal vez creen que sus clientes tienen hardware orientado a procesar videos en la CPU, por lo que cambiar a GPU afectará negativamente el rendimiento, pero eso es solo mi suposición. Otra posibilidad es que todavía traten el procesamiento de GPU como una característica experimental que aún no es lo suficientemente estable como para establecerlo como predeterminado. No quieres perder horas renderizando tu video solo para darte cuenta de que algo está mal debido al error de renderizado de la GPU. Si decide usarlo de todos modos, no puede culpar al editor de software: fue su decisión.

gronostaj
fuente