QCustomPlot 2 est de sortie

Qt recense bon nombre d’options pour réaliser des graphiques. Certaines étant maintenant livrées avec Qt (comme Qt Charts), l’intérêt pour des bibliothèques externes s’amoindrit. Ce n’est pas pour autant que ces projets sont morts : un an après la préversion Beta, voici venu QCustomPlot 2.0.

Globalement, l’interface de programmation ne change pas beaucoup, si ce n’est pour les nouvelles fonctionnalités (d’ailleurs, certaines fonctionnalités seront disponibles dans une version 1.4 à venir, avec une garantie de rétrocompatibilité).

Une grande nouveauté est que QCustomPlot peut maintenant gérer des graphiques où certaines données manquent : le rendu n’interpolera pas les données absentes, les points correspondants ne seront juste pas dessinés.

Le mécanisme de sélection a aussi été largement retravaillé, permettant d’opérer à l’échelle du point, mais aussi de plages de points, dans toutes les dimensions (en rectangle, par exemple).

La gestion des marques sur les axes a été complètement repensée, avec la classe QCPAxisTicker : elle gère tout l’affichage de ces marques (les coordonnées et les étiquettes associées). Auparavant, QCustomPlot laissait très peu de choix : soit les étiquettes étaient numériques (ou des dates, mais avec de nombreuses limitations), soit elles étaient entièrement spécifiées par l’utilisateur. Maintenant, l’API propose une grande flexibilité à ce niveau.

Un système de stockage de données unifié a vu le jour pour les graphiques à une dimension (comme QCPGraph ou QCPBars), avec à la clé une performance largement améliorée (en lecture comme en écriture) et une consommation de mémoire moindre par rapport à l’implémentation précédente (à base d’arbres rouge-noir). Il est accompagné d’une interface commune pour tous ces types de graphiques, QCPPlottableInterface1D.

Source et images : QCustomPlot 2.0.0 released!.

Voir aussi : tous les changements depuis la version 1.3.2.

Advertisements

Sortie de Qt Creator 4.4

La version finale de Qt Creator 4.4 est maintenant sortie, un bon mois après la Beta et deux semaines après la RC. Par rapport à la version 4.3, on compte quelques améliorations dans l’interface, le modèle de code Clang et l’intégration avec CMake.

Le modèle de code Clang offre maintenant des annotations au niveau du code : des erreurs, des avertissements, ainsi que tout signet que vous avez inséré dans le code. Il est ainsi nettement plus facile de voir les problèmes en écrivant du code, sans devoir déplacer la souris pour voir le détail de chaque message. La position des annotations est évidemment configurable.

Lors du saut vers un autre endroit d’un fichier, il est aussi possible d’activer un défilement animé et adouci. Certaines fonctionnalités de la coloration syntaxique C++ ont maintenant une couleur spécifique : les variables locales, globales et membres, les fonctions, les déclarations et les arguments de sortie (l’ancien jeu de couleurs est toujours disponible). En tentant de renommer une classe, Qt Creator proposera de renommer les fichiers correspondants en même temps.

Côté CMake, en utilisant le mode serveur (disponible uniquement depuis CMake 3.7), Qt Creator n’affiche plus les répertoires vides par défaut ; les fichiers source sont remontés dans l’arborescence, ce qui élimine un nœud dans l’arbre.

Voir aussi : tous les changements apportés par Qt Creator 4.4.

Télécharger Qt Creator 4.4.

Source : Qt Creator 4.4.0 released.

Microsoft dévoile le projet Brainwave pour l’inférence dans les réseaux neuronaux

On ne peut pas dire que les réseaux neuronaux (de préférence profonds) ne soient pas à la mode en intelligence artificielle. Google en a même lancé des processeurs spécifiques pour leur utilisation. Microsoft suit une toute autre voie : utiliser des composants programmables pour gérer la partie inférence, plutôt que des processeurs très spécifiques. Il faut dire que, au vu des utilisations de ces réseaux neuronaux dans les technologies du groupe, il est nécessaire d’investir dans le domaine : Bing les exploite pour comprendre les images, Skype pour la traduction en temps réel, par exemple. Comme les autres grands groupes, Microsoft a aussi lancé son propre outil pour les réseaux neuronaux : Cognitive Toolkit (ex-CNTK).

Depuis 2011, Microsoft déploie, dans son infrastructure infonuagique Azure, des FPGA, c’est-à-dire des circuits logiques programmables (contrairement aux TPU de Google, programmés à l’usine). Contrairement aux processeurs habituels, on peut donc changer le jeu d’instructions de ces circuits à volonté et l’optimiser pour les tâches à effectuer — la contrepartie étant une fréquence plus faible, de l’ordre de 500 MHz pour des FPGA récents et de 700 MHz pour les TPU. Là où Google doit changer ses TPU pour gérer de nouvelles fonctionnalités, Microsoft se contente de reprogrammer ses FPGA.

Les derniers déploiements côté Azure se concentrent sur la dernière itération des FPGA d’Intel (développée avant l’absorption d’Altera) : les Stratix 10, utilisant les processus de fabrication les plus récents d’Intel (14 nm). Le gain de performance par rapport à la génération précédente devrait atteindre un facteur deux.

La configuration de Microsoft sur ces nouveaux FPGA donne effectivement de bien meilleurs résultats que sur les précédents, avec un facteur d’accélération jusque vingt, selon la précision des nombres utilisés. Pour des nombres entiers sur seize bits, par carte, on passe ainsi de 1,4 à 12 Tflops ; sur huit bits, de 2 à 31 Tflops ; sur des nombres à virgule flottante (un encodage spécifique à Microsoft et non standardisé pour le moment, ms-fp8), de 4,5 à 90 Tflops. À titre de comparaison, les derniers processeurs graphiques de NVIDIA (génération Volta) peuvent atteindre 120 Tflops pour des nombres à virgule flottante de seize ou trente-deux bits ; les TPU de Google, 180 Tflops, mais avec une précision inconnue.

Microsoft prétend que sa solution dépasse toute forme de concurrence : leur matériel n’est pas spécifique à un type de réseau neuronal (la plupart des coprocesseurs spécifiques s’orientent vers les réseaux convolutionnels), mais a une performance qui se généralise à tout type de réseau (LSTM, GRU aussi bien que CNN). Il peut être utilisé tant avec leur propre outil (Cognitive Toolkit) que par celui de Google (TensorFlow). La flexibilité matérielle permettra cependant de s’ouvrir à n’importe quel outil (contrairement aux processeurs spécialisés).

L’objectif, “dans un futur proche”, est d’ouvrir cette puissance de calcul à tous les utilisateurs d’Azure pour leurs applications de l’apprentissage profond, même si aucune date précise n’a été donnée : Microsoft prend le temps d’encore améliorer sa solution.

Source et image : Microsoft Takes FPGA-Powered Deep Learning to the Next Level.

Voir aussi : Drilling Into Microsoft’s BrainWave Soft Deep Learning Chip.

Google revient sur les forces et faiblesses de ses TPU

Google investit énormément dans la recherche et le développement de produits basés sur des réseaux neuronaux artificiels profonds (souvent sous une appellation plus générique d'”intelligence artificielle” ou d'”apprentissage automatique”). Ces derniers existent depuis belle lurette (les premières traces d’un réseau neuronal comme modèle de calcul datent de 1959), mais ne sont réellement utilisés à grande échelle que depuis les années 2010, notamment avec l’introduction de la convolution dans la structure des réseaux.

Pour utiliser ces réseaux à très grande échelle, la performance de l’inférence (c’est-à-dire l’utilisation d’un réseau en pratique, par exemple pour déterminer les objets présents dans une image) devient extrêmement importante. C’est pourquoi, dès 2013, Google se lance dans le développement des TPU (tensor processing unit), tout d’abord pour accélérer l’inférence dans ces réseaux — un investissement dans l’avenir, le besoin n’étant pas encore pressant à l’époque.

Plus en détail, cette première génération est spécifiquement prévue pour un produit entre deux matrices de taille 256×256, avec des entiers de huit bits : il s’agit plus de coprocesseurs pour certaines opérations arithmétiques très précises (mais très utiles pour le contexte d’utilisation) que d’un vrai processeur à part entière. Le TPU fonctionne à une fréquence d’à peine 700 MHz, mais elle est largement suffisante pour écraser toute concurrence, avec un pic à 92 téraopérations par seconde. Ces processeurs disposent de deux canaux DDR3 pour l’accès à la mémoire, qui limitent bien souvent la performance du système.

Cependant, un TPU est extrêmement limité dans les opérations qu’il peut effectuer : il ne dispose que de onze instructions (à comparer aux centaines d’instructions disponibles en x86). Ainsi, il est incapable d’effectuer un branchement conditionnel (if), donc des boucles. L’exécution n’est jamais réordonnée (ce qui permet d’utiliser au mieux les circuits d’un processeur plus traditionnel). Beaucoup d’éléments du processeur sont gérés par un logiciel extérieur, celui qui contrôle le TPU.

Les premiers TPU sont arrivés dans les centres informatiques de Google vers 2015, selon les résultats de comparaisons effectuées en laboratoire dès 2013. Ils ont été évalués face aux CPU (Intel, de génération Haswell) et GPU (NVIDIA K80) de l’époque, du matériel de 2014. Les gains étaient nombreux : chaque puce était plus petite et consommait moins (trente fois moins qu’un GPU, quatre-vingts fois moins qu’un CPU : 40 W par TPU), on pouvait donc en mettre nettement plus par serveur. Par contre, les CPU et GPU sont nettement mieux équilibrés : un TPU pêche par manque de bande passante pour l’accès à la mémoire, qui interdit dans bon nombre d’applications d’utiliser l’entièreté de son potentiel de calcul. Cependant, même ainsi, ils dépassent la performance de processeurs plus classiques — mais uniquement pour l’inférence, ces processeurs étant trop rudimentaires pour l’entraînement de tels réseaux neuronaux.

Cette expérience acquise a permis d’améliorer le principe des TPU, afin d’en déployer la deuxième génération cette année. Notamment, pour la mémoire, les deux canaux de mémoire DDR3 ont été remplacés par de la mémoire HBM, comme bon nombre d’accélérateurs actuels. Également, cette nouvelle édition s’oriente vers les nombres à virgule flottante plutôt qu’uniquement des entiers, ce qui permet de l’utiliser pour l’entraînement plutôt qu’uniquement l’inférence. Google n’a pas donné énormément de détails au sujet de la nouvelle itération, notamment pour la comparer au matériel sorti cette année (on pense surtout aux nouveaux GPU NVIDIA, qui incluent un module de calcul spécifiquement prévu pour l’apprentissage profond), ni sur ses pistes pour la troisième génération.

Source et images : Hot Chips: Google TPU Performance Analysis.

Voir aussi : une introduction détaillée au TPU, une analyse poussée des serveurs à base de TPU2.

IBM détaille les améliorations de son z14

Les ordinateurs centraux (mainframes) sont loin d’être morts. Notamment, ils sont souvent utilisés par certaines grandes entreprises pour des transactions à l’échelle mondiale, comme les systèmes des cartes de crédit ou de réservation dans l’aviation. S’ils représentaient la majorité des ordinateurs dans les années 1960, ils sont maintenant relégués à quelques applications de niche et sont de plus en plus optimisés pour ces traitements spécifiques.

C’est dans ce contexte qu’IBM a annoncé, en juillet, sa nouvelle génération de processeurs et machines prévus pour cette utilisation, les z14. Ces derniers ne sont utilisables que dans ce contexte, dans des machines entièrement fabriquées et vendues par IBM. De manière générale, cette nouvelle génération s’oriente sur l’amélioration de la performance, de manière générale, mais aussi pour les applications COBOL (très présentes dans ce type d’environnement), la cryptographie et la compression.

Plus en détail, un tiroir utilise deux types de processeurs différents : les CP (central processor), qui contiennent les cœurs de calcul et les caches jusqu’au troisième niveau, puis le SC, qui contient le quatrième niveau de cache (six cent septante deux mégaoctets !) et l’interconnexion avec les autres tiroirs. Chaque CP contient un total de dix cœurs de calcul (avec SMT), fonctionnant à une fréquence de plus de cinq gigahertz. Chaque tiroir peut contenir jusque huit téraoctets de mémoire. Ces deux types de puces sont complexes à fabriquer. Elles utilisent un processus à 14 nm, mais sur dix-sept couches. Un CP compte sept milliards de transistors, contre dix pour un SC.

Au niveau des améliorations matérielle, IBM a agrandi les caches de chaque CP : chaque cœur aura ainsi un cache L2 pour les instructions de deux mégaoctets, le double pour les données ; le cache L3 est partagé à l’échelle du CP et a une capacité de cent vingt-huit mégaoctets. L’implémentation de ces caches a aussi été profondément retravaillée, principalement pour réduire la latence d’accès et l’espace occupé sur la puce : pour accéder au cache L2, il ne faut plus que huit cycles, c’est-à-dire une nanoseconde et demi.

L’architecture du processeur a également été retravaillée en profondeur, notamment pour offrir un ramasse-miette sans pause à la machine virtuelle Java. Le pipeline a été approfondi, avec une prédiction de branchement asynchrone. COBOL a tendance à effectuer un grand nombre d’opérations arithmétiques en BCD (des nombres décimaux écrits en binaire, chaque chiffre décimal correspondant à quatre bits), ces opérations disposent maintenant d’un jeu d’instructions spécifique.

Côté cryptographique, un accélérateur pour le chiffrement (AES) et le hachage (SHA-3) est intégré, sous le nom de CPCAF. Par rapport au z13, le chiffrement va quatre fois plus vite ; ce rapport monte à six pour SHA-3. Plus précisément, en AES, chaque cœur peut chiffrer des données à un débit de 13,2 Go/s. Un mécanisme spécifique est prévu pour protéger les clés de chiffrement, qui ne seront pas vues par le processeur principal, mais uniquement par le coprocesseur cryptographique : un attaquant ne peut donc pas y accéder facilement.

De même, un accélérateur de compression est intégré, il se focalise sur les algorithmes à base de dictionnaire, plus particulièrement sur des données en quantité réduite (comme des enregistrements dans une base de données). DB2 sera prochainement mis à jour pour en profiter.

Source et images : Hot Chips: IBM’s Next Generation z14 CPU Mainframe.

Voir aussi : IBM z14 Technical Introduction.

PCI Express 5.0 déjà annoncé pour 2019

À peine quelques mois après l’annonce de la fin des travaux sur PCI Express 4.0, voici donc les premières communications sur la version 5.0 du protocole et du bus… dont la version finale est attendue pour 2019 (alors qu’on attend l’arrivée sur le marché de PCIe 4.0 pour la fin 2017) ! Ainsi, la version 4.0 aura eu énormément de retard (deux ans) et ne vivra pas très longtemps. Elle se montrera cependant très utile à de nombreuses applications industrielles (PCI SIG, le groupe de normalisation derrière PCIe, compte pas moins de sept cent cinquante membres), pour lesquelles PCIe 3.0 est une limite — et PCIe 4.0 le sera déjà dans certains cas.

Le retard de PCIe 3.0 peut s’expliquer par une certaine stagnation des besoins : cette version était très adaptée aux besoins de 2010 et des années qui ont suivi. Ce n’est que depuis 2015 que l’on commence à vraiment en sentir les limites : la bande passante disponible n’est plus suffisante. En effet, l’apprentissage profond nécessite de faire transiter de grandes quantités de données vers le processeur graphique ; les SSD sont de plus en plus connectés au processeur par le bus PCIe (grâce au protocole NVMe) au lieu de SATA, ils consomment donc des lignes supplémentaires ; aussi, le réseau est de plus en plus sollicité avec des applications. De nouvelles applications se développent, comme les cartes graphiques externes, qui seront également connectées en PCIe.

PCIe 4.0 est très proche de l’utilisation réelle. Des contrôleurs existent déjà, des cartes d’extension sont d’ores et déjà prévues pour la nouvelle norme : une mise à jour logicielle devrait suffire (à moins d’un changement important de la couche physique qui interviendrait d’ici à la publication définitive de la norme PCIe 4.0).

La nouvelle version doublera à nouveau les débits, pour atteindre les quatre gigaoctets par seconde et par ligne. Ainsi, pour une carte réseau Ethernet à quatre cents gigabits par seconde, les seize lignes pourront fournir un débit maximum suffisant qui ne bridera pas la carte réseau.

Les produits compatibles ne tarderont pas à venir sur le marché : PCIe 4.0 devrait utiliser une fréquence de bus de trente-deux gigahertz, bon nombre de fabricants peuvent déjà fonctionner à vingt-huit gigahertz. La révision 0.3 de la norme est maintenant disponible, la 0.5 devrait faire ses premiers pas à la fin de l’année.

Source : Hot Chips 2017: We’ll See PCIe 4.0 This Year, PCIe 5.0 In 2019.

Nimbus dévoile son ExaDrive, un SSD de 50 To

Le dernier gros avantage des disques durs mécaniques par rapport au disques électroniques (SSD) était la densité : sur quelques centimètres cubes, on peut stocker des téraoctets d’information (de l’ordre de 0,2 téraoctet par centimètre carré, en ignorant l’épaisseur, c’est-à-dire un téraoctet par pouce carré), alors que les SSD ne peuvent atteindre ces densités qu’en laboratoire depuis 2016.

Début de ce mois, cependant, Nimbus a annoncé son ExaDrive : un SSD de vingt-cinq ou cinquante téraoctets dans le volume d’un disque dur traditionnel, d’une diagonale de trois pouces et demi (la concurrence se focalise sur un format légèrement plus petit, de deux pouces et demi). En d’autres termes, ces SSD atteignent une densité de 0,35 téraoctet par centimètre carré, tandis que les disques durs au format trois pouces et demi n’atteignent qu’une quinzaine de téraoctets. Les disques durs n’atteignent qu’une quinzaine de téraoctets sur la même surface. La consommation énergétique de ces SSD est annoncée comme équivalente à des disques durs de dix téraoctets.

 

Architecturalement, la différence avec les SSD classiques est la présence de plusieurs contrôleurs. Cette conception est relativement monolithique, mais s’adapte relativement bien à des SSD de quelques téraoctets. Par contre, avec une quantité stockée bien plus grande, la gestion de l’espace devient délicate. Pour des débits importants, l’application des codes correcteurs d’erreur prend un temps non négligeable. Ainsi, Nimbus est parti sur l’idée de plusieurs contrôleurs : certains s’occupent des codes correcteurs, d’autres du niveau d’usure de la mémoire flash.

Au niveau de la fiabilité, ces disques sont vendus comme supérieurs aux disques magnétiques classiques. Nimbus offre d’ailleurs une garantie de dix ans (contre cinq habituellement pour les disques durs). Les vitesses ne sont pas exceptionnelles : de l’ordre de cinq cents mégaoctets par seconde en lecture séquentielle, trois cent cinquante en écriture séquentielle.

À l’horizon 2020, Nimbus s’attend à des SSD de cinq cents téraoctets, avec son architecture multicontrôleur. Ainsi, un seul serveur pourrait stocker jusqu’à six cents pétaoctets de données. Ces performances pourraient intéresser des applications infonuagiques, d’imagerie digitale, de calcul de haute performance ou encore d’intelligence artificielle.

Sources : Flash memory’s density surpasses hard drives for first time, Nimbus Data Unveils 50TB Flash Drive, on Path to 500TB.