Traduction binaire dynamique de l extension SIMD Néon de l ARMv7 dans Qemu

Dimension: px
Commencer à balayer dès la page:

Download "Traduction binaire dynamique de l extension SIMD Néon de l ARMv7 dans Qemu"

Transcription

1 Travaux d études et de recherches Traduction binaire dynamique de l extension SIMD Néon de l ARMv7 dans Qemu Étudiant : Luc Michel Encadrants : Frédéric Pétrot Nicolas Fournel 23 mai 2010

2 TABLE DES MATIÈRES Table des matières Introduction 2 1 Fonctionnement interne de Qemu La représentation intermédiaire de Qemu : la TCG Méthode actuelle de traduction des instructions Neon Présentation des helpers Surcoûts induits par les helpers Amélioration de la traduction des instructions Neon Première méthode : conversion en micro-opérations TCG classiques Présentation de la méthode Exemple de la traduction du vadd.i16 à l aide de micro-opérations Réflexions sur la méthode Deuxième méthode : ajout de micro-opérations SIMD au sein de la TCG Présentation de la méthode Exemple de traduction du vadd.i16 vers SSE Réflexions sur la méthode Tests et résultats 11 Conclusion 12 Annexes 13 Références 14 1

3 TABLE DES MATIÈRES Introduction Contexte du TER Ce TER s est déroulé dans l équipe SLS (System Level Synthesis) du laboratoire TIMA, sous la direction de Frédéric Pétrot et Nicolas Fournel. Il s inscrit dans un travail de recherche autour de la simulation de systèmes. Avec l augmentation de la part de logiciel dans les systèmes embarqués récents et à venir, la légitimité de l utilisation de modèle de simulation au niveau transactionnel n est plus à démontrer. L apparition et le développement de systèmes embarqués multi-processeurs met en avant une des faiblesses de ce type de simulation, à savoir la lourdeur du ou des simulateurs d architectures utilisés pour la simulations des processeurs. En effet, la multiplication du nombre de processeurs alourdit d autant l utilisation de ces modèles de simulation. Les solutions proposées dans l équipe SLS utilisent principalement deux technologies distinctes pour améliorer ces performances. La première est appelée traduction binaire (binary translation) et consiste en la traduction des instructions de l architecture cible (ARM,...) en instructions de l architecture simulant (architecture dite hôte). Une fois cette traduction effectuée, on exécute la version traduite. Cette technologie est largement utilisées en virtualisation (ex : Qemu[1]) La seconde technique est nommée simulation native. Cette technique consiste en la compilation du logiciel embarqué pour l architecture hôte. Elle impose certains traitements pour permettre l interaction avec la simulation du reste de la plate-forme. Présentation de la problématique, introduction à Qemu Le but de ce TER était de travailler sur cette première méthode, la traduction binaire. La traduction binaire consiste à traduire le code binaire (le code exécutable par un processeur) d une architecture cible, vers celui d une autre architecture, dite h^ote. L architecture cible concernée par ce TER est l architecture ARM. En effet, il est question de travailler sur la manière dont Qemu traduit un sous-ensemble d instructions de cette architecture. Qemu est un logiciel open-source permettant d émuler ou de virtualiser une machine dite machine cible sur une autre machine dite machine hôte. Ces deux machines peuvent être d architectures différentes. Qemu utilise le principe de la traduction binaire dynamique, qui consiste à traduire, à la volée, le code binaire de la machine cible, vers celui de la machine hôte. Le sous-ensemble d instructions de l architecture ARM par lequel ce TER est concerné est celui des instructions Advanced SIMD, dont l implémentation est appelée NEON Technology TM. Dans la suite de ce document, nous ferons référence aux instructions Neon, pour les désigner. Les instructions Neon sont des instructions dites SIMD (Single Instruction, Multiple Data). Ce type d instructions, présent dans la majorité des architectures d aujourd hui, a la particularité de travailler non pas sur un ensemble de données mais sur un ensemble de vecteurs de données. Il est par exemple possible d effectuer l addition de deux vecteurs de quatre entiers chacun, en une opération. Ce type d instructions peut être très bénéfique en terme de performance dans certaines applications. L exemple le plus courant est celui des applications multimédia, par exemple lors de la compression ou décompression audio ou vidéo. Ce genre d instructions s adapte très bien aux algorithmes utilisés dans ces cas, de par la nature régulière de ceux-ci. Actuellement, les instructions Neon sont correctement traduites par Qemu, mais d une manière pénalisante en terme de performance. En effet, nous verrons par la suite qu une telle instruction se traduit sur la machine hôte par : Un appel de fonction, 2

4 1 FONCTIONNEMENT INTERNE DE QEMU Une traduction totalement SISD (Single Instruction Single Data), c est à dire une traduction à base d instructions assembleurs classiques. Le but de ce TER était donc de trouver une ou plusieurs solutions pour améliorer cette traduction, puis d en implémenter une partie afin de pouvoir constater ou non le gain de performance. 1 Fonctionnement interne de Qemu 1.1 La représentation intermédiaire de Qemu : la TCG Lorsque Qemu traduit le code binaire, il ne le fait pas directement de la machine cible vers la machine hôte. Il passe par une représentation intermédiaire appelée la TCG (Tiny Code Generator). Cette représentation intermédiaire est composée d instructions simples appelées micro-opérations, du type de celles des architectures classique (load, store, mov, add, sub, and, or,... ). La traduction, schématisée par la figure 1, se fait donc en deux temps : 1. Pour chaque instruction de l architecture cible, un décodage est effectué, et une première traduction est faite vers la représentation intermédiaire. 2. Une fois cette première traduction effectuée pour un sous-ensemble du code, une deuxième traduction est faite, cette fois-ci de la TCG vers l architecture hôte. Ce sous ensemble est appelé un basic block. Il est délimité par une instruction de type saut dans la TCG. Ainsi, lorsqu un saut vers une adresse ou un retour de fonction est effectué, Qemu considère la fin du basic block, et le début d un autre. Le code ainsi généré est placé dans un buffer, puis est executé par la machine hôte. Ce buffer contient non pas un mais plusieurs basic blocks, dont Qemu garde une trace. Ainsi, si le même basic block doit être exécuté plusieurs fois (plusieurs appels à la même fonction, itérations d une boucle,... ), le code présent dans le buffer est réutilisé, une seconde traduction n est donc pas nécessaire. Cependant, ce buffer est de taille limité. Ainsi, lorsqu il est plein, la politique de Qemu est de le vider complètement pour laisser place à de nouveaux basic blocks. Cette technique de représentation intermédiaire permet à Qemu de pouvoir rendre indépendant l émulation des machines cibles, et le support des machines hôtes. Ainsi, lors de l implémentation d une nouvelle architecture hôte, celle-ci peut directement bénéficier de toutes les architectures cibles déjà émulées, et inversement. De plus, grâce à ce buffer, les performances générales sont très bonnes puisque le code traduit à beaucoup de chances d être réutilisé. 1.2 Méthode actuelle de traduction des instructions Neon Présentation des helpers Une autre technique utilisée dans la TCG pour traduire le code de l architecture cible est l utilisation des helpers. Cette technique consiste, non pas à traduire en représentation intermédiaire, mais à écrire une fonction en code C réalisant l opération voulue. Cette fonction sera compilée au même moment que Qemu. La TCG génère ensuite dans le code hôte un appel vers cette fonction pour exécuter l opération. C est de cette manière que sont traduites la plupart des instructions Neon. Cela est principalement dû à un héritage des anciennes versions de Qemu. La figure 2 montre l utilisation d un helper pour traduire l instruction vadd.i16 1. Cette instruction prend en paramètre trois registres q0, q1 et q2. Ceux sont des registres Neon 128 bits que l instruction considère comme étant des vecteurs de huit entiers de 16 bits. Cette instruction additionne les éléments des vecteurs q1 et q2, et place le résultat dans q0. 1. le fonctionnement de cette instruction est décrit figure 3 3

5 2 AMÉLIORATION DE LA TRADUCTION DES INSTRUCTIONS NEON 0x : mov sp, r0 0x : sub r0, r0, # x : msr CPSR_c, #209 Code de la machine cible ARM movi_i32 tmp9,$0xdf movi_i32 tmp10,$cpsr_write call tmp10,$0x0,$0,tmp8,tmp9 movi_i32 pc,$0x11c exit_tb $0x0 Représentation intermédiaire TCG 0xb4f270ac: mov $0xd1,%ecx 0xb4f270b1: mov %ecx,(%esp) 0xb4f270b4: mov $0xdf,%ecx 0xb4f270b9: mov %ecx,0x4(%esp) 0xb4f270bd: mov %eax,0x34(%ebp) 0xb4f270c0: mov %edx,0x0(%ebp) 0xb4f270c3: call 0x821fa25 0xb4f270c8: mov $0x11c,%eax 0xb4f270cd: mov %eax,0x3c(%ebp) 0xb4f270d0: xor %eax,%eax 0xb4f270d2: jmp 0x84ed448 Code généré pour la machine hôte x86 Figure 1 Fonctionnement de la traduction dynamique Surcoûts induits par les helpers Cette technique est coûteuse, car pour une unique instruction de la machine cible, un appel de fonction est effectué. Cela implique en plus de faire des arrangements autour de cet appel pour faire correspondre les paramètres et valeurs de retour. De plus, le helper prend en paramètre et renvoie des entiers sur 32 bits, et non sur 128 bits. En effet, cette traduction est totalement SISD, d où ces valeurs sur 32 bits. Pour traduire la totalité du vecteur, la fonction est appelée quatre fois, avec une partie différente du vecteur à chaque appel. De plus, des opérations supplémentaires sont nécessaires pour rendre indépendant l addition des différents entiers sur 16 bits. C est pourquoi le helper commence par isoler les bits de poids fort de ceux-ci avant de faire l addition, et les réinjecte ensuite si nécessaire. Toute cette mécanique induit un sur-coût non négligeable par rapport à l unique instruction vadd.i16 présente dans le code de la machine cible. 2 Amélioration de la traduction des instructions Neon Au court du TER, plusieurs réflexions ont été portées pour déterminer comment améliorer les performances de cette traduction. Principalement deux méthodes sont ressorties : Une première méthode consistant à remplacer la traduction à l aide d helpers par une traduction en représentation intermédiaire classique. Cette technique à pour effet de supprimer les appels de fonctions, ainsi que les passages et récupération de paramètres. En revanche, elle ne résout pas le problème du surcoût dû aux instructions supplémentaires pour la traduction (par exemple l isolation des bits de poids fort dans le cas du vadd.i16). Une deuxième méthode consistant à enrichir la TCG avec de nouvelles micro-opérations 4

6 2 AMÉLIORATION DE LA TRADUCTION DES INSTRUCTIONS NEON 0x : vld1.32 {d0-d1, [r0] 0x : vld1.32 {d2-d3, [r1] 0x c: vadd.i16 q0, q1, q2 0x : vst1.32 {d0-d1, [r0] Code de la machine cible ARM uint32_t HELPER(neon_add_u16) (uint32_t a, uint32_t b) { uint32_t mask; mask = (a ^ b) & 0x u; a &= ~0x u; b &= ~0x u; return (a + b) ^ mask; Code du Helper ld_i32 tmp8,env,$0x2f8 ld_i32 tmp9,env,$0x308 movi_i32 tmp10,$neon_add_u16 call tmp10,$0x0,$1,tmp8,tmp8,tmp9 st_i32 tmp8,env,$0x2e8 Représentation intermédiaire TCG 0xb56c38b7: cmp 0xb56c38b9: mov 0xb56c38bb: je 0xb56c38bd: mov 0xb56c38c2: call 0xb56c38c7: jmp 0xb56c38c9: add (%edx),%eax %ecx,%eax 0xb56c38c9 $0x1,%edx 0x821ce38 0xb56c38ce 0xc(%edx),%eax Code généré pour la machine hôte x86 Figure 2 Exemple de traduction d une instruction Neon (vadd.i16) à l aide d un helper SIMD, afin de profiter pleinement des capacités de l architecture hôte. En effet, avec cette technique, le résultat de la traduction sur la machine hôte est à même de comporter des instructions SIMD si celle-ci les supporte. Afin de se limiter à un sous-ensemble d instructions Neon, ce TER se concentre sur une partie des sources du logiciel FFmpeg, logiciel libre de traitement audio et video. Celui-ci comporte une partie en assembleur propre à chaque plateforme sur lesquelles il est porté, qui optimise une partie des traitements. Pour l architecture ARM, certaines opérations sont optimisées à l aide d instructions Neon. Voici le sous-ensemble considéré : Instruction vadd vaddw vqmovun vrshr vshr vsub vswp vtrn Description Addition de vecteurs. Addition de vecteurs de tailles différentes. Déplace le contenu d un registre dans un autre de taille inférieur. Le résultat est converti en entier non signé. Effectue une rotation vers la droite sur les éléments d un vecteur. Effectue un décalage vers la droite sur les éléments d un vecteur. Soustraction de vecteurs. Échange le contenu de deux registres. Considère deux registres comme les lignes d une matrice 2 2 et en effectue la transposée. Certaines de ces instructions sont suivies d une information indiquant le type et la largeur des données utilisées. Par exemple, l instruction vadd.i16 travaille sur des vecteurs d entiers de 16 bits, elle ne tient pas compte du typage (signé ou non). vshr.u32 effectue le décalage logique 5

7 2 AMÉLIORATION DE LA TRADUCTION DES INSTRUCTIONS NEON 128bits 16bits 16bits 16bits 16bits 16bits 16bits 16bits q q2 q0 Figure 3 Fonctionnement de l instruction vadd.i16 vers la droite d entiers sur 32 bits alors que vshr.s32 effectue un décalage arithmétique. La combinaison des instructions et des types de données offre donc beaucoup de possibilités, mais aussi beaucoup de cas à prendre en compte dans Qemu. 2.1 Première méthode : conversion en micro-opérations TCG classiques Présentation de la méthode Cette première méthode se veut suffisamment simple puisqu il suffit de remplacer le helper par une suite de micro-opérations de la TCG, en gardant le même modèle. Il faut donc traduire le code du helper écrit en C, en micro-opérations TCG Exemple de la traduction du vadd.i16 à l aide de micro-opérations Voici un exemple avec l instruction Neon vadd.i16. Listing 1 Code du helper u i n t 3 2 t HELPER( neon add u16 ) ( u i n t 3 2 t a, u i n t 3 2 t b ) { u i n t 3 2 t mask ; mask = ( a ˆ b ) & 0 x u ; a &= 0 x u ; b &= 0 x u ; return ( a + b ) ˆ mask ; 6

8 2 AMÉLIORATION DE LA TRADUCTION DES INSTRUCTIONS NEON Listing 2 Code générant les micro-opérations static inline int gen neon add u16 (TCGv t0, TCGv t1 ) { TCGv mask = new tmp ( ) ; t c g g e n x o r i 3 2 ( mask, t0, t1 ) ; t c g g e n a n d i i 3 2 ( mask, mask, 0 x u ) ; t c g g e n a n d i i 3 2 ( t0, t0, 0 x u ) ; t c g g e n a n d i i 3 2 ( t1, t1, 0 x u ) ; t c g g e n a d d i 3 2 ( t0, t0, t1 ) ; t c g g e n x o r i 3 2 ( t0, t0, mask ) ; dead tmp ( mask ) ; return 0 ; Le type TCGv représente une valeur qui sera stockée dans un registre de la machine hôte. t0 et t1 sont les opérandes de l instruction vadd.i16, le résultat est stocké dans t0. Les microopérations générées sont similaires aux instruction présentes dans le helper, la même opération d isolation du bit de poids fort est effectuée Réflexions sur la méthode Durant les différentes réflexions portées pour construire cette solutions, il a été question de chercher à automatiser la génération du code de traduction, en partant par exemple de la documentation fournie par le constructeur ARM. Dans cette documentation, chaque instruction est décrite de manière formelle dans un pseudo-langage. Une extension possible, si cette méthode s avère performante, serait donc de développer un parser pour ce pseudo-code, qui générerait automatiquement la suite de micro-opération TCG pour chaque instruction. Cela éviterait ainsi un important travail de développement, et limiterait grandement les sources d erreurs. 2.2 Deuxième méthode : ajout de micro-opérations SIMD au sein de la TCG Présentation de la méthode Cette deuxième approche semble être de meilleur qualité, puisqu elle permet de générer des instructions SIMD sur la machine hôte. En revanche, elle demande un plus gros effort de conception car pour chaque micro-opération SIMD ajoutée dans la TCG, il faut en théorie effectuer la traduction vers toutes les architectures hôtes déjà implémentées dans Qemu. Ce TER se limite néanmoins à la traduction vers l architecture x86, et son jeu d instructions SIMD MMX/SSE[3]. Il faut aussi adapter la TCG pour qu elle puisse travailler sur des données de 128 bits. Il faut enfin ajouter aux architectures hôtes, la liste des registres SIMD disponibles, afin d autoriser l allocateur de registres de la TCG à les utiliser. Dans la version de Qemu, les micro-opérations de la TCG sont définies dans le fichier tcg/tcg-opc.h. En guise d exemple, voici la définition de la micro-opération add_i32, qui représente l addition classique sur 32 bits. DEF2( add i32, 1, 2, 0, 0) Le premier paramètre est le nom de la micro-opération, les second et troisième sont respectivement le nombre d opérandes out et in, le quatrième représente de nombre d opérandes 7

9 2 AMÉLIORATION DE LA TRADUCTION DES INSTRUCTIONS NEON immédiates et enfin, le dernier sert à positionner des flags donnant des informations supplémentaires à la TCG 2. Dans cet exemple, la micro-opération additionne deux opérandes in et stocke le résultat dans une opérande out. Environ 35 micro-opérations ont été ajoutées à la TCG de Qemu dans le cadre de ce TER. Afin de les différencier, elles sont toutes préfixer par simd_64_ ou simd_128_, suivant la taille des données qu elles manipulent. Elles sont entourées par des conditions préprocesseur ce qui permet de ne pas les inclure dans Qemu à la compilation si la machine hôte ne supporte pas le SIMD. Bien entendu et afin de rester cohérent, ces conditions apparaissent à d autres endroits dans le code. Notamment, si la compilation est effectuée sans le support du SIMD, la méthode actuelle de traduction du Neon est utilisée. Une fois ces micro-opérations définies, il est possible de rajouter des fonctions inline dans le fichier tcg/tcg-op.h. Ces fonctions sont celles utilisées lors de la traduction machine cible vers TCG. Elles sont préfixées par tcg_gen_ (cf. l exemple de la traduction du vadd.i16 avec la méthode 1). Ce sont elles qui vont effectivement émettre des micro-opérations. Elles peuvent soit directement en émettre une ou plusieurs, soit appeler une autre fonction inline similaire en adaptant les paramètres Exemple de traduction du vadd.i16 vers SSE Voici l exemple de l ajout de la micro-opération simd_128_add_i16 pour traduite l instruction Neon vadd.i16. Côté TCG Cette première partie décrit les ajouts réalisés dans la TCG. Listing 3 Ajout de la micro-opération dans tcg-opc.h DEF2( simd 128 add i16, 1, 2, 0, 0) Comme pour l addition classique, cette micro-opération prend en paramètre deux opérandes d entrées et une opérande de sortie. 2. Par exemple, le flag TCG_OPF_BB_END informe la TCG que la micro-opération marque la fin d un basic block. 3. Dans le cas d opération prenant en paramètre une opérande immédiate, la fonction inline charge d abord ce paramètre dans un registre avant d appeler la fonction similaire qui ne prend que des registres en paramètre. 8

10 2 AMÉLIORATION DE LA TRADUCTION DES INSTRUCTIONS NEON Listing 4 Ajout de fonctions inline dans tcg-op.h static inline void tcg gen simd 128 op3 ( int opc, TCGv i128 arg1, TCGv i128 arg2, TCGv i128 arg3 ) { gen opc ptr++ = opc ; gen opparam ptr++ = GET TCGV I128( arg1 ) ; gen opparam ptr++ = GET TCGV I128( arg2 ) ; gen opparam ptr++ = GET TCGV I128( arg3 ) ; static inline void tcg g en s imd 128 add i16 ( TCGv i128 ret, TCGv i128 arg1, TCGv i128 arg2 ) { tcg gen simd 128 op3 ( INDEX op simd 128 add i16, ret, arg1, arg2 ) ; La première fonction est la fonction utilisée dans le cas général d opérations SIMD à trois opérandes. Elle se contente de placer l opération et les paramètres dans leur buffer respectif, buffers que Qemu lira lors de la traduction de la TCG vers la machine hôte. La seconde fonction est celle qui sera appelée pour émettre une opération simd_128_add_i16. Elle appelle la fonction précédente avec les trois opérandes. Le type TCG_i128 a été ajouté à la TCG dans le cadre de ce TER afin que celle-ci supporte des opérandes sur 128 bits. Côté machine ARM cible Décrivons maintenant les ajouts dans la première étape de traduction : la traduction des instructions Neon en micro-opérations TCG. Listing 5 Traitement du vadd.i16 dans le décodage des instructions ARM (targetarm/translate.c) TCGv i128 ret, arg1, arg2 ; r e t = tcg temp new i128 ( ) ; arg1 = neon load simd reg128 ( rn ) ; arg2 = neon load simd reg128 (rm ) ; tcg g en s imd add i16 ( ret, arg1, arg2 ) ; n e o n s t o r e s i m d r e g ( rd, r e t ) ; t c g t e m p f r e e i ( arg1 ) ; t c g t e m p f r e e i ( arg2 ) ; Ce listing est exécuté lorsqu un vadd.i16 est rencontré dans le code ARM. Il charge les deux registres, appelle la fonction tcg_gen_simd_128_add_i16 créée dans la première étape, puis sauvegarde le résultat dans le registre de destination. Les variables rn, rm et rd sont définies lors du décodage de l instruction. Côté machine x86 hôte Il faut enfin effectuer la traduction de la micro-opération tcg_gen_simd_128_add_i16 sur la machine hôte. 9

11 2 AMÉLIORATION DE LA TRADUCTION DES INSTRUCTIONS NEON Listing 6 Déclaration de la micro-opération auprès de l architecture hôte (tcg/i386/tcgtarget.c) { INDEX op simd 128 add i16, { "X", "0", "X", Cette ligne est ajoutée dans un tableau contenant toutes les micro-opérations de la TCG. Ce tableau est propre à chaque architecture hôte, car il définit les contraintes liées aux opérandes de la micro-opération. En effet, lors de la traduction des micro-opérations, la TCG gère les registres de la machine hôte. Elle alloue et fournie des registres pour la traduction des micro-opérations. Ici, un "X" signifie que les registres qui vont être associés à la première opérande (opérande de sortie) et à la troisième opérande (deuxième opérande d entrée), seront des registres SIMD SSE de l architecture x86. Le "0" signifie que pour la deuxième opérande, l allocateur de registres doit fournir le même registre pour l opérande numéro 0, c est à dire la première. Cela s explique par le fait que l instruction analogue au vadd.i16 en SSE, comme la majorité des instructions x86, ne prend en paramètre que deux opérandes, la première étant à la fois une des deux opérandes d entrées et l opérande de sortie. Cette instruction analogue est l instruction paddw. Listing 7 Traduction de l opération en instruction SSE (tcg/i386/tcg-target.c) static inline void tcg out modrm simd simd ( TCGContext s, int opc, int r1, int r2 ) { tcg o ut8 ( s, ( opc & 0 x00ff0000u ) >> 1 6 ) ; tcg o ut8 ( s, ( opc & 0 x0000ff00u ) >> 8 ) ; tcg o ut8 ( s, opc & 0 x000000ffu ) ; tcg o ut8 ( s, 0 xc0 ( r1 << 3) r2 ) ; static inline void tcg o ut o p ( TCGContext s, int opc, const TCGArg args, const int c o n s t a r g s ) { switch ( opc ) { [... ] case INDEX op simd 128 add i16 : tcg out modrm simd simd ( s, 0 x00660ffdu, args [0] TCG REG XMM0, args [2] TCG REG XMM0) ; break ; [... ] Finalement, l opération est traduite. La fonction tcg_out_op est appelée par la TCG pour chaque micro-opération à traduire. Seul le cas qui nous intéresse est conservé ici. Le tableau args contient les numéros des registres alloués pour la traduction de l opération, en fonction des contraintes vues plus haut. La fonction tcg_out_modrm_simd_simd prend en paramètre l opcode x86 de l instruction (0x00660ffd). Cet opcode est celui de l instruction paddw[2]. Elle prend aussi en paramètre les deux registres concernés, et enfin, le contexte de la TCG. Cette fonction fait plusieurs appels à la méthode tcg_out_8, qui écrit un octet brut dans le buffer de traduction de l architecture cible. C est le contenu de ce buffer qui sera exécuté. 10

12 3 TESTS ET RÉSULTATS Voilà qui achève les différentes étapes pour traduire une instruction Neon avec cette deuxième méthode. Théoriquement, cette traduction effectuée pour l architecture hôte x86 devrait être faite pour toutes les autres architectures Réflexions sur la méthode Durant les différentes réflexions lors du développement de cette méthode, il a été question de chercher à déterminer l ensemble de micro-opérations SIMD optimal à rajouter à la TCG de Qemu, pour satisfaire au mieux toutes les architectures cibles et hôtes. En effet, la nature des instructions SIMD varient d une architecture à l autre. Par exemple, l instruction Neon vaddw permet l addition de deux vecteurs de tailles différentes. Une conversion est faite en interne pour effectuer l addition. Les instructions SIMD x86 en revanche ne proposent pas ce genre d opérations. Il faut d abord convertir l un des deux vecteurs avant de faire l addition classique. Il y a donc une réflexion à porter pour déterminer le juste milieu dans la TCG, c est à dire ne pas rajouter d instructions SIMD trop spécifiques à une architecture, mais en mettre suffisamment pour pouvoir s en sortir, quitte à faire la traduction d une instruction cible en plusieurs instructions hôte. Durant ce TER, les micro-opérations ajoutées sont celles dont le besoin était évident pour les traductions à effectuer : les opérations arithmétiques et logiques de base, les chargements mémoires,... De plus, il n a été question ici que de la traduction des instructions Neon vers les instructions MMX/SSE. Le fait de considérer un plus large panel d architecture (par exemple les instructions Altivec des PowerPC, ou les instructions VIS des SparcV9), que ce soit du côté de l architecture cible, ou hôte, rajoutera sans doute des contraintes à cette recherche de l ensemble optimal. 3 Tests et résultats L environnement de tests utilisé est une machine virtuelle exécutée par Qemu, et faisant tourner Linux. La machine virtuelle simulée est un dispositif de type système embarqué, appelé Beagle Board. Ce dispositif embarque entre autres, un processeur ARM Cortex-A8, qui nous intéresse puisqu il supporte les instructions Neon. Par manque de temps, il n a pas été possible de traduire toutes les instructions prévues à la base. Il n a pas non plus été possible de faire les tests avec FFmpeg, de part la trop grande complexité de la mise en place d un environnement de tests suffisamment évolué pour faire tourner celui-ci. Le principal problème rencontré fût la cross-compilation des binaires à partir de la machine hôte, pour la machine cible. Pour une raison inconnue, la majorité de ces binaires produisent une erreur de segmentation lors de leur exécution. Cependant, un programme suffisamment simple parvient à s exécuter (il semblerait que les erreurs de segmentations surviennent lors d appels à la libc). C est ainsi qu un benchmark composé d instructions Neon a pu être exécutés sur différentes version que Qemu. Ce benchmark exécute dix millions de fois une fonction contenant la majorité des instructions Neon traduites dans le cadre du TER. Le programme en question est fourni en annexe. Voici un tableau récapitulant les temps obtenus dans les différents cas. Version de Qemu Premier temps d exécution Temps moyen d exécution Version d origine 6.60s 6.21s Version méthode s 5.84s Version méthode s 1.16s La distinction entre le premier temps d exécution et les autres est dû au fait que lors de la première exécution du programme, Qemu effectue effectivement la traduction dynamique. 11

13 3 TESTS ET RÉSULTATS Pour les exécutions suivantes, il se contente de ré-exécuter les basic blocks déjà traduits, d où la différence de temps dans les trois cas. Les deux méthodes affichent des performances meilleures que celles du Qemu d origine, avec une très nette différence pour la méthode 2. Cela était prévisible puisque pour la première méthode, le gain est celui de l appel de fonction en moins alors que pour la deuxième méthode, des instructions SIMD sont utilisées sur l architecture hôte. Pour la première méthode, le gain est de quelques dixièmes de secondes, alors que pour la deuxième, le temps d exécution est divisé par un facteur Qemu permet de dumper dans un fichier de log, les instructions générées pour la machine hôte. Pour chaque basic block, il donne leur taille et leur contenu. Voici les tailles en octets des basic blocks générés pour la fonction du benchmark : Version de Qemu Version d origine Version méthode 1 Version méthode 2 Taille du basic block 2087 octets 2199 octets 420 octets Le basic block de la méthode 1 est plus gros que celui de la version d origine. Cela est dû au fait que la version d origine ne contient que des appels de fonction, alors que la méthode 1 déroule l instruction dans le basic block lui même. Le basic block de la méthode 2 est lui quatre fois plus petit, ce qui correspond environ au gain de temps observé précédemment. Conclusion Ce TER a été l occasion de travailler sur un logiciel libre, pour chercher à optimiser une partie de celui-ci. Le but étant d optimiser la traduction des instructions Neon de l architecture ARMv7, deux méthodes sont ressorties. Une première méthode consistant à remplacer les helpers par des micro-opérations TCG déjà existantes, et la deuxième à enrichir la TCG avec des microopérations SIMD. La première méthode se veut plus simple à mettre en oeuvre puisqu il ne faut apporter des modifications qu à la partie traduction ARM vers TCG, alors que la deuxième oblige, non seulement à modifier cette partie, mais aussi la TCG en elle-même, ainsi que toutes les implémentations d architectures hôtes, pour supporter les nouvelles micro-opérations. Cependant, les gains en performance sont tels avec la deuxième solution que ce TER a démontré la viabilité de celle-ci. Il serait maintenant pertinent de faire une étude plus approfondie sur le jeu de micro-opérations SIMD à rajouter à la TCG, et ce, en prenant en compte un plus large panel d architectures, à la fois cibles, et hôtes. En étudiant les instructions SIMD de celles-ci, il faudrait en extraire le jeu de micro-opérations SIMD optimal pour la TCG. 12

14 3 TESTS ET RÉSULTATS Annexes Programme de benchmark Listing 8 Fonction assembleur du programme de benchmark. g l o b a l t e s t s i m d t e s t s i m d : vrshr. u8 q0, q0, #1 vrshr. u16 q0, q0, #2 vrshr. u32 q0, q0, #3 v s h l. u8 q0, q0, #1 v s h l. u16 q0, q0, #2 v s h l. u32 q0, q0, #3 vshr. u8 q0, q0, #1 vshr. u16 q0, q0, #2 vshr. u32 q0, q0, #3 v s h l. s8 q0, q0, #1 v s h l. s16 q0, q0, #2 v s h l. s32 q0, q0, #3 vshr. s8 q0, q0, #1 vshr. s16 q0, q0, #2 vshr. s32 q0, q0, #3 vadd. u8 q0, q1, q2 vadd. u16 q0, q1, q2 vadd. u32 q0, q1, q2 bx l r 13

15 RÉFÉRENCES Références [1] Fabrice Bellard. Qemu, a fast and portable dynamic translator. In USENIX, [2] Intel Corporation. Intel R 64 and IA-32 Architectures Software Developer s Manual, [3] Intel Corporation, Carole DuLong, Mickey Gutman, and Mike Julier. Complete Guide to Mmx Technology. McGraw-Hill Professional,

Traduction binaire dynamique de l extension SIMD

Traduction binaire dynamique de l extension SIMD Traduction binaire dynamique de l extension SIMD Néon de l ARMv7 dans Qemu Travaux d études et de recherches Ensimag - Tima SLS 25 mai 2010 Table des matières 1 Introduction 2 Tiny code generator Les helpers

Plus en détail

Instructions assembleur

Instructions assembleur Instructions assembleur 0001011011110110 0001011101101101 10001001 Instruction vue par le programmeur assembleur ou instruction élémentaire cible d'un compilateur Réalise une modification de l'état interne

Plus en détail

Machines virtuelles. Brique ASC. Samuel Tardieu sam@rfc1149.net. Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Machines virtuelles. Brique ASC. Samuel Tardieu sam@rfc1149.net. Samuel Tardieu (ENST) Machines virtuelles 1 / 40 Machines virtuelles Brique ASC Samuel Tardieu sam@rfc1149.net École Nationale Supérieure des Télécommunications Samuel Tardieu (ENST) Machines virtuelles 1 / 40 Machines virtuelles La compilation peut

Plus en détail

III - PROGRAMMATION EN ASSEMBLEUR

III - PROGRAMMATION EN ASSEMBLEUR III - PROGRAMMATION EN ASSEMBLEUR 3.1 Introduction à la programmation en assembleur Pour programmer un ordinateur on utilise généralement des langages dits évolués ou de haut niveau : C, C++, Java, Basic,

Plus en détail

Programmation assembleur : aperçu

Programmation assembleur : aperçu Assembleur : Younès EL AMRANI. 1 Programmation assembleur : aperçu Programmation en assembleur : NASM Module M14 Semestre 4 Printemps 2010 Equipe pédagogique : Younès El Amrani, Abdelhakim El Imrani, Faissal

Plus en détail

Introduction. Les performances d une machine sont liées au: 1. nombre d instructions. 2. temps de cycle horloge

Introduction. Les performances d une machine sont liées au: 1. nombre d instructions. 2. temps de cycle horloge Introduction Les performances d une machine sont liées au: 1. nombre d instructions 2. temps de cycle horloge 3. nombre de cycle horloge par instructions. C est: le compilateur et l architecture du jeu

Plus en détail

Architecture des ordinateurs

Architecture des ordinateurs Architecture des ordinateurs Cours 4 5 novembre 2012 Archi 1/22 Micro-architecture Archi 2/22 Intro Comment assembler les différents circuits vus dans les cours précédents pour fabriquer un processeur?

Plus en détail

Rappels d architecture

Rappels d architecture Assembleur Rappels d architecture Un ordinateur se compose principalement d un processeur, de mémoire. On y attache ensuite des périphériques, mais ils sont optionnels. données : disque dur, etc entrée

Plus en détail

Notions de langage machine

Notions de langage machine Notions de langage machine 18 décembre 2009 Rappels et introduction Architecture de Van Neumann : Processeur = UC + UAL Mémoire interne au processeur = les registres (soit seulement l accumulateur, soit

Plus en détail

Méthodologie de programmation en assembleur. Philippe Preux

Méthodologie de programmation en assembleur. Philippe Preux Méthodologie de programmation en assembleur Philippe Preux 24 novembre 1997 Table des matières 1 Introduction 3 2 Méthodologie 4 2.1 Méthodologie............................................. 4 2.2 Aperçu

Plus en détail

Architecture des ordinateurs TP 3

Architecture des ordinateurs TP 3 Architecture des ordinateurs ESIPE - IR1 TP 3 Objectif de cette séance L objectif de cette séance est d apprendre à utiliser la pile et à écrire des fonctions en assembleur En particulier, nous verrons

Plus en détail

Assembleur x86. Eric Cariou. Université de Pau et des Pays de l'adour Département Informatique. Eric.Cariou@univ-pau.fr

Assembleur x86. Eric Cariou. Université de Pau et des Pays de l'adour Département Informatique. Eric.Cariou@univ-pau.fr Assembleur x86 Eric Cariou Université de Pau et des Pays de l'adour Département Informatique Eric.Cariou@univ-pau.fr 1 Niveaux de programmation Du plus bas niveau (1) au plus abstrait (6) 1) Impulsions

Plus en détail

Cours 1 : La compilation

Cours 1 : La compilation /38 Interprétation des programmes Cours 1 : La compilation Yann Régis-Gianas yrg@pps.univ-paris-diderot.fr PPS - Université Denis Diderot Paris 7 2/38 Qu est-ce que la compilation? Vous avez tous déjà

Plus en détail

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION 145 NOTION DE PROGRAMMATION 1/ Complétons notre microprocesseur Nous avons, dans les leçons précédentes décrit un microprocesseur théorique, cependant il s inspire du 6800, premier microprocesseur conçu

Plus en détail

IV- Comment fonctionne un ordinateur?

IV- Comment fonctionne un ordinateur? 1 IV- Comment fonctionne un ordinateur? L ordinateur est une alliance du hardware (le matériel) et du software (les logiciels). Jusqu à présent, nous avons surtout vu l aspect «matériel», avec les interactions

Plus en détail

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C Haute Ecole d Ingénierie et de Gestion Du Canton du Vaud MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C Programmation en mode simulation 1. DOCUMENTS DE RÉFÉRENCE...

Plus en détail

Conception de circuits numériques et architecture des ordinateurs

Conception de circuits numériques et architecture des ordinateurs Conception de circuits numériques et architecture des ordinateurs Frédéric Pétrot Année universitaire 2014-2015 Structure du cours C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 Codage des nombres en base 2, logique

Plus en détail

Codage des informations le système binaire

Codage des informations le système binaire Module ASR - Architecture Codage des informations le système binaire Associer à toute information une représentation par une succession de et de : Exemples d information à coder Entiers naturels : 5, 54,

Plus en détail

Examen d Architecture des Ordinateurs Majeure 1 Polytechnique Lundi 10 Décembre 2001

Examen d Architecture des Ordinateurs Majeure 1 Polytechnique Lundi 10 Décembre 2001 Examen d Architecture des Ordinateurs Majeure 1 Polytechnique Lundi 10 Décembre 2001 L examen dure 3 heures. Le sujet comporte 7 pages dont 3 pages de rappels sur le LC-2 et la microprogrammation. Tous

Plus en détail

Optimisation de code

Optimisation de code Optimisation de code Brique ASC Samuel Tardieu sam@rfc1149.net École Nationale Supérieure des Télécommunications Samuel Tardieu (ENST) Optimisation de code 1 / 77 But L optimisation cherche à améliorer

Plus en détail

Architecture des Ordinateurs et Systèmes d Exploitation

Architecture des Ordinateurs et Systèmes d Exploitation Architecture des Ordinateurs et Systèmes d Exploitation Cours n 5 Le langage assembleur (2): Pile, Procédures. Les Interruptions 3ème année L assembleur 8086 : la pile = structure de «rangement» de données

Plus en détail

QUELQUES CONCEPTS INTRODUCTIFS

QUELQUES CONCEPTS INTRODUCTIFS ESIEE Unité d'informatique IN101 Albin Morelle (et Denis Bureau) QUELQUES CONCEPTS INTRODUCTIFS 1- ARCHITECTURE ET FONCTIONNEMENT D UN ORDINATEUR Processeur Mémoire centrale Clavier Unité d échange BUS

Plus en détail

Cours 7 : fonctions recursives, arithmétique binaire, flottants 1

Cours 7 : fonctions recursives, arithmétique binaire, flottants 1 Cours 7 : fonctions recursives, arithmétique binaire, flottants 1 Les types énumérés On peut aussi définir des types qui ont un nombre fini de valeurs (ex: jours de la semaine, couleurs primaires, etc.)

Plus en détail

Arithmétique binaire. Chapitre. 5.1 Notions. 5.1.1 Bit. 5.1.2 Mot

Arithmétique binaire. Chapitre. 5.1 Notions. 5.1.1 Bit. 5.1.2 Mot Chapitre 5 Arithmétique binaire L es codes sont manipulés au quotidien sans qu on s en rende compte, et leur compréhension est quasi instinctive. Le seul fait de lire fait appel au codage alphabétique,

Plus en détail

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique

Plus en détail

Compilation (INF 564)

Compilation (INF 564) Présentation du cours Le processeur MIPS Programmation du MIPS 1 Compilation (INF 564) Introduction & architecture MIPS François Pottier 10 décembre 2014 Présentation du cours Le processeur MIPS Programmation

Plus en détail

1 Architecture du cœur ARM Cortex M3. Le cœur ARM Cortex M3 sera présenté en classe à partir des éléments suivants :

1 Architecture du cœur ARM Cortex M3. Le cœur ARM Cortex M3 sera présenté en classe à partir des éléments suivants : GIF-3002 SMI et Architecture du microprocesseur Ce cours discute de l impact du design du microprocesseur sur le système entier. Il présente d abord l architecture du cœur ARM Cortex M3. Ensuite, le cours

Plus en détail

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

Exécution des instructions machine

Exécution des instructions machine Exécution des instructions machine Eduardo Sanchez EPFL Exemple: le processeur MIPS add a, b, c a = b + c type d'opération (mnémonique) destination du résultat lw a, addr opérandes sources a = mem[addr]

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

Représentation d un entier en base b

Représentation d un entier en base b Représentation d un entier en base b 13 octobre 2012 1 Prérequis Les bases de la programmation en langage sont supposées avoir été travaillées L écriture en base b d un entier est ainsi défini à partir

Plus en détail

Programmation C. Apprendre à développer des programmes simples dans le langage C

Programmation C. Apprendre à développer des programmes simples dans le langage C Programmation C Apprendre à développer des programmes simples dans le langage C Notes de cours sont disponibles sur http://astro.u-strasbg.fr/scyon/stusm (attention les majuscules sont importantes) Modalités

Plus en détail

Représentation des Nombres

Représentation des Nombres Chapitre 5 Représentation des Nombres 5. Representation des entiers 5.. Principe des représentations en base b Base L entier écrit 344 correspond a 3 mille + 4 cent + dix + 4. Plus généralement a n a n...

Plus en détail

TS214 - Compression/Décompression d une image binaire

TS214 - Compression/Décompression d une image binaire Filière Télécommunications, 2 ème année TS214 - Compression/Décompression d une image binaire De nombreux télécopieurs utilisent la recommandation T.4 Groupe 3 de l International Telecommunications Union

Plus en détail

Vers un outil d analyse de l empreinte mémoire d un code de calcul scientifique.

Vers un outil d analyse de l empreinte mémoire d un code de calcul scientifique. Vers un outil d analyse de l empreinte mémoire d un code de calcul scientifique. Ameziane NAIT ABDELAZIZ Département informatique, filière PRCD Maître de stage : Bruno LATHUILIERE Tuteur : Brice GOGLIN

Plus en détail

Licence ST Université Claude Bernard Lyon I LIF1 : Algorithmique et Programmation C Bases du langage C 1 Conclusion de la dernière fois Introduction de l algorithmique générale pour permettre de traiter

Plus en détail

Architecture des Ordinateurs IFIP - Cycle Apprentissage. Cécile Germain-Renaud

Architecture des Ordinateurs IFIP - Cycle Apprentissage. Cécile Germain-Renaud Architecture des Ordinateurs IFIP - Cycle Apprentissage Cécile Germain-Renaud 2 Chapitre 1 Introduction 1.1 Le modèle de Von Neumann L ordinateur est une machine électronique, qui traite l information

Plus en détail

Département informatique de l université d Angers

Département informatique de l université d Angers Département informatique de l université d Angers Amélioration d'un logiciel d'émulation du fonctionnement d'un microprocesseur x8 6 SCHAEFFER Florian ROUSSEAUX Billy L3 Informatique Responsable du projet:

Plus en détail

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr)

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Programmer en JAVA par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes

Plus en détail

Informatique? Numérique? L informatique est la science du traitement de l information.

Informatique? Numérique? L informatique est la science du traitement de l information. Informatique? Numérique? L informatique est la science du traitement de l information. L information est traitée par un ordinateur sous forme numérique : ce sont des valeurs discrètes. Cela signifie que,

Plus en détail

Architecture des ordinateurs

Architecture des ordinateurs Architecture des ordinateurs GTR 1999-2000 Emmanuel Viennet IUT de Villetaneuse Département GTR viennet@lipn.univ-paris13.fr Licence Copyright c 1995-2001 par Emmanuel Viennet. Ce document peut être librement

Plus en détail

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre Assembleur Faculté I&C, André Maurer, Claude Petitpierre INTRODUCTION Logiciel utilisé Faculté I&C, André Maurer, Claude Petitpierre MEMOIRE Mémoire Faculté I&C, André Maurer, Claude Petitpierre Mémoire

Plus en détail

IUT de Colmar - Département RT 1ière année. Numération

IUT de Colmar - Département RT 1ière année. Numération IUT de Colmar - Département RT 1ière année. Numération 1 Laurent MURA. SOMMAIRE 1. Les différents systèmes 2. Les différentes conversions 3. Quelques systèmes de codage 4. L arithmétique binaire 2 IUT

Plus en détail

La mémoire. Un ordinateur. L'octet. Le bit

La mémoire. Un ordinateur. L'octet. Le bit Introduction à l informatique et à la programmation Un ordinateur Un ordinateur est une machine à calculer composée de : un processeur (ou unité centrale) qui effectue les calculs une mémoire qui conserve

Plus en détail

Thème 3 Conception et vérification d architectures de systèmes sur puce

Thème 3 Conception et vérification d architectures de systèmes sur puce Thème 3 Conception et vérification d architectures de systèmes sur puce Conception et simulation Frédéric Pétrot Vérification Laurence Pierre Conception et vérification d architectures de systèmes sur

Plus en détail

Architecture des ordinateurs

Architecture des ordinateurs Architecture des ordinateurs (2 ème partie : assembleur 80x86) Vincent Vidal IUT Lens Architecture des ordinateurs p. 1 Organisation Durée : 8 semaines. Cours 1h, TP 3h Intervenants TP : Coste, Loukil,

Plus en détail

Notes de cours. Introduction

Notes de cours. Introduction Notes de cours GEI 44 : STRUCTURES DE DONNÉES ET ALGORITHMES Chapitre 5 Application des piles Introduction Piles très utilisées dans les compilateurs Voici deux exemples de composants d un compilateur

Plus en détail

ASR1 TD7 : Un microprocesseur RISC 16 bits

ASR1 TD7 : Un microprocesseur RISC 16 bits {Â Ö Ñ º ØÖ Ý,È ØÖ ºÄÓ Ù,Æ ÓÐ ºÎ ÝÖ Ø¹ ÖÚ ÐÐÓÒ} Ò ¹ÐÝÓÒº Ö ØØÔ»»Ô Ö Óº Ò ¹ÐÝÓÒº Ö» Ö Ñ º ØÖ Ý»¼ Ö½» ASR1 TD7 : Un microprocesseur RISC 16 bits 13, 20 et 27 novembre 2006 Présentation générale On choisit

Plus en détail

Listes de personnes et calculatrice polonaise inverse en Java

Listes de personnes et calculatrice polonaise inverse en Java Listes de personnes et calculatrice polonaise inverse en Java Université Paris Sud Motivation Le but de cet exercice est de manipuler les listes chaînées et les piles et de voir leur application en analyse

Plus en détail

Chapitre VI- La validation de la composition.

Chapitre VI- La validation de la composition. Chapitre VI- La validation de la composition. Objectifs du chapitre : Expliquer les conséquences de l utilisation de règles de typage souples dans SEP. Présenter le mécanisme de validation des connexions

Plus en détail

Utilisation de SystemC pour la conception des SoC

Utilisation de SystemC pour la conception des SoC Utilisation de SystemC pour la conception des SoC aniela ragomirescu 1,2, Roberto Reyna 3 1 - Université de Toulouse : INSA Toulouse, 135 Av. de Rangueil Toulouse cedex 4 2-LAAS-CNRS ; Université de Toulouse,

Plus en détail

Microprocesseur + Logiciel

Microprocesseur + Logiciel Microprocesseur + Logiciel Robot EVALBOT MOHAMED AKIL BUREAU 5253 UNITE IGI 1001 PROGRAMMATION DES MICROPROCESSEURS Présentation [IGI1001] CONTEXTE SCIENTIFIQUE... 4 1. OBJECTIFS DE L UNITE... 6 2. OBJECTIFS

Plus en détail

Introduction aux systèmes informatiques Structure d un ordinateur

Introduction aux systèmes informatiques Structure d un ordinateur Introduction aux systèmes informatiques Structure d un ordinateur Michel Salomon IUT de Belfort-Montbéliard Département d informatique Michel Salomon Intro. aux sys. info. 1 / 36 Qu est-ce qu un système

Plus en détail

Concept de machine virtuelle

Concept de machine virtuelle Concept de machine virtuelle Chap. 5: Machine virtuelle Alain Sandoz Semestre été 2007 1 Introduction: Java Virtual Machine Machine Virtuelle Java: qu est-ce que c est? c est la spécification d une machine

Plus en détail

Génération de code binaire pour application multimedia : une approche au vol

Génération de code binaire pour application multimedia : une approche au vol Génération de binaire pour application multimedia : une approche au vol http://hpbcg.org/ Henri-Pierre Charles Université de Versailles Saint-Quentin en Yvelines 3 Octobre 2009 Présentation Présentation

Plus en détail

Tableaux (introduction) et types de base

Tableaux (introduction) et types de base Tableaux (introduction) et types de base A. Motivation..................................................... 4 B. Les tableaux.................................................... 5 C. Construction des tableaux.......................................

Plus en détail

Le langage Java - Syntaxe

Le langage Java - Syntaxe Le langage Java - Syntaxe LES BASES: litéraux, types, expressions, instructions LE LANGAGE JAVA - SYNTAXE LES COMMENTAIRES LES IDENTIFICATEURS LISTES DES MOTS RÉSERVÉS: LES LITÉRAUX BOOLÉENS LA DÉCLARATION

Plus en détail

Conception et microprocesseurs

Conception et microprocesseurs Electronique embarquée Conception et microprocesseurs Richard Grisel Professeur des Universités Université de Rouen Conception et microprocesseurs Architectures et composants: Logiciel; Matériel. Test

Plus en détail

Traduction des Langages : Le Compilateur Micro Java

Traduction des Langages : Le Compilateur Micro Java BARABZAN Jean-René OUAHAB Karim TUCITO David 2A IMA Traduction des Langages : Le Compilateur Micro Java µ Page 1 Introduction Le but de ce projet est d écrire en JAVA un compilateur Micro-Java générant

Plus en détail

Partie 7 : Gestion de la mémoire

Partie 7 : Gestion de la mémoire INF3600+INF2610 Automne 2006 Partie 7 : Gestion de la mémoire Exercice 1 : Considérez un système disposant de 16 MO de mémoire physique réservée aux processus utilisateur. La mémoire est composée de cases

Plus en détail

Techniques de compilation

Techniques de compilation Département d Informatique Université de Nice Sophia Antipolis Master 1 Informatique Techniques de compilation XI. Générateurs de générateurs de code Jacques Farré email : Jacques.Farre@unice.fr 1 Introduction

Plus en détail

Recompilation dynamique de codes binaires hostiles

Recompilation dynamique de codes binaires hostiles Recompilation dynamique de codes binaires hostiles Sébastien Josse DGA Maîtrise de l Information Résumé Les malware sont de plus en plus difficiles à analyser, par utilisation des outils conventionnels

Plus en détail

Gestion Mémoire. Informatique Embarquée M2 / 2014. Gestion Mémoire

Gestion Mémoire. Informatique Embarquée M2 / 2014. Gestion Mémoire Informatique Embarquée M2 / 24 24 Interaction CPU / mémoire Bus d'adresses CPU Bus de Données Bus de Contrôle 24 Architecture Von Neumann CPU contient: Instructions et Données CPU charge les instructions

Plus en détail

as Architecture des Systèmes d Information

as Architecture des Systèmes d Information Plan Plan Programmation - Introduction - Nicolas Malandain March 14, 2005 Introduction à Java 1 Introduction Présentation Caractéristiques Le langage Java 2 Types et Variables Types simples Types complexes

Plus en détail

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3. 1. Structure d un programme C Un programme est un ensemble de fonctions. La fonction "main" constitue le point d entrée pour l exécution. Un exemple simple : #include int main() { printf ( this

Plus en détail

Introduction à la Programmation Parallèle: MPI

Introduction à la Programmation Parallèle: MPI Introduction à la Programmation Parallèle: MPI Frédéric Gava et Gaétan Hains L.A.C.L Laboratoire d Algorithmique, Complexité et Logique Cours du M2 SSI option PSSR Plan 1 Modèle de programmation 2 3 4

Plus en détail

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte Projet d informatique M1BI : Compression et décompression de texte Le but de ce projet est de coder un programme réalisant de la compression et décompression de texte. On se proposera de coder deux algorithmes

Plus en détail

COMPRESSION/DECOMPRESSION D UNE IMAGE BINAIRE

COMPRESSION/DECOMPRESSION D UNE IMAGE BINAIRE Le 29 novembre 2013, Rapport projet TS114 COMPRESSION/DECOMPRESSION D UNE IMAGE BINAIRE Par Marc BELLINGER et Antoine BINON. 2eme année Télécommunications. 1 Introduction : Le but de ce projet est d implémenter

Plus en détail

Projet 1 ENS Lyon L3IF

Projet 1 ENS Lyon L3IF Projet 1 ENS Lyon L3IF Génération de code Sébastien Briais 8 janvier 2008 Dans cette partie, vous allez devoir implémenter le générateur de code pour l émulateur DLX risc-emu. À rendre pour le 18 janvier

Plus en détail

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf Introduction à Java Matthieu Herrb CNRS-LAAS http://homepages.laas.fr/matthieu/cours/java/java.pdf Mars 2014 Plan 1 Concepts 2 Éléments du langage 3 Classes et objets 4 Packages 2/28 Histoire et motivations

Plus en détail

Architecture matérielle des systèmes informatiques

Architecture matérielle des systèmes informatiques Architecture matérielle des systèmes informatiques IDEC, Renens. Version novembre 2003. Avertissement : ce support de cours n est pas destiné à l autoformation et doit impérativement être complété par

Plus en détail

Jeu d instructions NIOS II

Jeu d instructions NIOS II Jeu d instructions NIOS II 1 Formats d instructions Le processeur NIOS II a un jeu d instructions de type RISC. Il possède 32 registres de 32 bits, notés r0 à r31, avec r0 0. Les instructions sont de longueur

Plus en détail

PROJET INFORMATIQUE RECHERCHE DE SOUS-CHAÎNE DE CARACTERES

PROJET INFORMATIQUE RECHERCHE DE SOUS-CHAÎNE DE CARACTERES PROJET INFORMATIQUE RECHERCHE DE SOUS-CHAÎNE DE CARACTERES I-Présentation Un algorithme de recherche de sous-chaine est un type d'algorithme de recherche qui a pour objectif de trouver une chaîne de caractères

Plus en détail

Comment reproduire les résultats de l article : POP-Java : Parallélisme et distribution orienté objet

Comment reproduire les résultats de l article : POP-Java : Parallélisme et distribution orienté objet Comment reproduire les résultats de l article : POP-Java : Parallélisme et distribution orienté objet Beat Wolf 1, Pierre Kuonen 1, Thomas Dandekar 2 1 icosys, Haute École Spécialisée de Suisse occidentale,

Plus en détail

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE QCM Remarque : - A une question correspond au moins 1 réponse juste - Cocher la ou les bonnes réponses Barème : - Une bonne réponse = +1 - Pas de réponse = 0

Plus en détail

Cours Informatique 1. Monsieur SADOUNI Salheddine

Cours Informatique 1. Monsieur SADOUNI Salheddine Cours Informatique 1 Chapitre 2 les Systèmes Informatique Monsieur SADOUNI Salheddine Un Système Informatique lesystème Informatique est composé de deux parties : -le Matériel : constitué de l unité centrale

Plus en détail

Codage des nombres. Eric Cariou. Université de Pau et des Pays de l'adour Département Informatique. Eric.Cariou@univ-pau.fr

Codage des nombres. Eric Cariou. Université de Pau et des Pays de l'adour Département Informatique. Eric.Cariou@univ-pau.fr Codage des nombres Eric Cariou Université de Pau et des Pays de l'adour Département Informatique Eric.Cariou@univ-pau.fr 1 Représentation de l'information Un ordinateur manipule des données Besoin de coder

Plus en détail

UE Programmation Impérative Licence 2ème Année 2014 2015

UE Programmation Impérative Licence 2ème Année 2014 2015 UE Programmation Impérative Licence 2 ème Année 2014 2015 Informations pratiques Équipe Pédagogique Florence Cloppet Neilze Dorta Nicolas Loménie prenom.nom@mi.parisdescartes.fr 2 Programmation Impérative

Plus en détail

Numération. Le tableau récapitulatif ci-dessous donne l équivalence de quelques nombres pour les bases 10, 2 et 16.

Numération. Le tableau récapitulatif ci-dessous donne l équivalence de quelques nombres pour les bases 10, 2 et 16. 1. Systèmes de numération 11. Système décimal : Base 10 C est le système utilisé dans la vie courante, il est basé sur le nombre 10. Pour représenter les nombres décimaux, on utilise les chiffres de 0

Plus en détail

Ch. 1 : Bases de programmation en Visual Basic

Ch. 1 : Bases de programmation en Visual Basic Ch. 1 : Bases de programmation en Visual Basic 1 1 Variables 1.1 Définition Les variables permettent de stocker en mémoire des données. Elles sont représentées par des lettres ou des groupements de lettres

Plus en détail

Sommaire MQL4 pour les nuls

Sommaire MQL4 pour les nuls Sommaire MQL4 pour les nuls 1. Introduction 2. MetaEditor 3. Les types de données 4. Les variables 5. Expressions et opérateurs 6. Les fonctions 7. Instructions conditionnelles et boucles 8. Indentations,

Plus en détail

Première approche. Définition. Définition de l informatique donnée par l Académie Française en 1966 :

Première approche. Définition. Définition de l informatique donnée par l Académie Française en 1966 : Première approche Définition Définition de l informatique donnée par l Académie Française en 1966 : L informatique est la science du traitement rationnel, notamment par machines automatiques, de l information

Plus en détail

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping Chapitre V : La gestion de la mémoire Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping Introduction Plusieurs dizaines de processus doivent se partager

Plus en détail

Cours d initiation à la programmation en C++ Johann Cuenin

Cours d initiation à la programmation en C++ Johann Cuenin Cours d initiation à la programmation en C++ Johann Cuenin 11 octobre 2014 2 Table des matières 1 Introduction 5 2 Bases de la programmation en C++ 7 3 Les types composés 9 3.1 Les tableaux.............................

Plus en détail

Conventions d écriture et outils de mise au point

Conventions d écriture et outils de mise au point Logiciel de base Première année par alternance Responsable : Christophe Rippert Christophe.Rippert@Grenoble-INP.fr Introduction Conventions d écriture et outils de mise au point On va utiliser dans cette

Plus en détail

SSTIC 2009. Désobfuscation automatique de binaires. Alexandre Gazet. Yoann Guillot. Et autres idyles bucoliques...

SSTIC 2009. Désobfuscation automatique de binaires. Alexandre Gazet. Yoann Guillot. Et autres idyles bucoliques... Désobfuscation automatique de binaires Et autres idyles bucoliques... Alexandre Gazet Sogeti / ESEC R&D alexandre.gazet(at)sogeti.com Yoann Guillot Sogeti / ESEC R&D yoann.guillot(at)sogeti.com SSTIC 2009

Plus en détail

Assembleur i8086. Philippe Preux IUT Informatique du Littoral. Année universitaire 95 96

Assembleur i8086. Philippe Preux IUT Informatique du Littoral. Année universitaire 95 96 Assembleur i8086 Philippe Preux IUT Informatique du Littoral Année universitaire 95 96 1 Avertissement Ce document décrit le langage d assemblage étudié et utilisé dans le cadre des TP d architecture.

Plus en détail

Les ordinateurs dispositifs électroniques fonctionnant sur la principe de création, transmission et conversion d impulses électriques

Les ordinateurs dispositifs électroniques fonctionnant sur la principe de création, transmission et conversion d impulses électriques Les ordinateurs dispositifs électroniques fonctionnant sur la principe de création, transmission et conversion d impulses électriques Les informations traitées par l ordinateur (nombres, instructions,

Plus en détail

Systèmes Informatiques TD 3: langage C opérations élémentaires

Systèmes Informatiques TD 3: langage C opérations élémentaires Systèmes Informatiques TD 3: langage C opérations élémentaires P. Bakowski bako@ieee.org Opérateurs logiques/arithmétiques Le langage C offre une liste importante d opérateurs logiques et arithmétiques.

Plus en détail

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS Depuis SAS 9.2 TS2M3, SAS propose un nouveau langage de programmation permettant de créer et gérer des tables SAS : le DS2 («Data Step 2»). Ces nouveautés

Plus en détail

Cours de compilation

Cours de compilation Cours de compilation 1 Introduction Un compilateur est un logiciel de traduction d un langage source vers un langage cible. D ordinaire le langage source est un langage de programmation évolué, comme C++

Plus en détail

II. Conversions. I. Initialisation. III. Méthode point. TD Python Traitement d images MP*

II. Conversions. I. Initialisation. III. Méthode point. TD Python Traitement d images MP* Le but de ce TD est d utiliser les procédures et fonctions Python pour traiter des fichiers images. II. Conversions I. Initialisation Importer le module numpy sous l appellation np. On utilise le module

Plus en détail

Numération Page 1 sur 5

Numération Page 1 sur 5 Numération Page sur 5 Sommaire : I- Introduction II- III- IV- Différentes bases Base Base Base 6 Correspondance Conversion décimal -> binaire binaire -> décimal hexadécimal -> binaire hexadécimal -> décimal

Plus en détail

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Pierre Boudes 28 septembre 2011 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike

Plus en détail

BAZIN Danil et PRIEZ Jean-Baptiste. LEX & YACC : Calculatrice Évoluée

BAZIN Danil et PRIEZ Jean-Baptiste. LEX & YACC : Calculatrice Évoluée BAZIN Danil et PRIEZ Jean-Baptiste LEX & YACC : Calculatrice Évoluée Table des matières 1 Introduction 3 2 Description 4 3 La grammaire utilisée 6 4 Lexèmes et FLEX 8 5 Analyse syntaxique et YACC 8 5.1

Plus en détail

Types et langages de programmation. Algorithmique et Programmation Unisciel/K.Zampieri

Types et langages de programmation. Algorithmique et Programmation Unisciel/K.Zampieri Types et langages de programmation Algorithmique et Programmation Unisciel/K.Zampieri 1 Généalogie partielle des langages de programmation FORTRAN BASIC PL/1 PROLOG ALGOL60 COBOL C PASCAL ADA MODULA-2

Plus en détail

Systèmes répartis : les Remote Procedure Calls p.1/25

Systèmes répartis : les Remote Procedure Calls p.1/25 Systèmes répartis : les Remote Procedure Calls Fabrice Rossi http://apiacoa.org/contact.html. Université Paris-IX Dauphine Systèmes répartis : les Remote Procedure Calls p.1/25 Les Remote Procedure Calls

Plus en détail

SRS DAY: Problématique liée à la virtualisation

SRS DAY: Problématique liée à la virtualisation SRS DAY: Problématique liée à la virtualisation Anthony GUDUSZEIT Franck CURO gudusz_a curo_f Introduction Sommaire Définition Contexte Avantages / inconvénients Fonctionnement et problématique Techniques

Plus en détail

L utilisation d un réseau de neurones pour optimiser la gestion d un firewall

L utilisation d un réseau de neurones pour optimiser la gestion d un firewall L utilisation d un réseau de neurones pour optimiser la gestion d un firewall Réza Assadi et Karim Khattar École Polytechnique de Montréal Le 1 mai 2002 Résumé Les réseaux de neurones sont utilisés dans

Plus en détail

Machines virtuelles Cours 1 : Introduction

Machines virtuelles Cours 1 : Introduction Machines virtuelles Cours 1 : Introduction Pierre Letouzey 1 pierre.letouzey@inria.fr PPS - Université Denis Diderot Paris 7 janvier 2012 1. Merci à Y. Régis-Gianas pour les transparents Qu est-ce qu une

Plus en détail