En las últimas horas ha aparecido la siguiente imagen:

81463e01213fb80ebd847d433fd12f2eb8389478

No sabemos que operación es la de los FLOPS (no nos los dicen nunca), el benchmark es completamente desconocido y no sabemos cual es la precisión, si FP16, FP32… Se supone que es FP32 y digo se supone porque la gente no ha tenido en cuenta que pueden ser operaciones en FP16 y de ahí lo de los 512 núcleos por parte de la GPU pero… Ya de paso aprovechare para contar una cosa muy simple… Nvidia y AMD llevan años mintiendo sobre el número de núcleos de sus GPUs.

panic460

Un núcleo es una CPU completa, esto significa contando la unidad de control y las ALUs, las GPUs son un caso especial porque realmente tenemos un montón de núcleos completos pegados a un planificador que se encarga de repartir las tareas entre los diferentes núcleos.

Cuando AMD y NVidia te hablan de núcleos en el marketing no te están hablando del núcleo al completo sino de las ALUs.

Por ejemplo AMD te dice que una Compute Unit tiene 64 Stream Processors.

gcn-cu-block

En realidad hay unas 64 ALUs agrupadas en 4 grupos de 16 ALUs cada una, pero no hay 64 núcleos porque no hay 64 combinaciones de unidad de control y ALU. Es decir, no son núcleos completos:

informática terminado(1).png

Pe… pero Urian… es una GPU… funciona distinto.

Que no… ¡leñe! Hay conceptos que son universales y en el caso de las Compute Units de AMD toda la Compute Unit es realmente el núcleo, es realmente un procesador pero no son las ALUs.

Lo mismo ocurre con Nvidia, por ejemplo en el Nvidia Maxwell una unidad SMM no tiene 128 procesadores…

smm

Pero si os fijáis bien aquí el caso es distinto tenemos 4 núcleos con 32 ALUs cada uno, pero no tenemos unos 32 núcleos aunque Nvidia los llame núcleos CUDA. Ahora bien, dicho esto… ¿Que esta contando dicho benchmark? ¿El número de núcleos o el número de ALUs? Lo digo porque la CPU que sería un A57 tiene una unidad SIMD llamada Neon, las unidades SIMD realizan la misma instruccion sobre múltiples datos en paralelo y para ello utiliza múltiples ALUs.

neon_isa

Pero no cuenta los núcleos de la CPU contando las ALUs sino los núcleos completos… ¿Entonces de donde sale el 512? Fácil, las GPUs suelen tener una ROM accesible en su interior que marca sus especificaciones… ¿Y como es que dice 512? Es muy sencilla la explicación, en realidad tenemos unas 512 ALUs en FP16 que se encuentran agrupadas en grupos de 2 ALUs como una pequeña unidad SIMD de dos componentes para cuando tienen que operar en coma flotante de 32 bits.

fp16op

Pe… pero Urian, el benchmark dice 512 núcleos para la GPU y Nvidia cuando habla del X1 siempre habla de 256 núcleos… ¿Como es que no aceptas que tiene el doble de unidades?

Tienes unos 10 niños pequeños que alimentar con n comida y se te ocurre alimentar 20 (doble de núcleos) con n comida (ancho de banda)… Es decir, con un bus de 64 bits LPDDR4 colocar unos 512 núcleos CUDA es…

obelix

Lo que me hace pensar que es un fake como una catedral y quien lo ha hecho no tiene en cuanta que las GPUs son procesadores que devoran ancho de banda, pero literalmente hablando y su rendimiento por tanto depende del mismo. Duplicar los núcleos sin duplicar el ancho de banda supone que el grado de rendimiento/utilización de cada uno cae en picado y no se aprovechan al 100%, lo cual es un desaprovechamiento enorme de consumo y espacio.

Es decir, tenemos unas 512 ALUS que pueden operar en FP16 y que se pueden agrupar de dos en dos para funcionar como 256 ALUs en FP32 a las que Nvidia llama núcleos CUDA. Dicho de otra manera no hay cambios en ese aspecto respecto al X1 en ese aspectro, pero como comente ayer no no es un X1 al uso por eso hice la siguiente comparación con lo poco que sabemos de la limitada documentación del SDK.

Si miramos la tradición de Nvidia con las consolas veremos que:

  • El NV2A de Xbox se basaba en el NV20 y el NV25 (GeForce 3 y GeForce 4) pero no era ninguno de los dos chips sino una version optimizada del mismo.
  • El RSX de PS3 era una variación del G71 (GeForce7) pero no era ese chip sino una version modificada.

Y en el SDK de la Switch aparece la siguiente referencia:

nxproblems

Esto viene del SDK oficial que tiene completa autoridad sobre cualquier otra cosa, de entrada cualquier cosa que contradiga al SDK oficial debería estar puesta ya no en entredicho sino ser directamente descartada o mirarla con lupa. A mi personalmente lo que se me ocurre es que si la informacion es cierta cuente las ALUs en FP16 como unidades CUDA y como procesadores cuando no lo son. Pero es que la propia Nvidia no lo cuenta así en sus propias GPUs… ¿Que sentido tiene? Ninguno, por eso es un bulo.

Lo otro que me llama la atención son las supuestas velocidades de reloj de la GPU y la CPU, al moverse entre los modos docked y undocked lo que debería variar es el multiplicador de velocidad de la GPU pero no la velocidad base. Es decir, la división entre la velocidad de reloj de la GPU en modo docked y en modo undocked debería dar un entero.

1005/275= 3.654

Por lo tanto las especificaciones son una falsedad enorme de entrada. En el caso del X1 en la Shield TV 1er modelo la velocidad base de la GPU son los 76.8 Mhz. Dependiendo la velocidad de la GPU de la velocidad de reloj de la CPU y sin poder estar ambas al máximo, quedando la cosa de la siguiente manera:

MF Mhz Max. CPU Sistema
1 76,8 2 Ghz
2 153,6 2 Ghz
3 230,4 2 Ghz
4 307,2 2 Ghz X1 SDK
5 384 2 Ghz
6 460,8 2 Ghz
7 537,6 2 Ghz Shield TV
8 614,4 1 Ghz Shield TV
9 691,2 1 Ghz Shield TV
10 768 1 Ghz Shield TV/X1 SDK
11 844,8 1 Ghz Shield TV
12 921,6 1 Ghz Shield TV

¿Entonces es un X1 al uso? Hay una cosa que viendo el tamaño del chip descarto de entrada, que lleve memoria embebida.

wp-1487525363509.jpeg

Lo que no descarto son otras optimizaciones pero eso ya lo hablare en otra entrada, la cual va a ser muy técnica. Por el momento creo que con esto es suficiente.