Integrated GPU and memory throughput

I have recently spent a lot of time trying to understand why the computations of my (audio) app on Windows were slowing down when I moved windows on my screen , or when I switched between workspaces. I though the CPU might just get hot and throttle, but it did not. I thought the audio thread was preempted by another thread, but it did not. I though it was interrupted by a bad graphics card driver (or wifi driver, which is very often the culprit for causing glitches in real-time audio applications), but LatencyMon told me everything was fine.

And it turns out it is just the integrated GPU of my core i7 7700 which is hogging the RAM (the integrated GPU does not have its own RAM, it is shared with the CPU). Since this is on a shitty Lenovo desktop with a single RAM stick, it does not have much bandwidth to share. What makes it even worse is that I have a 4k screen plugged into the integrated GPU, so the GPU has to move a lot of pixels.

A good way to check that is to open a simple webgl demo in the browser, preferably one that does not use much CPU, but uses a lot the GPU (the Windows task manager shows graphics for both). And then run the sisoft sandra memory benchmark with this window visible, and then with the window minimized. In the latter case, I get 11GB/s of memory bandwidth, with a latency of 24ns. But when the opengl window is visible, the bandwidth drops to "5.9G/s" and latency drops to 219ns !!

The bandwidth is divided by 2 and the latency is multiplied by 10 when the GPU is in use. That's really bad, especially if you are running a real-time audio application that needs a stable performance. Ensuring that the CPU is not throttling , and that no other application is consuming too much CPU is not enough, one has also to make sure that the integrated GPU is not killing the performance of the RAM.

I have just ordered two new sticks of RAM (in order to double the bandwidth), and a pci-express graphics card, so hopefully with these two I should be able to get stable performance even when I switch between virtual desktops...

Update: I was right, everything is solved with dual channel memory and an pci-express video card.. The spikes in the cpu load when moving windows or switching workspaces have completely disappeared.

Le macbook pro 2016 avec sa touchbar magique et révolutionnaire

pas content J'ai un macbook pro 2016 depuis un bon gros mois et ça y est j'en ai marre faut que ça sorte. Ce matin il a refusé de sortir de veille, et ce soir cette bourrique qui renacle a obstinément refusé de se mettre veille. D'ailleurs la sortie de veille est un problème récurrent sur ce mac, il semblerait que l'adapteur pour écran externe hdmi soit dans le coup. Des fois en sortant de veille , ou en s'éteignant, je vois apparaitre des rectangles rouges sur l'écran du mac, en général c'est quand il renacle. C'est le genre de truc sur un vieux laptop dell sous windows on se dit "pff les drivers MACHIN c'est vraiment de la merde" ou "purée windows c'est vraiment de la merde en branche", mais là comme c'est un laptop apple "que c'est les meilleurs parce qu'ils controlent le matos et le soft et c'est pour ça que l'experience utilisateur est tellement léchée et polie" ben ça pique un peu. On pourrait aussi parler de l'adapteur pour écran externe, vendu par apple, pour la modique somme de 59euros et qui semble être impliqué dans pas mal de problèmes, cf ses notes et reviews ici: usb-c-digital-av-multiport-adapter

La grosse nouveauté de ce macbook c'est sa touchbar. Elle permet (et c'est sans doute son usage le plus spectaculaire) d'afficher la liste entière des emojis unicode quand on rédige un mail , c'est assez impressionnant et bien sûr crucialement utile. On trouve aussi sur internet plein de gens qui disent que la touche escape transformée en touche non physique sur la touchbar eh ben "saipagrave", personnellement je penche plus pour le "sapuducul". Ca m'a donné l'occasion de réaliser qu'en position de repos j'ai tendance à laisser trainer le petit doigt pas loin de cette touche escape et comme maintenant elle s'active dès qu'elle est frôlée j'ai tendance à balancer des rafales de ESC intempestifs dans emacs ou dans le terminal (des rafales parce que tant qu'on laisse le doigt dessus elle passe en mode autorepeat, c'est vraiment malin). En mode rédaction de mail, un bouton 'Send' apparait juste à côté de la touche escape, ce qui est une riche idée sauf pour ceux qui ont l'habitude d'avoir le petit doigt qui traine dans le coin. A l'extrême droite y'a le bouton marinesiri que j'ai aussi pas mal tendance à activer par erreur. Le réglage du volume sonore se fait aussi sur la touchbar, mais là ou autrefois on avait une touche pour augmenter, une touche pour baisser, il faut maintenant appuyer d'abord sur un bouton qui fait apparaitre un slider pour ensuite ajuster le volume, c'est très joli mais ça fait deux "clics" au lieu d'un. A part ça, la touchbar ne me sert à rien. Donc en gros on peut un peu dire que la touchbar c'est de la merde. Peut être qu'avec du retour haptique elle serait potable.

Le clavier est nouveau aussi, et il n'est ni magique ni révolutionnaire. En plus il fait du bruit (dans le bureau c'est clairement moi qui ai le clavier le plus bruyant maintenant), et ce n'est pas un bruit soigneusement designé qui évoque le matos cher et sophistiqué, mais plutot un vieux ploc cartonné qui me rappelle les pires netbooks avec leur claviers mous et gondolés. En plus je n'arrête pas de faire des fautes de frappe sur ce clavier.

Le bruit: j'ai pris le modele quad-coeur core i7 pour avoir une machine qui a la niaque quand il s'agit de compiler des trucs. Eh bien au bout de 10 minutes de compilation intensive le macbook réussit à faire plus de bruit que mon ancien mac pro (la grosse tour qui pèse au moins 200kg). Pas mal ! Et ça n'empeche pas le cpu d'être à 100°C (d'après l'application intel dont j'ai oublié le nom). Donc le corps du mac est confortablement chaud, comme une bonne bouillote de mamie, j'ai hâte de voir ce que ça va donner cet été.

Une feature sympa quand même: le touch-id , qui marche bien et j'apprécie de devoir saisir mon mot de passe un peu moins souvent. Et l'usb-C, si on oublie l'adapteur hdmi moisi de apple , pour le reste c'est plutot sympa.

En conclusion je décerne un 2/20 à ce macbook.

Performance of the Raspberry pi 3

I just got a raspberry pi 3. I used to assume that its cpu (Cortex A53) should be quite bad, even when related to a good old cortex A9 (for example this document says that the performance is expected to be equivalent for both, while this one says the A53 is slightly slower than the A9). As I now have a cortex A9 (rk3188t) on a cheap device running picuntu, and a cortex A53 on the raspberry Pi, I can compare them. The default speed of the rk3188t is 1.4GHz but I have lowered it to the frequency of the raspberry pi for an easier comparison (using cpufreq-set). So both cpus are running at 1.2GHz. For the performance comparison, I have built and run the pffft benchmark on both:

time gcc-4.8 -O3 -DHAVE_FFTW -march=armv7-a -mtune=cortex-a9 -mfloat-abi=hard -mfpu=neon -ffast-math test_pffft.c pffft.c -o test_pffft_arm fftpack.c -lm -lfftw3f

(the raspbian distribution of the rpi3 is 32-bit so what I'm comparing here , since the A53 is 64-bit capable, is a A9 with a A53 running in 32-bit)

On the rk3188t@1.2Ghz, the compilation took 34 sec , while it took 24.9 on the pi, which is here 36% faster.

The execution took 109 sec on the rk3188t vs 66 sec on the pi, so for floating point stuff the pi is 65% faster.

If I look at the floatting point performance for pffft itself (so it is a measure of the neon simd floating point, not of the scalar floating point performance), the rk3188 reports a max value of 1164 MFlops for FFTs of length 1024 , while on the raspberry pi it achieves 2162 MFlops . So for neon stuff, the pi is 85% faster !

Here are the pffft results for the pi 3 on raspbian (when built with gcc-4.9 , which itself improves the pffft performance of 20% on both the rk3188 and the pi3 with respect to gcc-4.8, and with -mtune=cortex-a53 instead of cortex-a9, which brings another 7% of improvement):

| input len |real FFTPack|  real FFTW | real PFFFT | |cplx FFTPack|  cplx FFTW | cplx PFFFT |
|       64  |      521   |      672   |     1303   | |      534   |      887   |     1470   |
|       96  |      429   |      340   |     1253   | |      422   |      864   |     1323   |
|      128  |      508   |      740   |     1571   | |      491   |      742   |     1502   |
|      160  |      525   |      750   |     1626   | |      483   |      931   |     1463   |
|      192  |      544   |      852   |     1641   | |      495   |      877   |     1548   |
|      256  |      639   |      684   |     2007   | |      570   |      778   |     1727   |
|      384  |      483   |      873   |     1724   | |      436   |      795   |     1531   |
|      480  |      495   |      761   |     1749   | |      433   |     1040   |     1492   |
|      512  |      548   |      765   |     2043   | |      489   |      873   |     1670   |
|      640  |      557   |      892   |     2004   | |      481   |      863   |     1579   |
|      768  |      571   |      818   |     1980   | |      486   |      892   |     1684   |
|      800  |      549   |      637   |     1928   | |      450   |      657   |     1564   |
|     1024  |      645   |      842   |     2328   | |      540   |      914   |     1764   |
|     2048  |      586   |      869   |     2151   | |      487   |      931   |     1583   |
|     2400  |      530   |      672   |     1803   | |      422   |      681   |     1379   |
|     4096  |      631   |      867   |     2079   | |      476   |      843   |     1439   |
|     8192  |      515   |      811   |     1611   | |      418   |      730   |     1345   |
|     9216  |      503   |      789   |     1568   | |      424   |      812   |     1347   |
|    16384  |      501   |      749   |     1552   | |      418   |      699   |     1239   |
|    32768  |      479   |      680   |     1396   | |      346   |      529   |      825   |
|   262144  |      244   |      327   |      398   | |      240   |      409   |      387   |
|  1048576  |      229   |      270   |      350   | |      211   |      301   |      355   |

update: maybe I should say a word about the audio quality of the built-in headphone output of the rpi3 ? it is utter crap. Not sure if mine has a hardware issue or if the driver is doing some crazy shit but the output is mixed with some horrible electronic noise coming

Recyclage de clef-pc

C'est pas beau ça ?

Je ne suis pas peu fier d'avoir fabriqué un magnifique mini-pc équipé d'un nombre raisonnable de ports usb et d'une sortie son qui marche à partir de divers éléments inutiles et plus ou moins fonctionnels:

  • une clef-pc meegopad T02 , livrée avec un ubuntu qui ne boote que si on prend le soin de visiter le bios avant de la booter..
  • un vieux hub et divers bouts de cables usb
  • un lcd usb crystalfontz
  • un boite vide de "Mon Chéri" , en plastique rouge translucide, avec cette élégance subtile teintée de bon gout typique des produits Ferrero .
  • une boite de tic-tac
  • un bout de ferraille pour lester le fond du boitier
  • une carte son externe usb d'une valeur de 2 euros

Quand le boitier est ouvert ça donne quelque chose d'élégant et pas du tout bordelique.

Il s'avère que la clef-pc (baytrail z3537f, 2go de ram) accepte de booter toute seul si on lui met une distro 32-bit plutôt que 64-bit donc j'ai remplacé la ubuntu inutile et je lui ai collé une debian Jessie. Il s'avère aussi que le temps s'écoule de façon bizarre sur cette clef pc, il ralenti, il accélère il fait des bonds, et au final y'a des trucs qui marchent pas très bien (par exemple le mécanisme de répétition automatique des touches du clavier n'aime pas qd le temps fait des bonds en arrière). En mettant "clocksource=tsc" sur la ligne de commande du kernel ça marche mieux. Il s'avère enfin que la présence du lcd sur le meme hub usb que la carte son a tendance a produire des craquements dans celle-ci. Je pensais que c'était un probleme électrique (vu que j'ai du raccourcir et bricoler les câbles usb pour que ça loge dans le boitier), mais les craquement ne se produisent (semi-aleatoirement) que quand le device /dev/ttyUSB0 du lcd est open(). Du coup j'ai installé un kernel avec un HZ à 1000 et ça va nettement mieux. Mais je n'ai pas vraiment compris quelle est la nature du problème...

Le cpu est un atom baytrail à 1.33Ghz avec turbo boost à 1.8Ghz. Par défaut le turbo n'est pas activé et il n'y a pas de réglage dans le bios pour l'activer. On pourrait croire que la situation est désespérée, mais non, cette page donne des instruction qui permettent effectivement d'activer le turbo, et ça fait une différence notable en performance. Le wattmètre indique 7W et la température du cpu reste sous contrôle.

A l'arrivée le boitier fait tourner un synth avec une taille de buffer de 64 samples finger in the nose. Le synth est piloté par un petit script python qui s'occupe de l'interaction avec le LCD l'affichage, changer de preset, ou éteindre le boitier.

UPDATE: finalement le LCD provoque encore des craquements avec le kernel liquorix... rogntudju.

Latence du nexus 7

Après des mesures scientifiques, la latence "touch to fart" du nexus 7 est de 200ms (au mieux -- pour la premier application testée c'était 400ms)

Update: en fait j'avais testé avec divers synths et grand pianos, mais pas avec un vrai fart piano, et... c'est lui qui a la latence la plus faible, ~120ms ... Il semblerait que ce soit parce qu'il utilise l'api soundpool qui permet de jouer des samples predefinis avec une latence plus faible que les autres api. Mais elle n'est pas utilisable si on doit faire de la synthese ou appliquer des effets sur les samples

rogntudju

En l'espace de deux jours, je viens de découvrir que l'imac acheté il y a un an et trois mois (donc plus sous garantie) a des taches qui se développent sur la dalle, et ce matin son disque dur a laché (enfin pas sûr a 100% mais le fait qu'il ait affiché des I/O error et ramé comme un phoque avant de refuser de rebooter et que les fsck echouent piteusement me rend peu optimiste).

J'ai un peu les boules.

Update: finalement il y a eu une happy end et je n'ai plus du tout les boules !

ARM d'honneur

Je commence à regarder la documentation de NEON, l'unité simd des ARM Cortex A8 et supérieurs. Il n'y a pas encore des masses de docs "accessibles" à ce sujet, pas évident de trouver des tutoriaux de la qualité de ceux qui existent pour Altivec ou SSE. On trouve quand même une série d'articles très interessants sur blogs.arm.com:

Et franchement après avoir lu ça on ne peut qu'éprouver un sentiment de gêne pour Intel et son SSE tellement rustique qu'il fait figure d'idiot du village (le village des instructions simd). Car oui, NEON n'est pas psychorigide sur les questions d'alignement mémoire (et c'est *tellement* chiant avec SSE, et un peu chiant avec altivec). Il est aussi capable d'opérations de shuffling très avancées, avec la possibilité, en une seule instruction, de charger, désentrelacer jusqu'à 4 vecteurs 64 bits ET de post-incrementer le registre d'adresse d'une valeur abitraire. Take that, SSE. Et enfin il propose un nombre de registres raisonnable, càd 32 registres de 64 bits, qui peuvent aussi être manipulés comme 16 registres de 128 bits (chez intel: 8 registres de 128 bits en mode 32-bits, 16 registres en mode 64-bit; chez altivec: 32 registres de 128 bits). On peut aussi remarquer que neon a une operation de multiply-add, le genre de trucs que intel n'a pas mis dans SSE, ni dans SSE2, ni dans SSE3, ni dans SSSE, ni dans SSE4v1, ni dans SSE4v2, mais dans AVX (celui des futurs Sandy bridge). Et enfin, les instructions neon ONT trois opérandes: deux termes sources, une destination. Comme altivec, et contrairement à SSE. Là aussi ça permet d'économiser des tonnes de MOVAPS stupides dont la seule raison d'être est d'éviter d'écraser la précieuse valeur d'un registre. C'est encore un domaine où Intel a fini par voir la lumière puisque AVX aura des instructions à trois opérandes.

Voila voila, donc après avoir lu tout ça je me décide, avec entrain, à faire quelques tests puisque j'ai reçu un Toshiba AC100 en début de semaine, le premier netbook à base de ARM Cortex A9 (parfum tegra2), justement pour tester neon. Un netbook fourni avec android, et sur lequel je me suis quand même bien fait chier à installer une ubuntu (c'est pas facile). Et là paf, quand je lance les programmes de test c'est "Illegal Instruction" sur la première instruction neon rencontrée. Bizarre. Effectivement le /proc/cpuinfo ne fait aucune mention de neon .

Et pour cause puisque ces gros tocards de nvidia n'ont pas implementé l'unité NEON dans tegra2. Je l'ignorais.

Je vais donc maintenant frapper ce netbook avec un marteau jusqu'à ce qu'il ne reste plus que quelque misérables copeaux que je balancerai aux chiottes, je tirerai la chasse, puis j'irai me coucher.

Ôde à mondorescue

Je voulais clôner une debian Lenny installée dans un petit boitier sur un virtualbox tournant sur le mac. On m'a suggeré que Mondo Rescue pourrait être l'outil idéal pour effectuer la transplantation, et il s'est avéré que c'était vrai. Pas besoin de lire 300ko de man page , pas besoin de comprendre des concepts compliqués, on le lance, il pose quelques questions basiques et hop, les partitions de la machine originale sont compressées (avec bzip2, pouah) et backupées dans des fichiers .iso de 4Go. Je les copie sur le mac, créé une machine virtuelle dans virtual box, monte la premiere iso et boote la VM, et hop c'est parti, la debian est clonée dans la VM. C'est tellement chouette et simple que ça m'a inspiré un haiku au nombre de syllabes incertain:

Mondo Rescue,
Tu me laisses
Sur le cul

Processor preferences pane

Je croyais que le panneau de preferences de Tiger qui permettait d'activer ou pas des coeurs du CPU (ainsi que l'hyperthreading) avait disparu lors du passage à Leopard. Et bien que nenni ! Il suffit de l'installer depuis les outils developeurs, il est dans /Developer/Extras/PreferencePanes/Processor.prefPane/ . Truc bizarre, il marque "Unknown Processor" au lieu de Core i7

Noël

Hier j'ai reçu un bel imac 27 pouces core i7, ça poutre un max. C'est mon cadeau de noel que je me suis fait. Par contre en terme de chaleur c'est assez impressionnant, en fait la machine à la forme, et quasiment le dégagement de chaleur, d'un convecteur electrique. Manifestement l'electronique à l'interieur n'est pas en train de cramer, le cpu est à 60° mais on sent que ça produit de la chaleur, même quand on met la main à 10cm devant l'écran. Le micro clavier qui est livré avec est très exigeant en termes de qualité de bureau, je viens de realiser que le mien n'est plus parfaitement plat du coup le clavier est bancal c'est assez désagréable. Et j'ai presque l'impression que l'écran est trop grand, je parcours des kilometres à la souris et je trouve qu'elle n'avance pas assez vite :/

j'ai un eeepc

J'ai un eeepc. C'est plutot moche et ça fait un peu cheap, par contre l'autonomie est sympathique.

Nouveau macbook

On a reçu un mouveau macbook (pas pour moi :'( dommage j'aurais bien aimé troquer mon core 1 duo à 1.83GHz contre un c2d à 2.4Ghz ). Et surprise, il presente exactement le même problème que quand j'ai remplacé le hd du mien: le macbook vibre, et je trouve ça toujours aussi désagréable. Y'a quand même un petit soucis de conception dans le macbouc.. La bonne nouvelle, c'est que la solution que j'utilise pour le mien fonctionne encore, il suffit de glisser un bout de carton un peu épais (genre 2mm) sous le macbook, à l'endroit ou se trouve le disque dur, à peu près au niveau du coin inférieur droit du touchpad, et miraculeusement les vibrations disparaissent.

Groaaarrr

woohooEt voilà, en bon fanboy, j'ai pré-commandé Mac OS X Leopard dont la boiboite devrait arriver dans 10 jours \o/

Vibro-macbook

La grosse déception du jour c'est que la tentative d'upgrade du disque dur de mon macbouc est une miserable failure. J'ai voulu le gonfler un peu avec un disque à 7200 rpm (seagate momentus 7200.2) en partant du principe qu'une légère augmentation de la température et du bruit ne me génait pas, qu'un petite perte d'autonomie n'était pas un drame, mais par contre je n'avais pas pensé aux possibles problèmes de vibration. Eh oui car un laptop qui vibre c'est extrêmement désagréable, on a l'impression d'avoir en permanence des fourmis dans les doigts, et dieu sait que je n'aime pas les fourmis. Du coup j'ai remis le disque original :'(