martes, 28 de marzo de 2017

Cómo abrir un platano de la manera correcta

En los consejos de la pantalla de inicio de Mozilla Firefox me aparece el siguiente mensaje:

Life hack: la forma más sencilla de abrir un plátano es por el extremo que no tiene tallo. Como hacen los monos.


Busco en YouTube «abrir plátano»:




Estruja por abajo y abre 😮😮😮😮😮😮

sábado, 25 de marzo de 2017

Motocicletas y «moto-bicis» eléctricas [Actualizado 27/03/2017]

La última vez que hablé de vehículos eléctricos puse un vídeo del sistema de intercambio de baterías automatizado de Tesla Motors, un sistema que al final no pudo ser.

Hoy vengo a comentar la aparición de motocicletas eléctricas durante el último año por parte de Bultaco y Volta.
Actualización: Parece ser que la Brinco puede venir con un defecto de fábrica de manera que la rueda trasera oscila, lo cual puede provocar un desgaste prematuro. En este blog un comprador de 6 Brinco informó a su vendedor y éste se lavó las manos así como la propia Bultaco, indicando que eso era un funcionamiento normal.
Bultaco ha lanzado una moto con 4 variedades distintas según el uso principal que se le vaya a dar:
  • Brinco R
  • Brinco RE
  • Brinco C
  • Brinco S
Se diferencian en cosas como el tipo de rueda, sillín o amortiguadores.
La R es una motocicleta sin homologar, por lo que sólo sirve para uso privado, en circuitos privados. La RE, C y S homologan bajo categoría L1e, ciclomotor eléctrico. Incorporan luces de posición, luz de cruce y carretera así como un retrovisor. En Autobuild hacen una prueba de la Brinco S pensada para entornos urbanos. En el vídeo que lo acompaña se puede apreciar el silencio cuando no hay música de fondo en el vídeo. La motocicleta es muy compacta con un peso de 40 Kg aproximadamente. Se asemeja más a una bicicleta de pedaleo asistido que a un ciclomotor al uso. De lo compacta que es el probador la llevó incluso en transporte público (cercanías RENFE) como si tal cosa.
La batería es desmontable así que se puede cargar independientemente de la carrocería de la motocicleta. El motor tiene una potencia máxima de 2 Kw (3,4 CV), con un par de 60 Nm y velocidad punta de 45 Km/h aunque si se asiste pedaleando puede ir más rápido (overdrive). Incluye una batería de 1,3 KWh que le da una autonomía de entre 100 y 50 Km según el modo (Eco, Tour, Sport). Se puede conducir con permiso AM o B.
El precio es quizá un tanto elevado, entre 5150 y 5950 euros, según el modelo. En comparación con una scooter que se vender por unos 2000 euros, hay que ver si se puede rentabilizar con el ahorro en gasolina así como el hecho de poderla llevar en cualquier sitio, incluido el techo de tu coche.

Brinco S
Algunos quizá conozcan la Rapitan. Ésta es una motocicleta más grande (¿equivalente a 250 cc tal vez? y potente, también eléctrica, pero todavía está en fase de prototipo. Volta dispone de un modelo intermedio, por tamaño equivalente a 125cc:
Volta Sport
Está disponible en 4 variaciones:
  • Volta Sport
  • Volta City
  • Volta Forest
  • Volta Supermotard
Cada una de las versiones dispone de un mapa de entrega de potencia distinto.
La Volta tiene una velocidad punta de 120 Km/h, par motor de 67 Nm, potencia máxima de 25 KW (34 CV) y un peso de 135 Kg. Su autonomía es de 70 o 100 Km según escojamos batería de 3 o 4 KWh. Dicha batería no es desmontable, sin embargo la motocicleta dispone de cargador integrado permitiendo tener el vehículo cargado de 0 a 100% en 3 horas. Se puede conducir con permiso A1 o B.
Su precio está entre los 8.800 y los 10.500 euros, según versión.

Ambas motocicletas incluyen sistemas de conectividad tales como GPS, bluetooth y una aplicación móvil que permiten mantener la moto localizada o saber el estado de la batería entre otras cosas. Para ello requieren una línea de datos que la Brinco ya lleva incorporada y activarla es opcional. En el caso de la Brinco el arranque requiere de una pulsera NFC, incluida en la moto. Entre el GPS y esto, los cacos lo tienen difícil para hacerla desaparecer.

La Brinco S parece estar muy bien para ir por ciudad, ya que puedes meterla en transporte público como si de una bicicleta se tratara, al menos ahora que hay vacío legal :P Pienso que no habría que regular en contra de ello. Limitar en todo caso la masa del ciclomotor eléctrico. Claramente una Volta o similar no son aptas para llevarlas en el metro, tren o autobus. Para hacer recorridos interurbanos una Volta sería mejor opción por tener mayor capacidad de batería, permitiendo velocidades mayores.

El centro de gravedad de la Volta está muy bajo por lo que su manejabilidad debe de ser muy buena. El de la Brinco está algo más distribuido, con el motor integrado en la rueda trasera al más puro estilo bicicleta de pedaleo asistido.


El plan de ayudas del gobierno para la compra de vehículos eléctricos sólo es aplicable para aquellas motocicletas con una batería superior a 3 Kwh, así pues la Bultaco Brinco queda fuera de las ayudas. Eso significa que la Volta se puede adquirir por tan sólo 1500-2000 euros más con respecto a la Brinco si añadimos el descuento de 1500 euros por el Plan MOVEA 2017 que aún no se sabe cuando se empezará a aplicar.

La idea del gobierno era obtener 150.000 matriculaciones de vehículos eléctricos en el año 2020, pero al ritmo que van no se logrará. Mientras, las rondas y radiales continuarán atascadas con vehículos de combustión no compartidos transportando una única persona, lo cual supone una eficiencia bastante pobre:


70/1270= 6% de la masa transportada pertenece al conductor. Sabiendo que sólo un 40% de la energía de la gasolina se convierte en energía cinética, obtenemos un resultado bastante mediocre. De ese 40% un 6% se dedica al transporte de la persona. Esto nos deja con un resultado de aprovechamiento del 2,3% de la energía contenida en la gasolina para transportar a la persona. El 97,7% restante se pierde en mover el acero del coche, los sistemas eléctricos (calefacción, aire acondicionado, radio, etcétera) y calor. Eso sin añadir la contaminación atmosférica así como la contaminación acústica. Un despropósito. Si en Pekin se abusara del coche como aquí en occidente se hace, estaríamos todos muertos, ahogados o bien con asma y tos constante.
Con un motor eléctrico se alcanza el 90% de aprovechamiento de la energía proveniente del enchufe. Si a ello le añadimos una mejor relación masa transportada/masa total al usar una motocicleta eléctrica del 35% (70/200), obtenemos un uso del 31% de la energía de la batería para movernos. Con una Brinco S de 39 Kg de peso, la relación masa/masa total es del 64%, por lo que estaríamos hablando de un aprovechamiento del 57% de la energía proveniente del enchufe eléctrico.
Visto así, el Plan Movea resulta desacertado al definir un mínimo de capacidad de la batería. Se promueven vehículos más pesados, menos eficientes. La eficiencia energética debería ser el objetivo de estos planes de subvención, en vez de capacidades de batería y valores absolutos sin importar el coste del vehículo más allá de un techo superior.

Una subvención proporcional a la eficiencia energética es lo que tendría que ser. ¿60% de eficiencia? Tanto por ciento de subvención sobre el valor del vehículo. Algunos dirán, ¿y qué pasa si yo comparto coche con más personas? Pues que 5 personas * 50 Kg (5 motos) son 200 Kg, muy lejos de los 1200 de un coche. Sin embargo la masa transportada media de un vehículo es la que es, no pasa de 2 personas. Sin embargo siempre queda el consuelo de poder usar los carriles para vehículos de alta ocupación sin estar altamente ocupado. O el plus de poder transportar a más personas o llevar más equipaje. Todo eso tiene un coste.

viernes, 24 de marzo de 2017

Más novedades de AMD [Actualizado 25/03/2017]

Desde los dos últimos posts hablando de RX Vega y Ryzen 7 han aparecido filtraciones acerca de lo que va a salir durante el segundo trimestre de este año: RX Vega, Ryzen 5 y Naples.


Pila gráfica en GNU Linux (2014, Wikipedia)

Comencemos por RX Vega. AMD desarrolla drivers libres para Linux junto con el software de espacio de usuario para GNU. En los últimos días se han publicado parches en los que se incluye el código necesario para hacer funcionar las tarjetas gráficas basadas en Vega. Se ha encontrado un total de 7 identificadores lo que potencialmente se pueden convertir en 7 gráficas distintas, tanto para mercado profesional como para el del consumidor.

Una primera ola de 100 parches con más de 40.000 líneas de código añadieron soporte en el driver DRM AMDGPU de Linux para la codificación y decodificación de vídeo con VCE y UVD, respectivamente. Acceso a la aceleración 3D mediante el módulo de espacio de usuario RadeonSI Gallium3D (Mesa 3D: implementación de OpenGL y otras interfaces), parches necesarios para el sistema DC de salida a pantalla lo cual permitiría soportar en un futuro FreeSync y otros añadidos de AMD. Y no menos importante, virtualización de la GPU mediante SR-IOV. A día de hoy Linux permite pasar hardware a máquinas virtuales pero claro, no de manera dinámica (tienes que arrancar el kernel con los parámetros adecuados para que no active el hardware).

Una segunda ola de 140 parches añadieron soporte OpenGL 3.1 y los sistemas VCE y UVD en el driver RadeonSI Gallium3D.

La tercera ola de parches son para el compilador LLVM 5.0, usado para generar el código que se ejecuta dentro de las GPUs a partir de código de shaders gráficos o cualquier API/lenguaje de cómputo en GPUs.

La quinta ola de parches añaden Vega a la biblioteca libdrm encargada de mediar entre el módulo DRM AMDGPU del kernel y el software en espacio de usuario (RadeonSI Gallium3D).

La sexta ola de parches son más añadidos para la virtualización mediante SR-IOV, clock-gating del chip y soporte a múltiples niveles de tablas de páginas de memoria virtual.

Y esto no es todo porque AMD también a publicado como código libre un framework para programar con Vulkan, Anvil. Este framework tiene un gestor de memoria, gestor de objetos, rutinas para cambiar entre cálculo FP16 y FP32, conversión en tiempo de ejecución de shaders GLSL a SPIR-V e integración con sistemas de ventanas XCB (X.Org/X11) y Windows. Al ser libre, si algo no se ajusta a tus necesidades siempre puedes cambiarlo ;-)

Rasterización fuera de orden con Anvil (GPUOpen)


Como podéis ver, el soporte de una GPU no es nada trivial e incluye múltiples componentes.

En cuanto a Ryzen 5, se están pudiendo comprar los procesadores de 4 y 6 núcleos antes de su puesta a la venta oficial el 11 de abril. Son idénticos a los Ryzen 7 pero con menos núcleos (y más baratos). Los precios:



Núcleos Hilos Frecuencia base Frecuencia Boost Caché L3 TDP Precio
Ryzen 5 1600X 6 12 3,6 GHz 4 GHz 16 MB 95 249 dólares
Ryzen 5 1600 6 12 3,2 GHz 3,6 GHz 16 MB 95 219 dólares
Ryzen 5 1500X 4 8 3,5 GHz 3,7 GHz 8 MB 65 189 dólares
Ryzen 5 1400 4 8 3,2 GHz 3,4 GHz 8 MB 65 169 dólares

Como podemos ver, AMD sigue dando el doble de núcleos por el mismo precio. En cuanto a precio, el Ryzen 5 1400 está entre un Core i3 6300 y un Core i5 6400, pero ofreciendo el doble de hilos. Un Core i3 son dos núcleos con 4 hilos y el Core i5 son 4 núcleos con 4 hilos (2C/4T y 4C/4T respectivamente). El Ryzen 5 en el mismo nivel de precio ofrece 4 núcleos y 8 hilos (4C/8T). Y todo esto con una mejora del 60% o más en rendimiento con respecto a los antiguos AMD FX en el mismo rango de precios y un consumo energético mucho menor. Los AMD FX tienen un TDP de 125W mientras que el Ryzen 5 lo tiene de 65W.

Naples. Naples es la gama para servidores de AMD. Como ya anoté en una de las actualizaciones del post sobre Ryzen 7, Naples es un procesador de 32 núcleos y 64 líneas PCI Express que se puede colocar en sistemas de hasta 2 sockets, para un total de hasta 64 núcleos, 128 hilos y 128 líneas PCI Express. Cada uno de estos chips tiene un total de 512MB de caché de nivel 3, lo cual da un total de 16MB de caché L3 por núcleo contra los 2MB de caché L3 de un Ryzen 7. Además, estos procesadores tienen 8 canales de memoria, cuadruplicando el ancho de banda disponible para cualquier dato que no entre en toda esa caché de nivel 3.
«Más de todo», logrando obtener 2-2.5x más rendimiento que el procesador de Intel para dos sockets con más núcleos.

Lo que venía a comentar es que se han filtrado los chipsets para placas de dos sockets y de un socket: el X399 y el X390. Con esto AMD tendría disponible el equivalente a los procesadores de gama alta HEDT de Intel: actualmente los Core i7 6950X y 6900K así como los Xeon E5 v5 26XX.
Un diagrama de una placa base de ASUS y de los dos chipsets a continuación:

Placa base con chipset X390. Nótese el código de colores del esquema
Diagrama con chipset X390, mismo código de colores

Diagrama con chipset X399

La plataforma HEDT de AMD tendría 4 canales de memoria RAM, lo que presumiblemente nos daría procesadores con un máximo de 16 núcleos y el doble de ancho de banda a memoria con respecto a los Ryzen actuales. 48 líneas PCI Express 3.0 (8 más que los HEDT de Intel) divididas en 44 líneas para periféricos conectados directamente al procesador y 4 líneas para el puente sur que se diversifican en conectores SATA, puertos Gigabit Ethernet, etcétera.
La plataforma para servidores de dos sockets se resumiría en más de lo mismo, doblando la cantidad de canales de memoria principal (doblando de manera efectiva el ancho de banda) así como aumentando la cantidad de líneas PCI Express.

Sin duda alguna son plataformas muy interesantes que plantan cara a Intel en todos los frentes. Excelentes niveles de paralelismo, concurrencia y multiproceso, bajo consumo energético y notable rendimiento mono hilo para las aplicaciones sin optimizar que aún lo requieren.

lunes, 13 de marzo de 2017

Videojuegos para PC y Blu-Ray

Una imagen (o dos) valen más que mil palabras:







¿Alguien se acuerda de la distribución de software en discos de 3½? Argghhh. Los que venden ordenadores tampoco ayudan, ya que siguen montando unidades DVD en vez de Blu-Ray. ¡Exige tu unidad Blu-Ray!

Tardarás menos tiempo en instalar tus programas. El Blu-Ray a 16x va a 72MB/s, lo que son 700 Mbps. Un DVD a 16x va a 22MB/s, 200 Mbps. Es decir, tienes que cambiar menos discos y vas más rápido por disco. La velocidad media va en la misma proporción.

Cualquier cosa conecta a través de USB 2.0 no puede pasar de los 300 Mbps, ya sean tarjetas de memoria o pendrives

En Amazon te puedes llevar 500GB en Bluray BDXL por 50 euros. Si son BDXL M-DISC por 91 euros (1000 años de durabilidad, según técnicas de laboratorio para envejecimiento acelerado).

No está de más recordar que Facebook y otras compañías usan blu-ray para su almacenamiento frío.

Añado:
  • España es un país en el cual las conexiones a Internet no tienen límite mensual de GiB. Pero hay otros países que sí tienen límites de tráfico como aquí los tenemos en las líneas móviles.
  • Si estás en movilidad no puedes andarte descargando 50 GiB por cada juego que te quieras instalar.
  • No puedes estar perdiendo el tiempo delante de la pantalla esperando a que te pida cambiar de disco. Con un único disco lo puedes dejar instalando y hacer otras cosas.
  • Los grupos que hacen cracks distribuyen los juegos reempaquetados en Bluray. Un ejemplo son los juegos de CPY Games. Qué pasa, ¿el pirateo da mejor servicio que comprar original? Esto ya ocurre con el cine...
Así pues, yo me pregunto: ¿porqué no hacen ediciones en DVD y en Blu-Ray como ocurre con el cine? Los juegos en Xbox 360 multi disco eran un peñazo para muchos jugadores. Los de PS3 mientras tanto disfrutaban de juegos que entraban en un único disco. Microsoft añadió unidad Blu-ray en Xbox One y ahora todo entra en un único disco.

¿Porqué el PC no tiene ediciones en blu-ray? ¿porqué? :'-(

domingo, 12 de marzo de 2017

Ronda de análisis de la GeForce GTX 1080 Ti

NVIDIA presentó en la GDC la GeForce 1080 Ti, tarjeta gráfica que viene a ocupar el hueco entre la 1080 y la Titan X (Pascal). Hoy 10 de marzo se publican los análisis en varios sitios web.


Esta GeForce es una Titan X con un controlador de memoria menos, por tanto también tiene menos ROPs, un bus a memoria más estrecho y 1 GiB menos de VRAM. El coste de esta tarjeta es de 699 euros lo cual supone un descuento de 500 euros con respecto a la Titan X.
El rendimiento es el que cabría esperar, igualando o superando a la Titan X. Según NVIDIA, hasta la fecha es la «Ti» que mayor incremento de rendimiento ofrece con respecto a la versión normal.
Acompañando al lanzamiento de la 1080 Ti, la 1080 normal recibe una rebaja de 100 euros en el precio y la 1070 de 50 euros.


Con estas rebajas y datos de rendimiento en la mano, sólo queda saber lo que rendirá la gama de AMD basada en la arquitectura Vega con su Nextgen Compute Unit (NCU) y el High Bandwidth Cache Controller (HBCC).

Vega será mostrada y puesta a la venta durante el segundo trimestre de 2017. Esto significa que puede que coincida en las cercanías de la GPU Technology Conference (GTC) de 2017, que se celebra los días del 8 al 11 de mayo, ambos incluidos. En la GTC NVIDIA también aprovecha para presentar nuevas GPUs, así pues quizá anuncie Volta, aunque sería algo pronto. Otra posibilidad es lanzar una nueva Titan con el dado entero. Tanto esta 1080 Ti como la Titan X Pascal no tienen los 3840 «CUDA cores» que ofrece el GP100 empleado en la Tesla P100. Una nueva Titan con el GP100 sería fiel con el planteamiento original de las Titan. Las dos primeras Titan no tenían el cálculo de coma flotante de 64 bits recortado. Eran Quadros+Tesla de bajo coste, bajo driver GeForce, sin ECC activado.

En HardOCP hacen una comparativa de precios de tarjetas NVIDIA a lo largo de los años incluyendo las variaciones por inflación en EEUU.



No ha sido la tarjeta de gama alta más cara de NVIDIA desde luego. La 8800 Ultra se lleva la palma de la mano. Ésta pertenecía a la primera generación de GPUs CUDA, con el chip G80.

sábado, 11 de marzo de 2017

AMD RX Vega

En el GDC AMD mostró varias demos de Vega y el potencial impacto del HBCC. El HBCC se aprovecha del hecho que los videojuegos suelen reservar más memoria de la que realmente usan, así pues con el HBCC se puede cachear los datos que se vayan a usar realmente y el resto dejarlos en la memoria principal del PC, evitando transferencias inútiles a través del bus PCIe y ahorrando memoria en la tarjeta aceleradora de gráficos y cómputo.
En la demo del GDC AMD limitó a 2 GiB de VRAM una Vega con 4 GiB mientras ejecutaban el Deus Ex. Dicho juego está pensado para ejecutarse con 4 GiB a ese nivel de detalle y resolución. Con el HBCC activado el juego se mostraba totalmente suave mientras que sin el HBCC iba a trompicones. El framerate mínimo aumentó en 2x con respecto a Deus Ex corriendo con la mitad de VRAM y el HBCC desactivado.

Así es como estaba conectada antes la memoria

Nueva disposición de la jerarquía de memoria en Vega

Antes todo pasaba por el controlador de memoria, y éste iba a la memoria principal de la tarjeta gráfica. En dicha memoria principal la CPU del host (el ordenador), por orden del driver, colocaba previamente lo que hiciera falta para la ejecución de los cálculos en la GPU.
Con la nueva jerarquía, se puede ver como la caché L2 pasa a ser cliente independiente del controlador de memoria y puede acceder directamente a la RAM del sistema sin pasar por la memoria integrada en la GPU (High Bandwidth Cache, pseudónimo de la memoria HBM2 que incorpora Vega). Con el High Bandwidth Controller se puede esocger servir la L2 desde la HBCache o desde algún otro periférico del sistema host. El controlador preferiblemente buscará primero en la HBCache el dato, si no está servirá la petición desde el exterior y cacheará esa información en la HBCache.

Memoria usada por el juego versus memoria reservada


Esto tiene una serie de ventajas: un menor consumo de memoria y poder dedicar el sobrante a otras cosas como cálculos físicos. O crear escenas más complejas con más objetos y/o texturas de mayor resolución. O aplicar efectos de iluminación con mayor consumo de memoria. El driver ya no tiene que reservar X cantidad de memoria por si acaso y transferirlo todo a la GPU para su ejecución. El HBCController se encarga de manejar la VRAM de la tarjeta como si fuera una caché.

AMD no dio todos los detalles del HBCC, así que aún faltan cosas por saber.
Obviamente también hay que contar con las mejoras de la NCU que son desconocidas más allá de tener cálculo mixto (mezclar coma flotante de 8, 16 y 32 bits) y un incremento en IPC máximo de 2x.
Con el cálculo mixto se permite rebajar la precisión de las operaciones de coma flotante de manera que necesitan menos bits. Así pues, se pueden poner más instrucciones en ejecución aunque con menos precisión cada una. Esto es útil en varios ámbitos. En el caso de los gráficos, se pueden representar mallas de elementos con mucha densidad como cabello, cuyo detalle individual no importa, pero sí que importa que el conjunto dé una sensación más realista.

Demo de la GDC mostrando lo que es posible con Rapid Packet Math

Vega incorpora también Tiled Rendering como ya implementó NVIDIA en Maxwell y Pascal.


Esto permite explotar mejor la jerarquía de memoria al dividir en cuadrantes la imagen a mostrar, ya que se renderiza cuadrante a cuadrante lo que va llegando de las etapas anteriores de «geometría» y «eliminación de píxeles que no se verán en pantalla» (polígonos tapando a otros polígonos). Hay reutilización de datos en la caché. De otro modo se envía todo el fotograma memoria principal y luego se vuelve a buscar en memoria principal para hacer el render del tirón.

Otras cosas presentadas por AMD en el GDC incluyen Liquid Sky, el equivalente a GeForce Now. Esto es posible gracias al soporte de virtualización incluido en Vega, permitiendo compartir la GPU entre varias máquinas virtuales.
También se hizo público un acuerdo entre AMD y Bethesda para optimizar los próximos lanzamientos de esta compañía para Vega y Ryzen.

viernes, 10 de marzo de 2017

El Árbol

systemd-+-ModemManager-+-{gdbus}
        |              `-{gmain}
        |-NetworkManager-+-dhclient
        |                |-dnsmasq
        |                |-{gdbus}
        |                `-{gmain}
        |-Suricata-Main-+-{CS}
        |               |-{CW}
        |               |-{FM#01}
        |               |-{FR#01}
        |               |-{US}
        |               |-{W#01-eth0}
        |               |-{W#02-eth0}
        |               |-{W#03-eth0}
        |               |-{W#04-eth0}
        |               |-{W#05-eth0}
        |               |-{W#06-eth0}
        |               |-{W#07-eth0}
        |               `-{W#08-eth0}
        |-accounts-daemon-+-{gdbus}
        |                 `-{gmain}
        |-acpid
        |-agetty
        |-atd
        |-auditd---{auditd}
        |-bluetoothd
        |-bumblebeed
        |-cgmanager
        |-colord-+-{gdbus}
        |        `-{gmain}
        |-cron
        |-dbus-daemon
        |-fwupd-+-3*[{GUsbEventThread}]
        |       |-{fwupd}
        |       |-{gdbus}
        |       `-{gmain}
        |-gnome-keyring-d-+-{gdbus}
        |                 |-{gmain}
        |                 `-{timer}
        |-irqbalance
        |-lightdm-+-Xorg
        |         |-lightdm-+-upstart-+-hud-service-+-{QDBusConnection}
        |         |         |         |             |-{gdbus}
        |         |         |         |             `-{gmain}
        |         |         |         |-indicator-appli-+-{gdbus}
        |         |         |         |                 `-{gmain}
        |         |         |         |-indicator-bluet-+-{dconf worker}
        |         |         |         |                 |-{gdbus}
        |         |         |         |                 `-{gmain}
        |         |         |         |-indicator-datet-+-{dconf worker}
        |         |         |         |                 |-{gdbus}
        |         |         |         |                 |-{gmain}
        |         |         |         |                 `-3*[{indicator-datet}]
        |         |         |         |-indicator-keybo-+-{dconf worker}
        |         |         |         |                 |-{gdbus}
        |         |         |         |                 `-{gmain}
        |         |         |         |-indicator-messa-+-{dconf worker}
        |         |         |         |                 |-{gdbus}
        |         |         |         |                 `-{gmain}
        |         |         |         |-indicator-power-+-{dconf worker}
        |         |         |         |                 |-{gdbus}
        |         |         |         |                 `-{gmain}
        |         |         |         |-indicator-print-+-{dconf worker}
        |         |         |         |                 |-{gdbus}
        |         |         |         |                 `-{gmain}
        |         |         |         |-indicator-sessi-+-{dconf worker}
        |         |         |         |                 |-{gdbus}
        |         |         |         |                 `-{gmain}
        |         |         |         |-indicator-sound-+-{dconf worker}
        |         |         |         |                 |-{gdbus}
        |         |         |         |                 `-{gmain}
        |         |         |         |-liferea-+-{dconf worker}
        |         |         |         |         |-{gdbus}
        |         |         |         |         |-{gmain}
        |         |         |         |         `-13*[{liferea}]
        |         |         |         |-sh---url-dispatcher-+-{gdbus}
        |         |         |         |                     |-{gmain}
        |         |         |         |                     `-3*[{url-dispatcher}]
        |         |         |         |-2*[sleep]
        |         |         |         |-window-stack-br---{QDBusConnection}
        |         |         |         `-xbrlapi
        |         |         |-{gdbus}
        |         |         `-{gmain}
        |         |-{gdbus}
        |         `-{gmain}
        |-lvmetad
        |-master-+-pickup
        |        `-qmgr
        |-ofonod
        |-pcscd---2*[{pcscd}]
        |-polkitd-+-{gdbus}
        |         `-{gmain}
        |-rsyslogd-+-{in:imklog}
        |          |-{in:imuxsock}
        |          `-{rs:main Q:Reg}
        |-rtkit-daemon---2*[{rtkit-daemon}]
        |-smartd
        |-snapd---8*[{snapd}]
        |-systemd-+-(sd-pam)
        |         |-at-spi-bus-laun-+-dbus-daemon
        |         |                 |-{dconf worker}
        |         |                 |-{gdbus}
        |         |                 `-{gmain}
        |         |-at-spi2-registr-+-{gdbus}
        |         |                 `-{gmain}
        |         |-bamfdaemon-+-{gdbus}
        |         |            `-{gmain}
        |         |-compiz-+-{dconf worker}
        |         |        |-{gdbus}
        |         |        |-{gmain}
        |         |        `-8*[{pool}]
        |         |-2*[dbus-daemon]
        |         |-dbus-launch
        |         |-2*[dconf-service-+-{gdbus}]
        |         |                  `-{gmain}]
        |         |-dropbox-+-{QXcbEventReader}
        |         |         |-{dconf worker}
        |         |         |-52*[{dropbox}]
        |         |         |-{gdbus}
        |         |         `-{gmain}
        |         |-evolution-sourc-+-{dconf worker}
        |         |                 |-{gdbus}
        |         |                 `-{gmain}
        |         |-firefox-+-Web Content-+-{Chrome_ChildThr}
        |         |         |             |-{HTML5 Parser}
        |         |         |             |-{Hang Monitor}
        |         |         |             |-{ImageBridgeChil}
        |         |         |             |-{ImageIO}
        |         |         |             |-{ImgDecoder #1}
        |         |         |             |-{ImgDecoder #2}
        |         |         |             |-{ImgDecoder #3}
        |         |         |             |-{ImgDecoder #4}
        |         |         |             |-{ImgDecoder #5}
        |         |         |             |-{ImgDecoder #6}
        |         |         |             |-{ImgDecoder #7}
        |         |         |             |-12*[{JS Helper}]
        |         |         |             |-{JS Watchdog}
        |         |         |             |-{ProcessHangMoni}
        |         |         |             |-{Socket Thread}
        |         |         |             |-{Timer}
        |         |         |             |-{VideoChild}
        |         |         |             |-{dconf worker}
        |         |         |             |-{gdbus}
        |         |         |             `-{gmain}
        |         |         |-{Cache I/O}
        |         |         |-{Cache2 I/O}
        |         |         |-{Compositor}
        |         |         |-{DNS Res~ver #91}
        |         |         |-3*[{DOM Worker}]
        |         |         |-3*[{DataStorage}]
        |         |         |-{GMPThread}
        |         |         |-{Gecko_IOThread}
        |         |         |-{HTML5 Parser}
        |         |         |-{Hang Monitor}
        |         |         |-{IPDL Background}
        |         |         |-{ImageBridgeChil}
        |         |         |-{ImageIO}
        |         |         |-{ImgDecoder #1}
        |         |         |-{ImgDecoder #2}
        |         |         |-{ImgDecoder #3}
        |         |         |-{ImgDecoder #4}
        |         |         |-{ImgDecoder #5}
        |         |         |-{ImgDecoder #6}
        |         |         |-{ImgDecoder #7}
        |         |         |-12*[{JS Helper}]
        |         |         |-{JS Watchdog}
        |         |         |-{Link Monitor}
        |         |         |-{ProcessHangMoni}
        |         |         |-{Proxy R~olution}
        |         |         |-{Socket Thread}
        |         |         |-{SoftwareVsyncTh}
        |         |         |-{Timer}
        |         |         |-{URL Classifier}
        |         |         |-{dconf worker}
        |         |         |-9*[{firefox}]
        |         |         |-{gdbus}
        |         |         |-{gmain}
        |         |         |-{localStorage DB}
        |         |         |-{mozStorage #10}
        |         |         |-{mozStorage #1}
        |         |         |-{mozStorage #2}
        |         |         |-{mozStorage #3}
        |         |         |-{mozStorage #4}
        |         |         |-{mozStorage #5}
        |         |         |-{mozStorage #6}
        |         |         |-{mozStorage #7}
        |         |         |-{mozStorage #8}
        |         |         |-{mozStorage #9}
        |         |         `-{threaded-ml}
        |         |-gconfd-2
        |         |-gksu-+-sudo---gedit-+-{dconf worker}
        |         |      |              |-{gdbus}
        |         |      |              `-{gmain}
        |         |      |-{dconf worker}
        |         |      |-{gdbus}
        |         |      `-{gmain}
        |         |-gnome-session-b-+-deja-dup-monito-+-{dconf worker}
        |         |                 |                 |-{gdbus}
        |         |                 |                 `-{gmain}
        |         |                 |-evolution-alarm-+-{dconf worker}
        |         |                 |                 |-3*[{evolution-alarm}]
        |         |                 |                 |-{gdbus}
        |         |                 |                 `-{gmain}
        |         |                 |-gnome-software-+-{dconf worker}
        |         |                 |                |-{gdbus}
        |         |                 |                `-{gmain}
        |         |                 |-indicator-cpufr-+-{dconf worker}
        |         |                 |                 |-{gdbus}
        |         |                 |                 `-{gmain}
        |         |                 |-indicator-multi-+-{dconf worker}
        |         |                 |                 |-{gdbus}
        |         |                 |                 `-{gmain}
        |         |                 |-krb5-auth-dialo-+-{dconf worker}
        |         |                 |                 |-{gdbus}
        |         |                 |                 `-{gmain}
        |         |                 |-mail-notificati-+-{dconf worker}
        |         |                 |                 |-{gdbus}
        |         |                 |                 `-{gmain}
        |         |                 |-nautilus-+-{dconf worker}
        |         |                 |          |-{gdbus}
        |         |                 |          |-{gmain}
        |         |                 |          |-{nautilus}
        |         |                 |          `-8*[{pool}]
        |         |                 |-nm-applet-+-{dconf worker}
        |         |                 |           |-{gdbus}
        |         |                 |           `-{gmain}
        |         |                 |-polkit-gnome-au-+-{dconf worker}
        |         |                 |                 |-{gdbus}
        |         |                 |                 `-{gmain}
        |         |                 |-unity-fallback--+-{dconf worker}
        |         |                 |                 |-{gdbus}
        |         |                 |                 `-{gmain}
        |         |                 |-update-notifier-+-{dconf worker}
        |         |                 |                 |-{gdbus}
        |         |                 |                 `-{gmain}
        |         |                 |-{dconf worker}
        |         |                 |-{gdbus}
        |         |                 `-{gmain}
        |         |-gpg-agent
        |         |-gvfs-afc-volume-+-{gdbus}
        |         |                 |-{gmain}
        |         |                 `-{gvfs-afc-volume}
        |         |-gvfs-goa-volume-+-{gdbus}
        |         |                 `-{gmain}
        |         |-gvfs-gphoto2-vo-+-{gdbus}
        |         |                 `-{gmain}
        |         |-gvfs-mtp-volume-+-{gdbus}
        |         |                 `-{gmain}
        |         |-gvfs-udisks2-vo-+-{gdbus}
        |         |                 `-{gmain}
        |         |-gvfsd-+-{gdbus}
        |         |       `-{gmain}
        |         |-gvfsd-burn-+-{gdbus}
        |         |            `-{gmain}
        |         |-gvfsd-dnssd-+-{gdbus}
        |         |             `-{gmain}
        |         |-gvfsd-fuse-+-{gdbus}
        |         |            |-{gmain}
        |         |            |-{gvfs-fuse-sub}
        |         |            `-2*[{gvfsd-fuse}]
        |         |-gvfsd-http-+-{gdbus}
        |         |            `-{gmain}
        |         |-gvfsd-metadata-+-{gdbus}
        |         |                `-{gmain}
        |         |-gvfsd-network-+-{dconf worker}
        |         |               |-{gdbus}
        |         |               `-{gmain}
        |         |-gvfsd-trash-+-{gdbus}
        |         |             `-{gmain}
        |         |-ibus-daemon-+-ibus-dconf-+-{dconf worker}
        |         |             |            |-{gdbus}
        |         |             |            `-{gmain}
        |         |             |-ibus-engine-sim-+-{gdbus}
        |         |             |                 `-{gmain}
        |         |             |-ibus-ui-gtk3-+-{dconf worker}
        |         |             |              |-{gdbus}
        |         |             |              `-{gmain}
        |         |             |-{gdbus}
        |         |             `-{gmain}
        |         |-ibus-x11-+-{gdbus}
        |         |          `-{gmain}
        |         |-kdeinit5---klauncher-+-{QDBusConnection}
        |         |                      `-{QXcbEventReader}
        |         |-notify-osd-+-{dconf worker}
        |         |            |-{gdbus}
        |         |            `-{gmain}
        |         |-pulseaudio-+-{alsa-sink-ALC26}
        |         |            `-{alsa-source-ALC}
        |         |-sh---zeitgeist-daemo-+-{gdbus}
        |         |                      `-{gmain}
        |         |-terminator-+-bash---pstree
        |         |            |-gnome-pty-helpe
        |         |            |-{dconf worker}
        |         |            |-{gdbus}
        |         |            `-{gmain}
        |         |-unity-files-dae-+-{dconf worker}
        |         |                 |-{gdbus}
        |         |                 |-{gmain}
        |         |                 `-8*[{pool}]
        |         |-unity-panel-ser-+-{dconf worker}
        |         |                 |-{gdbus}
        |         |                 `-{gmain}
        |         |-unity-scope-hom-+-{dconf worker}
        |         |                 |-{gdbus}
        |         |                 `-{gmain}
        |         |-unity-scope-loa-+-{dconf worker}
        |         |                 |-{gdbus}
        |         |                 `-{gmain}
        |         |-unity-settings--+-syndaemon
        |         |                 |-{dconf worker}
        |         |                 |-{gdbus}
        |         |                 `-{gmain}
        |         |-zeitgeist-datah-+-{gdbus}
        |         |                 |-{gmain}
        |         |                 `-8*[{pool}]
        |         `-zeitgeist-fts-+-{gdbus}
        |                         `-{gmain}
        |-systemd-journal
        |-systemd-logind
        |-systemd-resolve
        |-systemd-timesyn---{sd-resolve}
        |-systemd-udevd
        |-thermald---{thermald}
        |-udisksd-+-{cleanup}
        |         |-{gdbus}
        |         |-{gmain}
        |         `-{probing-thread}
        |-unity-greeter-s-+-{gdbus}
        |                 `-{gmain}
        |-upowerd-+-{gdbus}
        |         `-{gmain}
        |-urfkilld-+-{gdbus}
        |          `-{gmain}
        |-uuidd
        |-whoopsie-+-{gdbus}
        |          `-{gmain}
        `-wpa_supplicant

martes, 7 de marzo de 2017

Amazon cierra cuentas si se realizan demasiadas devoluciones

Si realizas habitualmente pedidos a Amazon o tienes pensado en realizar pedidos a dicha tienda online, quizá esta entrada te ofrezca información de utilidad.
Amazon es una multinacional que opera en Asia, Europa, Norte América, Oceanía y Sur América (Brasil). Han alcanzado un gran volumen de ventas debido a su gran inversión en eficiencia logística. De hecho en EEUU se han montado su propia línea aérea para llevar mercancías de un sitio a otro.
En Amazon están los clientes normales y los Premium que pagan una cuota anual de 20 euros por tener la posibilidad de envíos gratis en 1 día para los productos distribuidos por Amazon (hay tiendas de terceros que venden a través de Amazon).
Además, te permiten devolver los artículos durante los 30 días siguientes a la recepción de un artículo.

Hay una gran variedad de artículos, pudiendo comprar de todo. Ropa, calzado, gafas, informática, telefonía, televisiones, videojuegos, comida, etc.
En España tienen varios centros logísticos y abrirán a finales de este año uno en El Prat de Llobregat que será junto con el situado en San Fernando de Henares los dos centros más grandes que tienen en España.

Es sin duda una gran compañía (gran en el sentido de grande, no de ética, bondad y esas cosas).

Hoy señalaré uno de los puntos oscuros que concierne al consumidor. Como he mencionado antes, Amazon permite realizar devoluciones en un plazo máximo de 30 días. Recibes tu artículo, lo abres, compruebas que está todo bien. ¿Que hay algo roto? Lo devuelves. ¿Que no satisface tus necesidades? Lo devuelves. ¿Que ya no lo quieres? Lo devuelves. A la hora de realizar una devolución hay que indicar un motivo de la misma. Según el motivo el coste varía. Desde cero euros hasta el gasto de la compañía de transporte completo.
Sin embargo, Amazon mantiene un registro de todos tus artículos y las devoluciones que has realizado. Si el número de devoluciones que has llevado a cabo es alta con respecto al número de pedidos que has hecho, un buen día te puede llegar un correo electrónico indicándote que han decidido, sin previo aviso, terminar la relación comercial contigo y que no te dejarán abrir ninguna cuenta nueva.
Esto significa que desde ese mismo instante ya no puedes acceder a tu cuenta. Esto implica que cualquier producto que tengas no puedes solicitarles a ellos ningún trámite por temas de garantía ni acceder al PDF con las facturas de tus pedidos. Si tienes artículos digitales puede que te quedes sin ellos (como te puede pasar con Steam si incumples las condiciones de uso).
Eso sí, ellos se quedan con tus comentarios/opiniones/análisis de productos que les viene bien.

El problema de todo esto es que aparentemente no informan de cuáles son los motivos de la cancelación de la cuenta. Envían un correo electrónico prototipo diciendo que tu cuenta es una anomalía con un exceso de devoluciones y la cierran. Pero no te indican qué parametros (criterios) han empleado para tomar dicha decisión. Además, los correos electrónicos que envían hablan de tu cuenta y todas las relacionadas. Es como si tuvieran en cuenta también la dirección IP usada para acceder a Amazon.

En las condiciones de servicio se reservan el derecho de cerrarte la cuenta. Pero no se hace mención a los criterios para cerrarla. También se hace mención a que ellos pueden hacer uso de tus mensajes y nombre para promociones, y que les cedes derechos no exclusivos de uso de tus mensajes.

Al publicar cualquier contenido o presentar cualquier material para su publicación, y salvo que se indique lo contrario, usted otorga: (a) a favor de Amazon el derecho no exclusivo, gratuito y susceptible de plena cesión y transmisión a favor de un tercero, a utilizar, reproducir, modificar, adaptar, publicar, traducir, crear y explotar cualesquiera obras derivadas y distribuir y exhibir su contenido en todo el mundo y a través de cualquier medio; y (b) a favor de Amazon, sus sublicenciatarios y quienes derivaran su título de Amazon, el derecho a utilizar el nombre facilitado por usted en relación con dicho contenido, si así lo decidiera. La presente disposición no supone la cesión de derecho moral alguno.
Sobre el cierre de cuentas:

Nos reservamos el derecho a denegar el acceso al servicio, a cancelar cualesquiera cuentas y a eliminar o modificar cualquier contenido en caso de que el usuario incumpliera la legislación aplicable, las presentes Condiciones de Uso o cualesquiera otros términos y condiciones o políticas aplicables.

Y nada más. A priori tienen poder absoluto sobre tu cuenta, facturas y comentarios si deciden cerrarla.

viernes, 3 de marzo de 2017

Ronda de análisis de AMD Ryzen 7 [actualizado 05/04/2017]

Desde hoy se pueden comprar los nuevos procesadores de AMD de 8 núcleos y 16 hilos. Como con cualquier nuevo dispositivo hardware, la web se llena de análisis (reviews).





Se puede decir que tienes un octacore por la mitad de precio o menos que el de Intel. El Ryzen 7 1700 vale 369 euros y puede subirse hasta 4.0 Ghz. Quizá en el futuro puedan subir más con nuevos steppings. El Core i7 6900K cuesta 1199 euros.

En los próximos meses habrá actualizaciones de BIOS y parches en aplicaciones y juegos que no funcionan de forma óptima. Las pruebas de Phoronix, cuyos benchmarks son compilados desde código fuente, muestran que  con un código que tiene más en cuenta el procesador de AMD, el rendimiento es equivalente a Intel o mejor. A veces queda por debajo del quadcore 7700K por temas de frecuencia. Excepciones son Stockfish, Himeno y FFmpeg. En hardware.fr prueban Stockfish 8 en vez de un snapshot del 5 y obtienen resultados superiores a los ocho núcleos de Intel. En cuanto a FFMpeg, con x264 (Handbrake) el 1800X supera al resto de rivales tal y como se puede ver en HardOCP. Según los resultados de Hardware.fr de x264 y x265, el AMD es capaz de igualar al Intel Core i7 6950X, de 10 núcleos y 1700 euros de coste.

En Overclockersclub nos podemos fijar en Hitman, juego el cual obtiene más FPS por mejora de frecuencia en Intel que en AMD. El incremento del 6700K (4.0 Ghz) al 7700K (4.2 GHz) es mayor que el OC del 1800X de 3.8 Ghz a 4.0 GHz. Nos permite intuir que la interconexión entre los distintos CCX va a una frecuencia independiente de la de los núcleos. En el caso de intel la interconexión de los núcleos va a 3 GHz. De ahí la gran escalabilidad en FPS al aumentar la frecuencia de la RAM. Desde AMD también se indica que configurando la RAM se obtienen grandes ganancias.
Si sólo vas a jugar a 1080p, a día de hoy y a falta de los parches correspondientes para AMD, el 7700K sigue siendo mejor opción, aunque la diferencia es insignificante. Y a poco que cambies los parámetros de la RAM dicha diferencia desaparece.

1440p. -5% de media con respecto al actual objetivo de optimización del software privativo, Intel
1080p. -12% de media con respecto al actual objetivo de optimización del software privativo, Intel


Con 8 núcleos puedes tener otras tareas (streaming de partidas en vivo, antivirus de fondo, etc.) sin afectar a la experiencia de juego (tiempo por fotograma, percentiles). La variabilidad de los FPS es menor con respecto a un quadcore. Esto significa que la experiencia de juego es más constante, con menos sobresaltos. El Ryzen ofrece un rendimiento top en juegos con un extra de multitarea y paralelismo que se corresponde con la gama HEDT de Intel.

En un futuro a medio plazo los juegos cada vez serán más paralelos. APIs como Vulkan y Direct3D 12 son cada vez más comunes. Ya veremos que consiguen Bethesda (Doom y Prey entre otros) y AMD con su acuerdo. Otros desarrolladores están en contacto con AMD para generar parches que optimicen para AMD como ya lo están para Intel. En la GDC 2017 celebrada la primera semana de marzo AMD dio una conferencia sobre cómo optimizar software para sus nuevos procesadores.

El rey del bajo consumo energético

Consumo con el Prime95, un programa que no representa una carga normal ya que estresa al máximo todos los núcleos. Se suele usar para detectar inestabilidades.



Virtualización, codificación de vídeo, revelación y edición fotográfica, renderizado, simulación o compilación de código, todo va más rápido con los Ryzen 7 de AMD. Phoronix lo atestigua y sitios que utilizan benchmarks sin recompilar obtienen también resultados equivalentes en dichas áreas.

Aparte de esta necesaria comparación con Intel, los nuevos chips de AMD son superiores a los anteriores AMD FX en todos los casos.
Sin duda alguna los nuevos AMD Ryzen son unos procesadores totalmente recomendables por encima de cualquier opción de Intel.

En lo que queda de año saldrán a la venta Ryzen 5, Ryzen 3 y las APU. Es de esperar que a partir de Ryzen 3 se use un núcleo revisado en todas las gamas. Ryzen 3 estará compuesto de un único CCX así que puede que aprovechen para revisar el RTL del núcleo.
Ahora, echemos un vistazo a resultados en juegos y luego a la arquitectura de Ryzen.


El Crysis 3 funciona mucho mejor con el procesador de AMD. Crysis debe de ser un juego que implemente bastante paralelismo y por tanto las caídas de tasa de fotogramas por segundo (reflejadas en los percentiles >= 99%) son menores cuantos más núcleos disponibles hay.
Estos resultados muestran que con el suficiente ancho de banda y una configuración adecuada, Ryzen 7 puede superar de forma absoluta en 1080p al Core i7 7700K pese a funcionar a menor frecuencia.

Si tus hilos no paran de moverse o de ser creados y destruidos sin tener en cuenta la localidad, pierdes rendimiento. Esto en aplicaciones de productividad y servidores no ocurre. En videojuegos... no han estado por la labor. Además, la alta latencia de los anillos cuando hablamos de procesadores de 4 núcleos no se deja notar.

AMD a diferencia de Intel ha optado por un diseño modular y ello le permite escalar fácilmente la cantidad de núcleos, dentro de los límites de un crossbar.

Total: se requieren nuevas UEFI/BIOS con soporte para frecuencias de RAM más elevadas (a día de hoy hay kits de 4266 Mhz DDR -2133 Mhz reales- y el día de las reviews de Ryzen las placas no daban más de 2400 Mhz -1200 Mhz reales-), parches en planificadores y optimizaciones en los juegos para mantener la localidad de los datos en los CCX de manera que se minimice la cantidad de ancho de banda empleado en la interconexión (el crossbar switch, llamado comercialmente Infinity Fabric) y cantidad de prebúsquedas a través de la interconexión. Es como tener una máquina NUMA en un sólo chip. Este tipo de diseño es el que usó Intel para sus Core 2 Quad. PS4 y Xbox One utilizan un chip co-diseñado por AMD y Sony/Microsoft que también usa dos grupos de 4 núcleos. Los desarrolladores de software deberían adoptar las mismas estrategias a la hora de crear su software.

Sabiendo de la existencia de estándares como OpenMP 4.0+, parece que este tipo de chips y los que vendrán serán grandes beneficiados de estos nuevos modelos de programación. En el estándar C++20 está previsto incluir un modelo de hilos de ejecución avanzado: fork-join basado en Intel TBB y Microsoft PPL. Son mas limitados que tareas con dependencias como en OpenMP. Quiza en un futuro se integren construcciones tipo OpenMP en el lenguaje y dejen de ser anotaciones en el código. Esto permitiría añadir dinamismo a la especificación de dependencias. Mientras, seguiremos con fork-join y otros como latches y barriers, corrutinas o los futures mejorados que permiten manualmente crear dependencias entre distintas tareas aunque sin ninguna posibilidad de planificación u otras opciones de una biblioteca de tiempo de ejecución que sí ofrece OpenMP. OpenMP está disponible en los compiladores libres GCC y LLVM. El compilador privativo ICC de Intel también lo soporta. El compilador de Microsoft sólo soporta OpenMP 2.0 (versión publicada en el año 2002), por lo que no hay soporte de tareas ni dependencias o planificación de hilos. La última versión de OpenMP es la 4.5 y está por publicarse la 5.0.

En cuanto a la arquitectura de Ryzen, en la GDC 2017 AMD realizó una charla sobre cómo optimizar el software para Ryzen. En ella mostró una siguiente diapositiva con los distintos relojes empleados:

Relojes y sus dominios en Ryzen. El crossbar usa el MemClk (fuente, GDC 2017, optimizar para Ryzen). 4 núcleos por CCX, 8MiB de caché L3 por CCX, 2 CCX, la interconexión, 2 canales de memoria y el concentrador de E/S

En la siguiente figura se puede observar una fotografía de la circuitería que hay en el dado de Ryzen 7.

Fotografía del dado del AMD Ryzen 7

En un dado de Ryzen (ver figura arriba) hay 2 Core Complexes, un conmutador crossbar, controladores de memoria, PCI Express y otros sin identificar, incluyendo lo que probablemente sean buffers entre las distintas interfaces (crossbar, memoria, I/O). Enlace a imagen de tamaño completo aquí -Imgur-). Estructura del núcleo (core) extraída de las diapositivas presentadas en el ISCC. Lo que marco como L0 correspondería con la caché de micro instrucciones (instrucciones AMD64/IA32 ya traducidas a las instrucciones RISC ejecutadas por el procesador).

Diagrama de bloques de la gama Ryzen 7. Un crossbar switch (Infinity Fabric) conecta diferentes grupos de 4 núcleos. Cada uno de estos grupos emplea un anillo para comunicarse
Sabemos que la frecuencia de la interconexión (un crossbar switch en vez de un anillo) entre los 2 CCX de los Ryzen depende de la frecuencia del bus de memoria. Así que cuanta más frecuencia tenga la RAM, más frecuencia tiene la interconexión entre CCX y más ancho de banda, en bytes por segundo, hay entre ellos. Intel en cambio utiliza un anillo y su frecuencia es independiente de la RAM. Por tanto mientras que aumentar la frecuencia de la RAM en Intel sólo significa disminuir la latencia por fallos en la caché L3, en AMD significa disminuir la latencia por fallos en L3 y la latencia, en ciclos de procesador, de comunicación entre núcleos. O aumentar el ancho de banda, en bytes por segundo, en la comunicación entre núcleos. En el caso de Intel dicha petición se sirve a través del anillo, a la frecuencia del anillo de interconexión, teniendo la L3 una rodaja por núcleo. Así se explica cómo el AMD escala más al aumentar la frecuencia de la RAM que los chips de Intel.

La interconexión de AMD tiene la escalabilidad suficiente para la cantidad de CCX empleada. Naples sólo utiliza 8. Ryzen, 2. Los crossbars tienen menor latencia y pueden ofrecer más ancho de banda. Sin embargo, son más caros. AMD además los mantiene a la misma frecuencia que la RAM, quizás para tener un coste en ciclos idéntico a la hora de acceder a RAM o a otro CCX o a un GPU integrada usando CCXs y GPUs memoria HBM2. En su día AMD indicó que su predictor neuronal les daba una gran parte de la mejora en rendimiento, así que las latencias realmente no deberían ser un problema ya que un buen predictor implica una alta eficiencia en el ancho de banda de interconexión y memoria -> mejor tasa aciertos en las prebúsquedas de datos útiles con lo que se puede compensar la mayor cantidad de ciclos de reloj de procesador necesarios. Ahora bien, si no tienes suficiente ancho de banda, por muy buen predictor que tengas no traerás a tiempo los datos de memoria o de otros CCX. Estamos hablando de que los anillos de los Core i7 funcionan a 3 Ghz mientras que el crossbar de Ryzen funciona a 1,06 - 1,2 Ghz en los análisis realizados. Es decir, por cada ciclo del crossbar de Ryzen pasan más ciclos de procesador que por cada ciclo del anillo del Core i7. A pesar de ello, Ryzen obtiene resultados equivalentes o superiores a cualquier procesador de Intel en aplicaciones multinucleo, lo que da una idea de lo bueno que debe ser el predictor.

Fotografía del dado de un Core i7 6950X. A diferencia de AMD, Intel crea unos dados monolíticos con los núcleos unidos en un anillo (Anandtech)


Fotografía del dado del Core i7 7700K. Gran parte del silicio es dedicado a la GPU
Diagrama de bloques del dado del Core i7 6700K (idéntico al 7700K, salvo por la Gen9.5 de la GPU)

Diagrama de bloques de la microarquitectura Kaby Lake, en la que el core i7 7700K se basa

El núcleo de Intel tiene más recursos: bancos de registros más grandes, estaciones de reserva más grandes, buffer de reordenado más grande y buffer de instrucciones store más grande. Un 5-10% más de todo eso. También tiene mayor ancho de banda entre las cachés L1 y L2, aunque la L1 de instrucciones es el doble de grande en el chip de AMD, así como la caché L2 (512KiB AMD vs. 256 KiB Intel).
En cuanto a entradas de instrucciones listas para enviar a ejecución, Intel tiene una ventana unificada de 97 entradas. AMD ha dispuesto ventanas distribuidas, independientes para cada unidad funcional de enteros y unificada para coma flotante. En total son 6*14 + 96 = 176 entradas.
Intel permite continuar asignando entradas a una unidad funcional si las otras unidades están en espera. En cambio el chip de AMD, aunque otras unidades no tengan instrucciones en espera, dichas entradas no pueden reasignarse a las unidades ocupadas para poder continuar recibiendo instrucciones. Deben de tener sus parámetros bien medidos para hacer esta asignación estática de entradas.
La asignación estática del tamaño de la ventana permite ahorrar energía y disminuir el tiempo de ciclo con el consiguiente problema de reasignación. Aunque por otro lado se garantiza que una unidad funcional va a tener siempre un máximo de 14 entradas libres mientras que con la asignación dinámica una unidad funcional puede llegar a acaparar todas las entradas de la ventana.


Diagrama de bloques de la microarquitectura Zen en la que Ryzen se basa. El «hash perceptron» es el predictor avanzado que ha ideado AMD


Para coma flotante la ventana es unificada y AMD maneja 128 bits por registro vectorial mientras Intel maneja 256 bits por lo que para realizar cálculos de 256 bits (Zen es compatible con AVX2) requiere dos registros.
No está claro que requiera dos entradas en la ventana (a pesar de lo que hay escrito en Wikichip que todo en la parte FP sea de 128 bits: aquí las ventanas no guardan valores, sólo etiquetas, los valores se leen o escriben del banco de registros al entrar en ejecución) ya que podría funcionar como un procesador vectorial con una longitud de vector de 2 elementos (2x128 = 256) y guardar cada mitad en un registro de 128 bits distinto (¿«In order to do AVX, the unit will split the operations accordingly»?). O puede que tenga registros de 256 bits, escribiendo primero una mitad y al siguiente ciclo la otra.
Existe una ventana secuencial («non schedulable») a la que quizá vayan, además de otras, las microoperaciones correspondientes a instrucciones AVX de 256 bits. Cada par de 128 se ejecutaría una tras otra. Así que AMD compensaría parcialmente su falta de anchura en las unidades de cálculo (mayor latencia en 256 bits) con mayor paralelismo (más instrucciones disponibles para ejecución por si una unidad anda atascada). Además, se pueden comunicar valores entre los bancos de registros de enteros y coma flotante bidireccionalmente, útil para las conversiones de entero a flotante y de flotante a entero. Los tests sintéticos como el AIDA no muestran una ventaja de 2x en coma flotante a favor de Intel. Más bien de 1.5-1.75x. En aplicaciones normales con un mix de instrucciones más homogéneo la cosa es bien diferente, como los benchmarks han demostrado.

En cuanto a memoria, AMD realiza reenvíos de las stores a las loads y eliminación de instrucciones push y pop, mitigando también el menor tamaño del buffer de stores. Linus Torvalds especulaba con dicha idea. Estos reenvíos se activan mediante el Stack Memfile Engine [Store to Load forwarding] que aparece en el diagrama, en la parte del front end. Así las loads ya no tienen porqué ocupar ninguna entrada en las ventanas. Escriben en el registro el valor pasado de antemano sin necesidad de hacer ninguna lectura en la caché de instrucciones o leer del buffer de stores.
Otras diferencias son un ancho de banda entre caché L1 y L2 de 32 Bytes/ciclo en el caso de AMD y 64 Bytes/ciclo en el caso de Intel. Además, la caché L3 de AMD es de víctimas (exclusiva, no contiene datos replicados de la L2) mientras que Intel es inclusiva, replicando datos de la L2.
La L1 de instrucciones y la L2 son el doble de grandes en AMD con respecto a Intel, disminuyendo así la cantidad de expulsiones a L3 y sucesivas búsquedas en L3, que al no tener datos replicados de la L2 minimiza el número de accesos al exterior.
En el caso de Intel al tener datos replicados en L3 la capacidad real se ve disminuida, aumentando el uso de la red de comunicación y el consumo energético.
Por otro lado, el tener datos replicados facilita la localización de datos modificados por otros núcleos ya que sólo hay que consultar la L3 mientras que en el caso de AMD hay que consultar la L3 y la L2, algo que probablemente se haga en paralelo para no aumentar la latencia. Se complica la búsqueda de datos a cambio de un menor uso de la red de comunicación. Si el dato no está ni en L2 ni L3, entonces hace falta ir a memoria. Si la petición a memoria se lanzó en paralelo a la búsqueda del resto de cachés, sólo queda esperar una respuesta. Si la prebúsqueda acertó, los datos están en el bufer de prebúsquedas (prefetch buffer): se copian esos datos a la caché y se expulsa el bloque fallido. En caso contrario, hay que esperar a la RAM. Tanto si se acierta como si no, la prebúsqueda traerá datos adicionales de memoria principal para futuros servicios.

Todas estas medidas compensan de alguna manera el menor tamaño con respecto a Intel de los mencionados elementos, dando por posible un menor consumo energético. Los análisis muestran un consumo energético en estado ocioso de hasta 35W menor a Intel. Bajo carga, 5W menos que el 6900K en el Cinebench según PCPer. Recordemos también la frecuencia del anillo de comunicación en Intel de 3 Ghz y del crossbar en AMD de 1,06 Ghz. Ambos tienen el mismo ancho (32 Bytes/ciclo).

Así pues, ¿cómo puede el núcleo de AMD alcanzar o superar al de Intel suponiendo un funcionamiento efectivo de todo lo anterior? Una interconexión con más recursos y un uso más eficiente del ancho de banda de manera que se pierden menos ciclos: jerarquía de caché diferente, usando cachés exclusivas en vez de inclusivas aumentando capacidad efectiva, búsquedas en L2, L3, memoria y prebúsquedas en paralelo. Predicción de saltos con el «hash perceptron» y un algoritmo de prebúsqueda igual de efectivo.

En cuanto a las redes de comunicación, las latencias en los chips de Intel son variables por la unión en anillo de los núcleos mientras que en el caso de AMD son constantes al utilizar un crossbar. Acceder de un CCX a otro tiene siempre el mismo coste. En el caso de Intel no es así:



Cuantos más núcleos se añaden, más «paradas de autobús» tiene el anillo. Más ciclos tarda en ir de un extremo del anillo al otro. Los anillos se manejan como si fueran bidireccionales por lo que la latencia media queda reducida (ir del núcleo 0 al 9 representa un sólo ciclo en un dado de 10 núcleos). La cosa se complica cuando aumentamos la cantidad de núcleos de tal manera que se requiera poner más de un anillo. Eso significa que para acceder a los datos de un núcleo que esté en otro anillo hay que recorrerse el propio y luego el otro hasta llegar al núcleo requerido. Esto requiere varios ciclos, hasta un máximo de 12 con una media de 6 en el caso de 24 núcleos (la bidireccionalidad permite reducir a la mitad la latencia). Los accesos a memoria deben distribuirse de manera uniforme para mejorar la latencia media. Una rodaja de L3 en la que se concentre un alto número de escrituras incrementaría la latencia media si luego el resto de núcleos deben acceder a esos datos modificados por el propietario de dicha rodaja. Con unas escrituras más repartidas la latencia media disminuye ya que la cantidad de ciclos de espera para un dato es similar en todos los núcleos de manera que no haya uno más lento ralentizando al resto.

Por otra parte, un anillo permite escalar el número de núcleos mucho más que un crossbar, que permite colocar de 16 a 32 elementos sin perjuicio para el rendimiento. No se ve limitado aunque empeore latencias. Y siempre puedes colocar más de un anillo para mejorar latencias medias. AMD trata de aumentar la escalabilidad al tener los núcleos agrupados en paquetes de cuatro. El coste en espacio de un crossbar es cuadrático, el de un anillo es linea.

La red de comunicación entre núcleos incluye la comunicación con la memoria principal y los periféricos, que están conectados también a través de la misma.

Esto explicaría los resultados de latencia obtenidos por hardware.fr, en los que el Ryzen se comporta como si tuviera 8 MiB de L3 y no 16 MiB. Cuando se encuentra con el límite de capacidad de caché de un CCX, los nuevos datos vendrán de la memoria principal en vez del otro trozo de 8 MiB de L3 o de la memoria temporal (buffer) de prebúsqueda, ya que no han sido usados en ningún momento (mono hilo, no hay comunicación entre CCX, acceso a memoria puramente secuencial). En el caso de Intel, la L3 se comparte con todos los núcleos y se puede ver como la latencia aumenta progresivamente a medida que se usa más caché. En el caso de AMD, las latencias son más altas (Intel 3 GHz vs. AMD 1 GHz) y se ve el aumento repentino en 6 y 8 MiB para terminar con la latencia media de acceso a memoria a partir de 8 MiB. Sin embargo, esto no hay que tenerlo en cuenta: es un test sintético en el que no hay cabida para predicciones de ningún tipo. Si no, no se explicaría el contínuo aumento de rendimiento del AMD a medida que se aumenta la frecuencia de la memoria mientras el procesador de Intel se queda estancado.