COMPTOIR
register

La synthèse haut-niveau, un moyen d'optimisation des algorithmes ?

La synthèse haut-niveau, nous vous en parlions il n’y a pas si longtemps, fin août 2019. Le procédé, encore assez jeune, consiste à réaliser la synthèse automatique de matériel (via une description dans un langage très bas niveau nommé RTL, en général du VHDL) par traduction d’un langage plus haut-niveau comme le Java, C ou C++, enrichie d’annotations. Si cette pratique laisse sur le côté encore une bonne partie de l’optimisation — prétendez le contraire devant Guillaume, vous verrez le résultat — elle n’est pourtant pas si étrange qu’il n’y paraît.

 

En effet, bon nombre d’étapes de vérifications sont réalisées par simulation du code RTL sur différentes entrées, processus qui fait donc entrer en jeu du code haut-niveau. Ainsi, pour certifier un design en HLS, il suffit d’assembler des briques déjà prouvées et de prouver le code originel correspondant, ce qui est une étape qui, sans devenir pour autant anodine, réduit notablement sa complexité.

 

vivado hls scheme

 

De plus, les performances ne sont pas toujours aussi horribles. Effectivement, des choix de design, coûteux en temps lors de rédaction à la mano, deviennent bien plus simples à effectuer par synthèse grâce aux annotations du code source. En clair, il est possible d’explorer une grande partie de l’espace des designs possibles à faible coût, une perspective juteuse pour l’industrie, d’autant plus que les start-ups cherchant à produire une puce doivent souvent décider d’un compromis en ce qui concerne la répartition de l’espace entre les différentes unités fonctionnelles, chose qui réclame à la fois une expertise en hardware, mais aussi en algorithmique, afin de trouver la partition optimale pour l’usage.

 

Dans le cas des applications de machine learning, très en vogue ces dernières années, le passage par le matériel peut même révéler des nouvelles manières d’exprimer le problème, qui se transposent également rétrospectivement sur les programmes sources. Parmi les optimisations possibles, il est question du passage d’une structure de données à une autre (flottant contre virgule fixe) ou de jouer sur les tailles de tableau (les puces préférant souvent les puissances de deux).

 

Pas évident de s’y retrouver en tant que simple consommateur, mais ces techniques évoluant vers une simplification de la conception du matériel est assez amusante à observer, et il est toujours curieux d’étudier les rouages internes des firmes qui produisent nos bidules électroniques en tout genre. À quand un kit "designer son ASIC soit-même"  ? Avec le FPGA présent dans le dernier Mac Pro, certains en sont finalement plus proches qu'ils ne le pensent  ! (Source : Semi Engineering)

Un poil avant ?

Nous avons essayé • Icy Dock TourghArmor MB839SP-B

Un peu plus tard ...

Clap de fin pour Windows 7 pour le grand public, et après ?

Les 7 ragots
Les ragots sont actuellement
ouverts à tous, c'est open bar !
par Un ragoteur en R8 Gordini embusqué, le Vendredi 17 Janvier 2020 à 17h27  
par Une ragoteuse blonde embusqué le Jeudi 16 Janvier 2020 à 10h30
Bonjour à tous ! Un petit point concernant l'idée d'optimisation axée virgule fixe.. Je travaille actuellement sur un projet pour optimiser l'arithmétique des applications en virgule fixe (ou petits flottants) avant passage vers la HLS, je pense en effet qu'il y a un gros boulot à faire en termes d'arithmétique et de représentation des données au "juste besoin".
Quelque chose me dit que le "juste besoin" de ressources se trouve quelque part dans un compromis entre précision attendue du résultat, surface occupée, fréquence max d'horloge, puissance électrique nécessaire, et certainement d'autres paramètres... un joli espace à explorer. Je partage ton avis, les outils de HLS qui existent ne sont certainement pas assez mûrs pour faire ce choix eux-mêmes.
par Une ragoteuse blonde embusqué, le Jeudi 16 Janvier 2020 à 10h30  
Bonjour à tous ! Un petit point concernant l'idée d'optimisation axée virgule fixe.. Je travaille actuellement sur un projet pour optimiser l'arithmétique des applications en virgule fixe (ou petits flottants) avant passage vers la HLS, je pense en effet qu'il y a un gros boulot à faire en termes d'arithmétique et de représentation des données au "juste besoin".
par Un champion du monde embusqué, le Mercredi 15 Janvier 2020 à 14h20  
Ba...c'est pas faux.
par Un ragoteur en R8 Gordini de Bretagne, le Mercredi 15 Janvier 2020 à 09h11  
par Nicolas D. le Mardi 14 Janvier 2020 à 21h37
1) Oui, on peut même faire du polyhédrique avec, c'est très amusant (même si je n'ai pas fait plus que tripoter des flags, et encore !)

2) L'idée que j'évoquais est de certifier la compilation C -> RTL, et ensuite de certifier ton code C... Mais à ma connaissance ce n'est pas du tout en prod effectivement, et le C prouvé est déjà une belle épine dans le pied... Un voeux pieux pour le coup.
AMHA il vaut mieux certifier une passe polyédrique (qui casse la sémantique et même la structure de ton programme) plutôt que le compilateur HLS entier. La sémantique du C en tant que langage de description matérielle n'est même pas clairement définie (elle varie suivant l'outil utilisé )...

Sinon, "ça juste marche", c'est bien aussi comme politique ;-)
par Nicolas D. le Mardi 14 Janvier 2020 à 21h37
3) Ah non, c'est du Apple Ca sert à accélérer les traitements vidéo, et pour le moment aucune communication n'est fait pour un quelconque autre usage? En même temps, sur un Mac...
Dommage ! Nul doute que des petites mains vont se pencher dessus et trouver comment le programmer pour faire autre chose (bien que, autant que je sache, les Quartus et autres Vivado ne tournent pas sous Mac OS...).
par Guillaume L., le Mardi 14 Janvier 2020 à 22h30  
par Un ragoteur en R8 Gordini de Bretagne le Mardi 14 Janvier 2020 à 16h35
1) Je me frotte à Guillaume. Il existe des otpimisations en HLS, simplement, ce ne sont pas celles qu'on connait sur des compilateurs comme GCC ou LLVM. On retoruve certes des classiques comme le déroulage de boucles, mais on retrouve aussi des trucs plus spécifiques aux microarchis (pipelining automatique, partitionnement des mémoires, ...). Tout ça n'a pas de raison d'être dans un flot software seul. D'ailleurs, Vivado HLS que tu présentes utilise LLVM comme infrastructure de compilation, et tu pourrais sans doute essayer de lui donner des flags d'optimisation et voir ce qu'il en fait.
Voilà un opposant à ma hauteur, notre duel va être épique
Blague à part, la référence de Nicolas à mon nom - sans demander mon avis forcément - provient du fait qu'en tant qu'électronicien et amateur de très très bas niveau d'humour, il reste des choses que l'optimisation à la machine n'est pas forcément bien faite.

J'ai une tendance à critiquer l'effet de mâcher le travail à trop automatiser ou passer en haut niveau, ce qui donne souvent en hardware pur des soucis d'optimisation, d'implémentation ou du surdimensionnent pour bien faire.

Ceci dit, je suis le premier à utiliser des outils de routage automatiques et de simulation quand c'est nécessaire, je ne fais pas tout à la main non plus
par Nicolas D., le Mardi 14 Janvier 2020 à 21h37  
par Un ragoteur en R8 Gordini de Bretagne le Mardi 14 Janvier 2020 à 16h35
Quelques remarques en vrac :

Bla
1) Oui, on peut même faire du polyhédrique avec, c'est très amusant (même si je n'ai pas fait plus que tripoter des flags, et encore !)

2) L'idée que j'évoquais est de certifier la compilation C -> RTL, et ensuite de certifier ton code C... Mais à ma connaissance ce n'est pas du tout en prod effectivement, et le C prouvé est déjà une belle épine dans le pied... Un voeux pieux pour le coup.

3) Ah non, c'est du Apple Ca sert à accélérer les traitements vidéo, et pour le moment aucune communication n'est fait pour un quelconque autre usage? En même temps, sur un Mac...
par Un ragoteur en R8 Gordini de Bretagne, le Mardi 14 Janvier 2020 à 16h35  
Quelques remarques en vrac :

1) Je me frotte à Guillaume. Il existe des otpimisations en HLS, simplement, ce ne sont pas celles qu'on connait sur des compilateurs comme GCC ou LLVM. On retoruve certes des classiques comme le déroulage de boucles, mais on retrouve aussi des trucs plus spécifiques aux microarchis (pipelining automatique, partitionnement des mémoires, ...). Tout ça n'a pas de raison d'être dans un flot software seul. D'ailleurs, Vivado HLS que tu présentes utilise LLVM comme infrastructure de compilation, et tu pourrais sans doute essayer de lui donner des flags d'optimisation et voir ce qu'il en fait.

2) Un gros point faible des outils de HLS existants est justement, à mon avis, la simulation. En gros, tout testbench ne correspondant pas à une forme plus ou moins canonique ne passe pas. Et c'est extrêmement difficile à debugger quand ça ne fonctionne pas (ça n'est déjà pas facile avec du RTL fait main, alors avec du code généré...). Je préfère encore écrire mon testbench en SystemC et y brancher le résultat de la HLS. Un outil comme ModelSim sait simuler ce type de systèmes.

3) Waouh, sérieux, Apple met un FPGA dans son Mac Pro ? Vraiment ? Et on peut s'en servir ? Je suis bluffé. J'attends de savoir qui sont les clients pour ce type de système, et qui va se payer un Mac Pro lui ayant fait débourser 500€ (?) de plus, ayant un FPGA sans même le savoir ni un jour l'utiliser.