Para poder explicar y por tanto transmitir lo que pretendo con esta entrada voy a tener que hacer algunos viajes al pasado y hacer un poco de arqueología y es por ello que de entrada me voy a situar a una década atrás en su inicio. Cuando Toshiba, quien fue uno de los participantes en el proyecto Cell Broadband Engine creo a partir de la tecnología de este un procesador al que llamaron llamado SPURSEngine para sus televisores HDTV, para tarjetas de codificación de video profesional y que llegaron a colocar en algunos de sus ordenadores portátiles como chip de apoyo.

SPURS1

El SPURSEngine es interesante porque todo aquello que hace una década se asociaba a él es lo que ahora en funcionalidad asignamos a los procesadores para el Deep Learning, es decir, los procesadores pensados para inteligencia artificial que tanto se han prodigado ultimamente. El SPURSEngine era un CBEA al que se le habia quitado el núcleo PowerPC y se le había colocado un procesador de comandos  por el hecho que no esta pensado para funcionar como CPU sino como chip de apoyo por lo que tenía un procesador de comandos cuyos comandos eran creados por la propia CPU del sistema fuese la que fuese.

Los origenes del SPURSEngine están en un concepto de la patente del CBEA de un chip Cell de apoyo (procesador gráfico) llamado Visualizer pero Toshiba en vez de plantearse el SPURSEngine como un chip para el renderizado en 3D a tiempo real lo que hace es dejarlo con solo 4 de los 8 SPE para colocar un codificador MPEG-2, un descodificador MPEG-2, un codificador H.264 y un descodificador H.264. Y Toshiba lo presenta con 3 utilidades diferenciadas:

  • Reconocimiento de Imagen
  • Transcodificación a tiempo real (el traslado de un formato de video a otro)
  • Aumento de la resolución de salida a partir de una muestra de menos resolución, particularmente la de  poder escalar contenido a 480P (DVD) a Full HD (1080P), a esto se le llamo Super-Resolution.

Es el tercer caso el que a mi me parece el más interesante de todos a tratar de los tres y el que voy a tratar en esta entrada.

SPURS4

El tema esta en que si tu coges una imagen a una resolución X y quieres subirla a una resolución mayor te vas a encontrar con una serie de artefactos de la imagen que tiens que corregir como es obvio y es aquí donde entran los SPE.

SPURS5.PNG

La metodología como he comentado antes no era muy diferente a la utilizada hoy en día para estos procesos a través del Deep Learning, utilizado la busqueda de patrones comúnes para el auto-aprendizaje por parte del sistema. Hay que tener en cuenta que los SPE (utilizados también en el CBEA) no son núcleos especializados sino que son de proposito general y capaces de ejecutar cualquier código que se encuentre en su memoria local y que incluso soporta código escrito en lenguajes de proposito general.

figure6

Los SPE no obstante son algo más complejos que una unidad Shader por su enorme cantidad de registros e instrucciones, pensada para que programas en lenguajes como C++ se puedan ejecutar. Los SPE al contrario de las unidades shader de las GPU programables soportan operaciones de manipulacion de memoria y aritmética de punteros. Por otro lado los SPE en el CBEA pueden funcionar en dos modos distintos, en modo trabajo donde tenemos un procesador director que envía las tareas a realizar y se ejecutan cada una en un SPE en paralelo…

JobsvsStream

… O en el segundo caso utilizando un flujo de trabajo donde cada SPE se encarga de una etapa concreta de dicho flujo. En el caso concreto del SPURSEngine se utilizaba el primer caso haciendo el procesador de director de orquestra de los SPE. En el caso de un solo SPURSEngine cada uno de los 4 SPE se encargaba de 1/4 de la pantalla dejando cada sub-división de la pantalla a cads SPE para escalarla, esto significa que si un solo SPE podía hacer un escalado temporal en 12ms de 720×480 a 1920×1080 pixeles, con los 4 SPE dicho proceso se iria a los 3ms cada uno, pero el proceso total que es el de limpieza de imagen es algo más lento ya que todo el proceso en un solo SPE es de 140.1 ms, esto en los 4 SPE son unos 35ms pero hemos de tener en cuenta que en el caso que nos ocupa no hablamos de juegos sino de video donde cada fotograma no se genera dinamicamente y la tasa no fluctua siendo la tasa de 25 fps, es decir unos 40ms por lo que en menos de lo que dura un fotograma un solo SPURSEngine puede pasar de los 480P a los 1080P sin problemas y limpiar la imagen.

Por otro lado hay que tener en cuenta que los SPE del SPURSEngine no funcionaban a los 3.2 Ghz de los del CBEA sino solo a 1.5 Ghz por lo que para Toshiba hubiese sido posible subirlos de velocidad si Toshiba hubiese querido porque tecnicamente son los mismos.

SPURS2

Ahora bien, la entrada no es sobre el SPURSEngine sino sobre el concepto de los procesadores «multimedia». ¿Que es un procesador multimedia? Es un procesador del tipo SIMD donde la siglas SIMD significan una sola instrucción para muchos datos y esto es importante porque en lo que consideramos multimedia como por ejemplo la manipulación de una imagen que esta compuesta por miles y miles de pixeles lo que nos beneficia tratar grandes cantidades de pixeles siendo procesados simultaneamente. ¿Que ha ocurrido? Pues que en un principio las unidades que competían directamente con conceptos como el CBEA y el SPURSEngine eran las GPUs, que utilizan una cantidad ingente de unidades SIMD. ¿Que ocurre? Que por el mundo de los videojuegos la adopción de GPUs en PCs es mucho más alta y se llego a la conclusión que ese tipo de aplicaciones iban a aparecer de aceleración multimedia iban a aparecer en las GPUs cuando realmente no fue así.

¿Que ha ocurrido en los últimos años? Pues ha aparecido un nuevo tipo de unidad de procesamiento o mejor dicho se ha estandarizado y que tiene que ver con la «revolución» reciente que no es otra que la implantación de los Neural Processors o Tensor Processors. El concepto a la practica es siempre el mismo tener varios núcleos en matriz conectados a través de una malla de red entre ellos. ¿Que ocurre? Pues que estos procesadores están cogiendo el hueco del mercado que supuestamente habían abandonado el CBEA y derivados por rechazo del mercado y tenían que aprovechar las GPUs y lo pueden hacer porque no se están presentando las GPUs a competir en ese espacio. En realidad buena parte de las aplicaciones del SPURSEngine aparte del re-escalado han sido llevadas a este nuevo tipo de procesadores de apoyo que se están presentando en diferentes formas hoy en día, pero haciendo el trabajo de manera mucho más eficiente en todos los sentidos tanto energético como en potencia llegando a aumentar la capacidad respecto al SPURSEngine en una orden de magnitud y siendo solo un pequeño fragmento en un SoC u otro tipo de procesador.

Un ejemplo de ello lo tenemos con un co-procesador recientemente presentado por IBM, su llamado Machine Learning Accelerator.

IBM-ML-accelerator

El ML esta compuesto por dos tipos de núcleos, el PE es un núcleo pequeño que trabaja con precisión de 16 bits, mientras que el SFU lo hace con precisión de 32 bits y tiene conversión de datos de 16 a 32 bits y viceversa. La matriz es de 32 PE o SFU en horizontal y de 16 PE+1 SFU en vertical por lo que tenemos unos 512 núcleos PE en total. Teniendo en cuenta el soporte FMADD la potencia es de casi 1.5 TFLOPS a la velocidad de 1.5 Ghz. ¿Lo particular? En total mide solo unos 9mm^2 en un proceso de 14nm.

Ahora bien… Los pixeles suelen ser de 24 o 32 bits (RGB o RGBA)… ¿Como pueden unos núcleos en FP16 trabajar con ellos? Pues descomponiendo cada pixel por sus componentes de color y asignando cada canal a un PE.

index_01.png

Teniendo en cuenta que estamos tambien en la era del HDR un PE por canal de color y pixel con precisión de 16 bits no es descabellado. El resultado es que los 1.5 TFLOPS «son» como los 512 GFLOPS del SPURSEngine, cuya máxima configuración es de 4 procesadores y 192 GFLOPS y si, hubo una tarjeta con unos 4 SPURSEngine, trabajando cada uno de ellos en paralelo. La WinFast HPVC1111…

sfld1.jpg

Pues el ML de IBM tiene una potencia casi 3 veces superior en solo 9mm^2 dentro de un SoC. Claro esta que los requisitos no son los mismos pero el aumento de rendimiento en todas las métricas es espectacular.

Pero sus 1.5 TFLOPS en FP16 no son tan espectaculares cuando sabes que el Neural Engine del A12 de los nuevos iPhone de Apple es un procesador que sirve para lo mismo con una potencia de 5 TFLOPS y estamos hablando de un chip de smartphone. ¿Otro caso sorprende de procesadores de este tipo? Los Tensor Core que Nvidia añadio a partir de Volta en adelante, aunque los Tensor Core no son Tensor Processor porque comparten las caches y funcionan de forma conmutada con los núcleos CUDA.

SMVolta

La idea de compartir las caches es para reducir espacio, según Realworld Tech, el ML Accelerator de IBM acerca de su tamaño:

Los componentes más importantes son el array de PEs (3.2 mm^2, 36%), la SFU y la SRAM en vertical (0.6mm2, 7%), la SRAM en horizontal y la L2 (2.5mm2, 28%) con el resto para control, test, interfaces y espacio en blanco no utilizado.

De ahí a que Nvidia pueda meter tantos Tensor Cores y tengamos procesadores de bajo consumo como el Tegra Xavier que con 20W sean capaces de 10 TFLOPS en FP16, los Tensor Core serían solo esos 3.2mm^2 en total. Por lo que si tenéis en cuenta las cifras os podréis imaginar el salto en potencia.

Pe… pero Urian… No sabemos a  donde quieres llegar.

confused

Estamos viendo como los medios hablan ahora de Project Stream (Google) y XCloud (Microsoft) que son plataformas para el juego en la nube pero… ¿Como van a conseguir solventar las limitaciones de la redes? Pues renderizando a menos resolución y luego que el sistema cliente tenga un acelerador como los que estoy hablando en esta entrada con tal de recomponer la imagen a más resolución. Obviamente el enorme avance en este campo en los ultimos años va a ser lo que va a hacer capaz de ejecutar los juegos via streaming (nube) por el hecho que estos se podrán renderizar a una resolución menor que la de salida y la paradoja es que cuanto más pequeños son los pixeles resultados en el escalado menos nota la gente de a pie la calidad de los pixeles temporales al ir estos muy deprisa, estamos acostumbrados a ver como la gente ve películas (y se que no son juegos) con un bitrate enormemente bajo comparado con el de una película en BluRay en las plataformas via streaming, el caso es que quiero que entendáis que una de las utilidades de este tipo de procesadores es la de aumentar la resolución de salida a tiempo real y en muy poco tiempo.

Y es en este punto donde el concepto de «juego en la nube» pero necesitando una consola local aparece, es cuando lo que Paul Thurrot (uno de los insiders más importantes de Microsoft) hablo sobre Scarlett coge todo el sentido y más ahora existiendo el Project XCloud. Y si, se que por el momento los servers provisionales del XCloud se basan en el hardware de la Xbox One S y no tenemos nada de lo que estoy hablando pero para entenderlo hemos de mirar cierto mapa.

OMB-Azure-regions-1024x571 (1)

No es que Microsoft no quiera llegar a todo el mundo, es que el problema esta en la calidad de las redes y con tal de llegar a zonas donde ahora no llegan (incluso en ciertas zonas de los EEUU) lo que van a hacer es lanzar lo que podríamos llamar la Xbox One Cloud, la cual no llevara el hardware de Xbox One sino que será una pequeña caja con un SoC que tiene un Neural/Tensor Processor en su interior con la capacidad de descomprimir a tiempo real el stream de video que venga de los servidores más cercanos. La caja costará una fracción del coste de lo que cuesta una Xbox One estandar y no llevara ni Disco Duro ni unidad BluRay de serie siendo la caja realmente no más compleja que un AppleTV por ejemplo.

El modelo de negocio seria el de la televisión de pago bajo demanda, es decir, la unidad decodificadora que tendríamos en casa que sería la encargada de ir descodificando y escalando de resolución utilizando las unidades Tensor/Neural dentro del SoC. Y por cierto, si os hacéis la pregunta de que procesador llevaría no se sabe todavía cual ha sido la elección de Microsoft en este campo, pero repito que no es el hardware de la Xbox One lo que va a llevar dicho dispositivo, del cual el nombre no se sabe pero bien que podría recibir el original nombre de Xbox One Cloud. Microsoft además utilizando el mismo modelo de negocio que la televisión bajo demanda estilo Netflix acabaría añadiendo paquetes adicionales de suscripción donde los diferentes editores independientes podrían sumar «canales adicionales»  al servicio, el cual para Microsoft se va a desplegar durante todo 2019 de manera progresiva en todo el mundo pero eso es solo una parte de la historia.

El segundo paso va a ser darles la posibilidad a nivel privado a los usuarios que tengan una Xbox One S o una Xbox One X que puedan utilizarlos como servidores XCloud privados en los que el usuario se lleve el smartphone o la tablet con el mando de Xbox One y pueda jugar a sus juegos remotamente en cualquier lugar. Esa es una idea a futuro que Microsoft va a plantear al público, que esta en el mapa de ruta y que tiene a Nintendo realmente pero realmente acojonada con la propuesta de Microsoft.

En resumidas cuentas, es muy pero que muy posible que el año que viene veamos una Xbox One Cloud que llevaría en su interior un SoC con un procesador neural/tensor que facilitaría el escalado de resolución a tiempo real para facilitar la distribución de los datos en las redes convencionales. Es por ello que al principio de la entrada he hecho una explicación muy por encima de este tipo de procesadores y su utilidad tomando como referencia su antepasado más concreto que fue el fallido SPURSEngine. En todo caso la Xbox One Cloud no debe confundirse con lo que es la Xbox One Scarlett que estará pensada para la gama alta realmente mientras que la Xbox One Cloud sería la gama baja de la familia Xbox One y seria una gama baja con tal de intentar ampliar el nombre de Xbox en la parte baja del mercado y tampoco sería un sustituto de la Xbox One, sería un… ¡Juega a los juegos del Gamepass sin tener un Xbox One con nuestro sistema de suscripción!

En todo caso pese a la existencia del NPU/TPU Microsoft no quiere centrarlo en una solución de hardware concreta y son muy conscientes que por utilidad vamos a ver todo tipo de dispositivos conectados al televisor con dichas capacidades y más ahora que Google va a promocionar su versión equivalente que va a funcionar de la misma manera por lo que del mismo motivo que vamos a ver una Xbox One Cloud es posible que veamos una Project Stream Box solo que Microsoft se va a agarrar al catálogo de Xbox One como músculo pero el objetivo de ambas partes es el mismo. No se sabe si Microsoft va a incluir servicios de streaming televisivo y de música en su caja que por el momento es solo un producto a futuro en el mapa de ruta pero no hablo de un mapa de ruta lejano precisamente y es muy posible que en unos meses veamos el dispositivo.

Y con esto termino esta entrada, la cual es solo una parte de toda esta historia que implica a muchos más participantes en este guerra. Y ya sabéis, tenéis los comentarios del blog y el canal de Discord para comentar.