Truco GPU Asahi

[Alyssa Rosenzweig] Trabajó incansablemente en la ingeniería inversa de la GPU integrada en la arquitectura M1 de Apple como parte del esfuerzo de Asahi Linux. Si no lo sabe, este es el proyecto que agrega soporte al kernel de Linux y espacio de usuario para la línea de productos Apple M1. Ha logrado grandes avances, e incluso obtuvo una visualización primitiva trabajando con su propio código fuente abierto, hace poco más de un año.

Sin embargo, tratar de madurar al conductor tuvo problemas. Para el renderizado complejo, algo en la GPU se descompone y el marco simplemente carece de partes de contenido. Algunas pruebas inteligentes han descubierto el disparador exacto: demasiados datos de vértices totales. En pocas palabras, es "el número de vértices (complejidad geométrica) multiplicado por la cantidad de datos por vértice (complejidad de 'sombreado')". Eso... casi suena como un relleno de búfer, pero en la propia GPU. Este no es un búfer con el que el conductor interactúe directamente, por lo que toda esta investigación debe hacerse a ciegas. El controlador de Apple no tiene imágenes corruptas como esa, entonces, ¿qué sucede?

[Alyssa] abandona un curso acelerado sobre el diseño de GPU, principalmente la diferencia entre las GPU de escritorio que usan memoria dedicada y las GPU portátiles con memoria unificada. El M1 cae en esa segunda categoría, usando un búfer de mosaico para mantener los resultados mientras construye un marco. Este búfer de mosaicos tiene un tamaño fijo. Es el excedente lo que hace añicos la imaginería del marco. Entonces, ¿cómo debe manejar esto el conductor? La respuesta tradicional es simplemente asignar un búfer más grande, pero no es así como funciona el M1. En cambio, cuando el búfer se llena, la GPU activa una visualización parcial que consume los datos del búfer. El problema es que la representación parcial se envía a la pantalla en lugar de mezclarse correctamente con el resto de la representación. ¿Por qué? Volvamos a capturar los comandos utilizados por el controlador de Apple.

El controlador hace algo extraño, corrige dos programas separados de carga y mantenimiento. Saber que el búfer de renderizado se mueve en medio del renderizado tiene sentido. Una función es para el renderizado parcial, la otra para el final. Ignore la configuración de uno de estos, y cuando la GPU necesita la función que falta, ignora el puntero cero y explota la imagen. Por lo tanto, deshágase de las funciones que faltan, obtenga la configuración correcta y la renderización correcta. ¡Bien! La victoria nunca sabe tan dulce como cuando se trata de perseguir a un insecto místico como este.

¿Necesita más Asahi Linux en su vida? [Hector Martin] hizo una entrevista en FLOSS Weekly la semana pasada, dándonos el resumen del proyecto.

  • CiudadZen dice:

    La explicación parece un poco deficiente.

    Parece que el M1 es una arquitectura binning (también conocida como "mosaico") primitiva con un búfer de mosaico en el chip. En el renderizado "normal", cada primitivo se procesa completamente en un solo paso, lo que significa que el renderizador debe poder acceder a cualquier parte del búfer de fotogramas en cualquier momento, y aunque esos datos se pueden almacenar en un caché, por lo general no caben. en una ficha

    La idea con la arquitectura de mosaicos es que visualice en dos pases, con el primer pase averiguando dónde irán los primitivos en la pantalla y "vinculándolos" en los búfer primitivos apropiados a medida que avanza, y en el segundo paso hace el píxel. -procesamiento para cada mosaico en la pantalla, devolviendo las primitivas del contenedor apropiado y teniendo todo el búfer de cuadro para ese mosaico almacenado en un chip. Cuando haya terminado con ese mosaico, escriba los datos finales del framebuffer en la memoria y pase al siguiente mosaico.

    Por lo tanto, tiene un compromiso: está eliminando la mayor parte del tráfico de memoria para los accesos al búfer de cuadros, pero ahora tiene tráfico de memoria adicional para el agrupamiento primitivo. Puedes ganar o perder dependiendo de quién domine la escena que estás dibujando.

    Otra cosa es lo que se menciona en el artículo: cuando tienes demasiadas primitivas, puedes quedarte sin memoria para desecharlas. Esto se debe a que normalmente se establece la cantidad máxima de memoria reservada para el agrupamiento. Cuando esto sucede, debe vaciar todos los contenedores, devolver todos los mosaicos, guardar todos los datos parciales de la tarta de frambuesa (no solo los datos finales) y luego comenzar a llenar los contenedores nuevamente. A medida que continúa visualizando los mosaicos, debe volver a leer todos los datos parciales del búfer de fotogramas del paso de clasificación anterior. Si tiene una gran cantidad de primitivas, es posible que deba hacer esto más de una vez.

    Cuando desborda los contenedores, tiene un problema de rendimiento, por lo que los desarrolladores generalmente intentarán evitar esto, asumiendo que les importa el rendimiento en la plataforma en cuestión y que es posible evitarlo.

    • Bloc de notas dice:

      Sí, la representación de mosaicos está bastante bien explicada en la publicación original por [Alyssa Rosenzweig].

  • CiudadZen dice:

    Para responder a la pregunta del bloguero sobre por qué se necesitan diferentes programas de sombreado para almacenar los resultados finales frente a los resultados parciales: los resultados finales son los bits necesarios para operaciones posteriores, mientras que los resultados parciales incluyen los bits necesarios para la operación actual. Para ser más específicos: los resultados finales pueden ser solo el color del píxel (que luego se escaneará), mientras que los resultados parciales también pueden incluir la profundidad del píxel. Si la profundidad ya no se usa después del final de esta operación, no hay razón para guardarla para los resultados finales.

  • Gregg Eshelman dice:

    Suena como una forma chapucera de hacer videos, en lugar de tener unos pocos gigabytes de RAM de video dedicada, como todas las computadoras portátiles que cuestan * así que * deberían tener.

Pedro Molina
Pedro Molina

Deja una respuesta

Tu dirección de correo electrónico no será publicada.