MCC o Matrix Computing Coprocessor, el nuevo componente de la futura CPU A13

MCC o Matrix Computing Coprocessor, el nuevo componente de la futura CPU A13

Bloomberg ha abierto la veda. Estamos a pocas semanas del rumoreado evento del (supuestamente) próximo día 10 de septiembre de presentación de la nueva generación de iPhones. Y si hacemos caso a lo que han dicho recientemente Mark Gurman y Debby Wu, también veríamos una renovación leve de los iPad Pro, un nuevo iPad de educación de 10.2” y los nuevos MacBook Pro de 16”. Si queréis saber más, tenéis aquí el artículo que cuenta todos los rumores.

Pero nosotros aquí nos vamos a centrar en algo (para mi) más importante que 3 cámaras en los iPhone o un iPad de 10’2”. Hoy hablamos de cerebros y de un nuevo coprocesador que Gurman ha adelantado que incluiría el futuro A13 que daría inteligencia a esta nueva generación de dispositivos. Un coprocesador llamado AMX, que estaría especializado en cálculo matricial de coma flotante. Un chip destinado a dar soporte a la visión computerizada y la realidad aumentada. Así vamos a contaros en qué consistirá y cuáles serán sus funciones.

Computación heterogénea

Esta es la clave de la evolución de los procesadores basados en arquitectura ARM que se fabrican hoy día. En contra de lo que podáis pensar, cuando vemos un benchmark donde el nuevo A12x de los iPad Pro consigue un rendimiento casi igual que una CPU Intel de gama alta como las que tienen los MacBook Pro de 2018, en realidad estamos contando la mitad de la historia y este valor nos está “engañando”.

De la misma forma que hoy día los gigahercios del reloj de un procesador no son indicativo de su velocidad, porque depende de la generación, componentes, transistores y demás del propio procesador, un benchmark no es capaz de captar el verdadero problema que tiene hoy día una CPU de arquitectura ARM, concebida para ahorrar energía: que su arquitectura es más lenta por definición aunque midamos resultados bajo un mismo criterio.

Comparativa de A11 y A12 con CPUs Intel Comparativa de A11 y A12 con CPUs Intel

Vamos a poner un par de ejemplos rápidos para que lo entendáis. Un procesador x86 como cualquiera de los Intel que usan los Mac, tiene miles de instrucciones. Desde las más básicas (como una suma) pasando por otras más complejas como movimientos de memoria entre componentes específicos e incluso cálculos muy específicos como la codificación de un conjunto de datos de vídeo.

Cuanto más específicas o complejas puedan ser las instrucciones de una CPU, más cosas podrá hacer de manera más óptima.

Para que os hagáis una idea: no es lo mismo una CPU (como hace muchos años) que solo podía sumar y para multiplicar tenía que hacer muchas sumas, que una que tiene una instrucción de multiplicar y en una sola instrucción realiza toda la operación.

El set de instrucciones de una arquitectura x86 de 64 bits puede contar con más de 5.000 instrucciones, y a eso hay que sumarle otras muy específicas de diferentes subconjuntos de instrucciones para multimedia, cálculo flotante, proceso de vídeo… sin embargo, ARM para permitir una arquitectura que consuma menos energía, tiene bastantes menos operaciones.

Algo que un procesador x86 hace en una sola operación, con una CPU ARM es probable que se necesiten muchas instrucciones para llegar al mismo resultado.

Además de eso, está el tamaño de las instrucciones. En x86, cada instrucción tiene un tamaño diferente, siendo las más básicas y que más se usan instrucciones que solo ocupan 8 bits, tal vez 16 bits. Sin embargo, en ARM todas las instrucciones ocupan los mismos 32 bits aunque sean cortas a nivel de númeración. Por lo tanto, mientras x86 es capaz de procesar más instrucciones por segundo porque cada una tiene un tamaño diferente (es dinámico), en ARM el número de instrucciones a procesar por segundo es constante.

Estas son solo algunas de las diferencias a notar. Por eso mismo, la salvación de la arquitectura ARM para permitir tener una eficiencia equiparable (real) a una arquitectura x86, es la computación heterogénea. La capacidad que tiene un procesador para tener diferentes componentes especializados dentro de sí. Digamos que un x86 juega a músculo con una CPU que permite miles de instrucciones de tamaño dinámico pero pensada para operaciones más genéricas. Sin embargo, ARM lo que hace es que la CPU la deja para los casos genéricos y el resto de actividades las envía a otros componentes especializados.

Lo que un x86 hace incorporando nuevos conjuntos de instrucciones a la CPU, ARM lo hace poniendo componentes separados de la CPU, embebidos en el chip principal.

Por ejemplo: si queremos codificar un vídeo en un procesador x86, tenemos un conjunto de instrucciones en el mismo que nos ayudan (la llamada tecnología Quick Sync de Intel). Pero son instrucciones dentro de la misma CPU, por lo que cargan a esta de trabajo en vez de liberarla. Sin embargo, un procesador A12 de Apple tiene un núcleo de codificación de vídeo HEVC que está fuera de la CPU y cuya tarea es codificar y decodificar vídeo con este codec. Así que si grabamos vídeo 4K en un iPhone XR (por ejemplo) la CPU no tiene que hacer nada, salvo coordinar las operaciones, mientras que el peso de la codificación recae en un componente externo. Esto, obviamente, libera la CPU para que se dedique a otras cosas, reparte el trabajo y hace más rápido al sistema en un uso real.

A12 Bionic

Ahora piensen que una CPU A12 tiene los siguientes componentes: GPU (procesador gráfico), TPU (unidad de tensores o motor neuronal), coordinador de procesos (que determina a qué tipo de núcleo o componente ha de ir cada operación que se le pide al chip), ISP (chip de procesamiento de imagen para fotografía), DSP (o procesador de señales digitales para sonido), motor de profundidad (para procesar la profundidad de los elementos en una imagen), procesador de vídeo… además que la GPU tiene 4 núcleos (7 en el caso de una A12x) y 6 núcleos de CPU (8 en el caso del A12x).

Pues bien, explicado todo esto y entendido cómo se estructura una CPU de arquitectura ARM (no solo las de Apple, obviamente) ahora podemos entender mejor el hecho que parece que Apple incorporaría un nuevo componente a la CPU A13: un coprocesador de computación matricial. ¿Y para qué servirá?

MCC, cálculo de matrices

Si os digo que este procesador estará destinado específicamente para cálculo de matrices de 4x4, eje de los gráficos 3D, lo más probable es que alguno me diga que para eso ya está la GPU y que todo el cálculo flotante de matrices 3D ya está bien cubierto.

Pero una GPU tiene un problema: solo puede destinarse a operaciones que tienen un resultado gráfico por pantalla. De hecho, para que una GPU haga cálculo computacional con otro motivo como el uso de inteligencia artificial, hay que hacer un pequeño truco: usar shaders que no tienen resultado gráfico pero que sí devuelven un resultado numérico.

Shading Models

Originalmente un shader es un programa que permite a una GPU alterar una salida específica en valores como los niveles de brillo o color de una imagen. Básicamente se usa desde para provocar brillos en superficies 3D o sombras, hasta efectos complejos en tiempo real (como filtros de vídeo). Pero en ocasiones estos shaders pueden tener salidas que no vayan a gráficos y permiten que una GPU (que tiene una mejor especialización en cálculo en coma flotante) sea capaz de hacer operaciones que a una CPU le costaría más hacer.

Así que aunque una GPU pueda hacer estos cálculos de matrices, el uso de este MCC es más bien de precálculo antes de dibujar. Un precálculo derivado de la realidad aumentada.

En gráficos 3D, usamos una matriz de 4x4 elementos para transformar del sistema de coordenadas local del objeto que manejamos a un espacio de coordenadas del mundo real que representa lo que ve la cámara. Las columnas de la matriz nos dan los coordenadas de nuestro sistema de coordenadas local en relación a las del mundo real.

Usamos 4 componentes en vez de 3 que serían el punto vertical, horizontal y profundidad para representar una coordenada en el espacio 3D (x, y, z) por cómo se representan los vectores y puntos usando coordenadas homogéneas. Un sistema de coordenadas en un espacio 3D está compuesto de 4 componentes: los 3 ejes x, y y z y el origen. Por lo tanto cada vector en un espacio 3D es una combinación lineal de 3 ejes donde las columnas x, y, z y w son una matriz. Porque cualquier punto en un espacio 3D se representa por un origen más un vector. El origen de las coordenadas del mundo real en realidad aumentada es la cámara, la cual sufre sus propias transformaciones al moverse en nuestra mano.

3D Transformations

En esencia cada objeto tiene su propio espacio de coordenadas y hemos de transformar este al espacio de coordenadas del entorno donde vamos a colocarlo. La cuarta columna en la matriz es la que representa la coordenada homogénea y nos permite multiplicar la matriz en conjunto para obtener la transformación de cada punto. En función de las filas y columnas que queramos cambiar en la matriz obtendremos traslaciones, escalado, rotación, deformación... operaciones que se aplicarán a uno o varios de los ejes x, y o z en función del cálculo.

Estos serán los cálculos que harán el nuevo chip MCC: operaciones con matrices que permitirán calcular cómo se mueve la cámara y el punto de vista, así cómo mover cada uno de los objetos 3D en la escena para que se apliquen los cambios pertinentes y permitan crear el efecto de estar ahí, sobre la realidad.

Realidad aumentada, entendiendo la escena

La base de la realidad aumentada es entender las escenas, es decir, lo que ve la cámara incluso más allá del foco o plano que vemos en un momento concreto. Calcular y hacer un mapa vectorial de todo lo que ve, completando la estancia donde estamos al mover el dispositivo. Los acelerómetros y el giroscopio digital le dicen al sistema cómo movemos la cámara y así sabe por dónde tiene que ir completando su escaneado.

People Occlusion Oclusión de personas en realidad aumentada

Por cada imagen que ve, debe calcular la profundidad y distancia a la que está cada elemento y, a partir de iOS 13, determinar qué partes han de ser dibujadas o no en base a la oclusión de personas (solo disponible en CPUs A12 en adelante). De esa forma, si tengo un jarrón virtual puesto en la mesa y pongo la mano “delante” de él, el dispositivo dejará de dibujar los píxeles donde detecta mi mano para dar la impresión que el objeto virtual está detrás de ella y lo estoy tapando.

Todo ello lo consigue con los puntos de función (o feature points). Puntos que coloca sobre aquellas superficies verticales u horizontales (que nosotros no vemos salvo que lo activemos para depuración) que detecta por cómo la luz refracta sobre los distintos elementos en la imagen y cómo la visión computerizada del dispositivo interpreta y reconoce cada objeto. Cuando sobre una superficie hay muchos puntos de función, detecta un plano (ya sea vertical u horizontal) y sobre este podremos colocar (virtualmente) objetos.

Pero cuando movemos el móvil y hay un elemento virtual en pantalla (o varios) hay un proceso muy pesado para el sistema que hasta ahora realizaba la CPU: el cálculo de la transformación de las matrices que dan coordenadas en un espacio 3D a la posición de cada elemento. Sobre una matriz de 4x4 que implica posición en el eje x, eje y, profundidad (eje z) y origen. Un cálculo que ha de realizarse 60 veces por segundo para sincronizar lo que ve la cámara con el mundo virtual que genera.

ARKit Feature Points

Por este motivo, Apple incorporará este nuevo coprocesador matemático, cuyos registros de entrada, en vez de ser datos escalares de una sola dimensión (como una CPU convencional) serán matrices de cuatro dimensiones en una forma similar a las TPU (o motores neuronales) pero con operaciones específicas para estos cálculos sobre un espacio 3D para que de forma pre-calculada ayude a dibujar con mejor precisión, calentando menos el dispositivo y consumiendo menos energía.

Sin duda un apoyo a la visión computerizada aplicada a la realidad aumentada muy valioso y un nuevo pequeño paso hacia las lentes de realidad aumentada de Apple que demuestra, una vez más, que las lentes serán pasivas en gran parte y que todo el cálculo se haría desde el dispositivo (como ya hace un Apple Watch hoy día).

Espero que hayáis entendido por qué Apple ha tomado esta decisión y cómo encaja en toda su arquitectura de CPUs. Sin duda, otro paso más hacia el futuro. En pocas semanas saldremos de dudas.

También te recomendamos

La lista de deseos de un desarrollador para la WWDC 2019

Apple lanza Swift Playgrounds 3 con tres nuevas lecciones de programación orientadas a la fotografía

Así sería la WWDC 2019 para los desarrolladores: Siri, Marzipan, mejoras en AR y más

-
La noticia MCC o Matrix Computing Coprocessor, el nuevo componente de la futura CPU A13 fue publicada originalmente en Applesfera por Julio César Fernández .




Fuente: Applesfera
Enlace: MCC o Matrix Computing Coprocessor, el nuevo componente de la futura CPU A13

Comentarios