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

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

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

ASSEMBLAGE ET ÉDITION DES LIENS

ASSEMBLAGE ET ÉDITION DES LIENS ASSEMBLAGE ET ÉDITION DES LIENS Mewtow 11 novembre 2015 Table des matières 1 Introduction 5 2 La chaine d assemblage 7 2.1 Résolution des symboles.............................. 7 2.2 Relocation.....................................

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

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

Eléments de syntaxe du langage Java

Eléments de syntaxe du langage Java c jan. 2014, v3.0 Java Eléments de syntaxe du langage Java Sébastien Jean Le but de ce document est de présenter es éléments de syntaxe du langage Java : les types primitifs, les opérateurs arithmétiques

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

Les processeurs. Les entrées-sorties

Les processeurs. Les entrées-sorties Les entrées-sorties La problématique des entrées sorties est la suivante : - Le processeur va vite, plus vite que des éléments mécaniques tel que l on trouve dans une imprimante, une souris, un clavier.

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

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

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

Types et performances des processeurs

Types et performances des processeurs Types et performances des processeurs Laboratoire de Systèmes Logiques Structure d un ordinateur contrôle processeur traitement séquenceur registres mémoire entrées/sorties micromémoire opérateurs bus

Plus en détail

La famille x86. Eduardo Sanchez Laboratoire de Systèmes Logiques. Ecole Polytechnique Fédérale de Lausanne

La famille x86. Eduardo Sanchez Laboratoire de Systèmes Logiques. Ecole Polytechnique Fédérale de Lausanne La famille x86 Laboratoire de Systèmes Logiques Désavantages de l architecture x86 Très vieille architecture: basée sur le 8080 (commercialisé en 1974, 6 000 transistors et 8 registres) Le premier 8086

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

Jeux d instructions. Les jeux d instructions

Jeux d instructions. Les jeux d instructions Jeux d instructions Daniel Etiemble de@lri.fr Les jeux d instructions Ensemble des instructions d un processeur Format d instructions Lié au modèle (n,m) Longueur fixe ou longueur variable Accès aux données

Plus en détail

Travail d étude Les techniques de protection du logiciel

Travail d étude Les techniques de protection du logiciel Travail d étude Les techniques de protection du logiciel Julien Burle Présenté par: Térence Scalabre Licence Informatique Comment et pourquoi protéger son logiciel? Tout d abord intéressons-nous aux raisons

Plus en détail

Architecture matérielle et logicielle

Architecture matérielle et logicielle Architecture matérielle et logicielle Contents I Le Cours 2 1 Généralités 2 2 Micro-processeur 2 3 Mémoire 2 4 Performances 3 II TPs 3 1 Création d un exécutable : 3 2 Les bibliothèques 3 3 Codage de l

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

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 de Processeur

Architecture de Processeur Mise à jour: Février 2012 Architecture et Programmation [Archi/Lycée] Architecture logicielle Applications 2 Nicolas Bredèche Maître de Conférences Université Paris-Sud bredeche@lri.fr Ressources bibliographiques

Plus en détail

Programmation assembleur sur l architecture x86

Programmation assembleur sur l architecture x86 Mini-projet système : développement d un noyau de système d exploitation Responsable : Christophe Rippert Christophe.Rippert@Grenoble-INP.fr Introduction Programmation assembleur sur l architecture x86

Plus en détail

ARCHITECTURE DES ORDINATEURS Corrigé Examen Décembre 2011 3H Tous documents autorisés Les questions sont indépendantes

ARCHITECTURE DES ORDINATEURS Corrigé Examen Décembre 2011 3H Tous documents autorisés Les questions sont indépendantes On utilise le jeu d instructions ARM. ARCHITECTURE DES ORDINATEURS Corrigé Examen Décembre 2011 3H Tous documents autorisés Les questions sont indépendantes PROGRAMMATION ASSEMBLEUR PREMIERE PARTIE Soit

Plus en détail

Projet de Machines Virtuelles

Projet de Machines Virtuelles Projet de Machines Virtuelles Gabriel Kerneis Vendredi 11 mars 2011 1 Introduction Le but de ce sujet est d implémenter la MARS (Memory Array Redcode Simulator), une machine virtuelle utilisée dans le

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

Qemu : Visite au cœur de l émulateur

Qemu : Visite au cœur de l émulateur Qemu : Visite au cœur de l émulateur Yvan Roch Les machines virtuelles, par leurs avantages et grâce aux progrès des processeurs, sont devenues un domaine très en vogue actuellement même si leurs débuts

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

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

Chargement de processus Allocation contigüe Allocation fragmentée Gestion de pages. Gestion mémoire. Julien Forget

Chargement de processus Allocation contigüe Allocation fragmentée Gestion de pages. Gestion mémoire. Julien Forget Julien Forget Université Lille 1 École Polytechnique Universitaire de Lille Cité Scientifique 59655 Villeneuve d Ascq GIS 3 2011-2012 1 / 46 Rôle du gestionnaire de mémoire Le gestionnaire de mémoire a

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

Architecture des ordinateurs TD 1

Architecture des ordinateurs TD 1 Architecture des ordinateurs TD 1 ENSIMAG 1 re année April 29, 2008 Imprimer pour chaque étudiant le listing des instructions (page 36 de la doc, ou page 2 du chapitre 7). Pas la peine de tout imprimer.

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

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

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

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

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

Clément MILVILLE / Edouard SIMON. Projet CodeWar. Enseignant tuteur: Michaël Hauspie 1/17

Clément MILVILLE / Edouard SIMON. Projet CodeWar. Enseignant tuteur: Michaël Hauspie 1/17 Projet CodeWar Enseignant tuteur: Michaël Hauspie 1/17 2/17 Remerciements: Nous tenons à remercier tout particulièrement notre tuteur M. Michaël HAUSPIE pour son aide, ses conseils, ses avis et sa disponibilité

Plus en détail

Claude Delannoy. Exercices C++ en langage. 3 e édition. Groupe Eyrolles, 1997, 1999, 2007, ISBN : 978-2-212-12201-5

Claude Delannoy. Exercices C++ en langage. 3 e édition. Groupe Eyrolles, 1997, 1999, 2007, ISBN : 978-2-212-12201-5 Claude Delannoy Exercices en langage C++ 3 e édition Groupe Eyrolles, 1997, 1999, 2007, ISBN : 978-2-212-12201-5 Chapitre 3 Les fonctions Rappels Généralités Une fonction est un bloc d instructions éventuellement

Plus en détail

De l ordinateur au processus : rôle d un système

De l ordinateur au processus : rôle d un système De l ordinateur au processus : rôle d un système Introduction aux systèmes d exploitation Gaël Thomas Présentation du cours Contexte du cours : Introduire notre objet d étude : les systèmes d exploitation

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

Introduction. Chapitre 1. 1.1 Pourquoi Java?

Introduction. Chapitre 1. 1.1 Pourquoi Java? Chapitre 1 Introduction Nos objectifs pédagogiques sont : 1. Étudier les concepts de base de la programmation dans les langages de haut-niveau, de manière à : les appliquer en Java, comprendre des concepts

Plus en détail

Analyse de la démographie des objets dans les systèmes Java temps-réel

Analyse de la démographie des objets dans les systèmes Java temps-réel Analyse de la démographie des objets dans les systèmes Java temps-réel Nicolas BERTHIER Laboratoire VERIMAG Responsables du stage : Christophe RIPPERT et Guillaume SALAGNAC le 29 septembre 26 1 Introduction

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

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

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

Introduction à l Informatique

Introduction à l Informatique Introduction à l Informatique. Généralités : Etymologiquement, le mot informatique veut dire «traitement d information». Ceci signifie que l ordinateur n est capable de fonctionner que s il y a apport

Plus en détail

Virtualisation de la mémoire du microprocesseur

Virtualisation de la mémoire du microprocesseur Master d informatique 1 re année Module d architecture des systèmes d exploitation Virtualisation de la mémoire du microprocesseur Simon DUQUENNOY Gilles GRIMAUD Philippe MARQUET Novembre 2009 Ce document

Plus en détail

Environnement algorithmique et conventions

Environnement algorithmique et conventions 1 Environnement algorithmique et conventions Un algorithme est un maillon de la chaîne de développement d une application. Il est le lien indispensable entre l analyse et le développement final. Ce chapitre

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

Objectifs. Architecture des Ordinateurs Partie III : Liens avec le système d exploitation. Au sommaire... Schéma général d un compilateur (1/8)

Objectifs. Architecture des Ordinateurs Partie III : Liens avec le système d exploitation. Au sommaire... Schéma général d un compilateur (1/8) Architecture des Ordinateurs Partie III : Liens avec le système d exploitation 2. Génération de code David Simplot simplot@fil.univ-lille1.fr Objectifs Voir la génération de code ainsi que les mécanismes

Plus en détail

Conception et Développement Orientés Objets Cours 1 : Introduction. 2 Les paradigmes de programmation. 3 Les concepts de la programmation objet

Conception et Développement Orientés Objets Cours 1 : Introduction. 2 Les paradigmes de programmation. 3 Les concepts de la programmation objet CNAM UV 19357 Année 2003-2004 David Delahaye David.Delahaye@cnam.fr Conception et Développement Orientés Objets Cours 1 : Introduction 1 Présentation de la valeur Ce cours s adresse à toute personne ayant

Plus en détail

Unité d enseignement Systèmes d exploitation Unix : Mise en œuvre du noyau Unix 1-ière Année Informatique et Mathématiques Appliquées

Unité d enseignement Systèmes d exploitation Unix : Mise en œuvre du noyau Unix 1-ière Année Informatique et Mathématiques Appliquées Unité d enseignement Systèmes d exploitation Unix : Mise en œuvre du noyau Unix 1-ière Année Informatique et Mathématiques Appliquées 1 Présentation générale TD-TP : Mémoire virtuelle 21 mai 2013 Le système

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 au codage de l information:

Introduction au codage de l information: Introduction au codage de l information: Quelques éléments d architecture de l ordinateur Comparaison de la carte perforée au DVD Pourquoi est-il nécessaire de coder l information? Numérisation Formats

Plus en détail

Contrôle Architecture des microprocesseurs Durée 2 heures

Contrôle Architecture des microprocesseurs Durée 2 heures Contrôle Architecture des microprocesseurs Durée 2 heures Tous les documents personnels (cours, TD, TP) sont autorisés. La machine à calculer est autorisée. La qualité de la présentation sera prise en

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

Introduction à l architecture ARM. GIF-1001 Ordinateurs: Structure et Applications, Hiver 2015 Jean-François Lalonde

Introduction à l architecture ARM. GIF-1001 Ordinateurs: Structure et Applications, Hiver 2015 Jean-François Lalonde Introduction à l architecture ARM GIF-1001 Ordinateurs: Structure et Applications, Hiver 2015 Jean-François Lalonde Aujourd hui Rappel: TP1: dû mardi prochain atelier: TP1 + micro-instructions Processeurs

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

DS Architecture des Ordinateurs

DS Architecture des Ordinateurs 3IF - Architecture des ordinateurs - DS 2015 page 1/9 NOM, Prénom : DS Architecture des Ordinateurs 21/05/2015 Durée 1h30. Répondez sur le sujet. REMPLISSEZ VOTRE NOM TOUT DE SUITE. Tous documents autorisés,

Plus en détail

Mémoire virtuelle. Généralités

Mémoire virtuelle. Généralités Mémoire virtuelle Généralités La pagination pure - Conversion d adresses virtuelles en adresses physiques - Table des pages à plusieurs niveau et table inversée - Algorithmes de remplacement de page -

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

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

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

Développement nomade :

Développement nomade : nomade : Architectures - Sylvain Jubertie - Université d Orléans 2011-2012 Sylvain Jubertie - Université d Orléans nomade 1 / 30 Plan 1 Architectures 2 3 Sylvain Jubertie - Université d Orléans nomade

Plus en détail

Gestion de la Mémoire 1 ère partie: Point de vue processeur. Chapitre 5

Gestion de la Mémoire 1 ère partie: Point de vue processeur. Chapitre 5 Gestion de la Mémoire 1 ère partie: Point de vue processeur Chapitre 5 Présentation La mémoire peut être adressée de 3 points de vue Point de vue processeur Comment le processeur adresse la mémoire physique

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

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

Mieux programmer en Java

Mieux programmer en Java Mieux programmer en Java Peter Haggar Éditions Eyrolles ISBN : 2-212-09171-0 2000 PARTIE 1 l exécution de l instruction return, cependant, le contrôle est transféré au bloc finally en // 2. Cela provoque

Plus en détail

Examen UE INF241 : Introduction aux Architectures Logicielles et Matérielles

Examen UE INF241 : Introduction aux Architectures Logicielles et Matérielles UNIVERSITE Joseph FOURIER, Grenoble Licence de Sciences et technologie - Parcours MIN, INF, BIN et MIN international Examen UE INF241 : Introduction aux Architectures Logicielles et Matérielles Première

Plus en détail

Introduction à la Programmation Objet : Premiers pas en programmation

Introduction à la Programmation Objet : Premiers pas en programmation Introduction à la Programmation Objet : Premiers pas en programmation Laboratoire d Intelligence Artificielle Faculté I&C IPO Cours 2 : Premiers pas en programmation 1 / 67 Objectifs du cours d aujourd

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

Tableau à une dimension. Exemple. Utilisation de constantes en assembleur

Tableau à une dimension. Exemple. Utilisation de constantes en assembleur Les tableaux en langage d assemblage Introduction Nous avons vu comment sont gérés les variables possédant des types élémentaires : entier signés ou non, caractères Un tableau!en langage de haut niveau:

Plus en détail

ELECTRONIQUE INDUSTRIELLE (243.06) OPTION ÉLECTRODYNAMIQUE Principe des micro-ordinateur (243-834-92) Présenté par Steve Dionne.

ELECTRONIQUE INDUSTRIELLE (243.06) OPTION ÉLECTRODYNAMIQUE Principe des micro-ordinateur (243-834-92) Présenté par Steve Dionne. ELECTRONIQUE INDUSTRIELLE (243.06) OPTION ÉLECTRODYNAMIQUE Principe des micro-ordinateur (243-834-92) Présenté par Steve Dionne À Mario Michaud Remis le 10 septembre automne 2002 Table des matière : Description

Plus en détail

Programmation en assembleur

Programmation en assembleur Programmation en assembleur Architecture des Ordinateurs Module M14 Semestre 4 Printemps 2008 Coordinateur du module M14: Younès EL Amrani Formats d'opérandes en assembleur IA32 Modes d'adressage Type

Plus en détail

Architecture des calculateurs

Architecture des calculateurs Chapitre 1 Architecture des calculateurs 1.1 Introduction Ce paragraphe n a pas la prétention de présenter un cours d informatique. D une manière générale, seuls les caractéristiques architecturales qui

Plus en détail

Workshop CAS et évaluation d expressions. Raphaël Shugo Boissel (boisse_r)

Workshop CAS et évaluation d expressions. Raphaël Shugo Boissel (boisse_r) Workshop CAS et évaluation d expressions Raphaël Shugo Boissel (boisse_r) 23 Novembre 2013 1 Présentation du workshop.................... 2 1.1 Définition du cas..................... 2 1.2 Définition de

Plus en détail

Les Microprocesseurs partie2

Les Microprocesseurs partie2 Université Constantine 2 Abdelhamid Mehri Faculté des NTIC Département MI Electronique des Composants & Systèmes Les Microprocesseurs partie2 Cours de L1 - TRONC COMMUN DOMAINE MATHEMATIQUES INFORMATIQUE

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

Le langage Forth. Brique ROSE. Samuel Tardieu sam@rfc1149.net. École Nationale Supérieure des Télécommunications

Le langage Forth. Brique ROSE. Samuel Tardieu sam@rfc1149.net. École Nationale Supérieure des Télécommunications Le langage Forth Brique ROSE Samuel Tardieu sam@rfc1149.net École Nationale Supérieure des Télécommunications Samuel Tardieu (ENST) Le langage Forth 1 / 26 Qu est-ce que Forth? Langage sans syntaxe Mots

Plus en détail

Processus de compilation Préprocesseur Compilation Assemblage Edition de liens. ASR Période 2. Sylvain Jubertie. Département Informatique IUT Orléans

Processus de compilation Préprocesseur Compilation Assemblage Edition de liens. ASR Période 2. Sylvain Jubertie. Département Informatique IUT Orléans ASR Période 2 Sylvain Jubertie Département Informatique IUT Orléans 1 Processus de compilation 2 Préprocesseur 3 Compilation 4 Assemblage 5 Edition de liens Prérequis Prérequis langage C langage assembleur

Plus en détail

Chapitre 3 : Pointeurs et références

Chapitre 3 : Pointeurs et références p. 1/18 Chapitre 3 : Pointeurs et références Notion de pointeur L adresse d une variable est une valeur. On peut donc la stocker dans une variable. Un pointeur est une variable qui contient l adresse d

Plus en détail

Assembleur x86. P. Ezéquel

Assembleur x86. P. Ezéquel Assembleur x86 P. Ezéquel 1 TABLE DES MATIÈRES 2 Table des matières 1 Introduction 3 2 Anatomie du x86 3 2.1 Registres généraux.......................... 4 2.2 Registres de base de segments....................

Plus en détail

Chap. I : Architecture de base d un ordinateur

Chap. I : Architecture de base d un ordinateur UMR 7030 - Université Paris 13 - Institut Galilée Cours Architecture et Système Dans cette partie, nous décrivons rapidement l architecture de base d un ordinateur et les principes de son fonctionnement.

Plus en détail

2001-2002. UFR Mathématiques de la Décision. Première Année de DEUG Sciences et Technologie mention MASS. Informatique. Volume I.

2001-2002. UFR Mathématiques de la Décision. Première Année de DEUG Sciences et Technologie mention MASS. Informatique. Volume I. 2001-2002 UFR Mathématiques de la Décision Première Année de DEUG Sciences et Technologie mention MASS Informatique Volume I Fabrice Rossi c Fabrice Rossi, 1997-2002 Conditions de distribution et de copie

Plus en détail

Projet Pratique de INF241 Parcours de Tableaux

Projet Pratique de INF241 Parcours de Tableaux Projet Pratique de INF241 Parcours de Tableaux L objectif de ce projet est de travailler sur les tableaux en langage d assemblage ARM. Vous devez réaliser votre projet en partie lors des séances encadrées

Plus en détail

Cours 6 : Principes de la représentation des nombres en

Cours 6 : Principes de la représentation des nombres en Cours 6 : Principes de la représentation des nombres en mémoire 2013/2014 Introduction Représentation des données en mémoire naturels signés Nous décrivons les principes de la représentation des nombres

Plus en détail

LE BIOS : QU EST-CE QUE C EST?

LE BIOS : QU EST-CE QUE C EST? LE BIOS : QU EST-CE QUE C EST? Mewtow 29 octobre 2015 Table des matières 1 Introduction 5 2 Rappels sur le mode réel des processeurs x86 7 2.1 Mémoire en mode réel............................... 7 2.1.1

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

Cours architectures des ordinateurs

Cours architectures des ordinateurs Université KASDI MERBAH Ouargla Faculté des Nouvelles Technologies de l Information et de la Communication Département d Informatique et Technologie de l information Cours architectures des ordinateurs

Plus en détail

Stockage et mémoire, Du principe vers la réalité

Stockage et mémoire, Du principe vers la réalité Stockage et mémoire, Du principe vers la réalité Responsable :Thomas Robert C234-4 thomas.robert@telecom-paristech.fr Intervenants :Tamy Boubekeur, Guillaume Duc, Gérard Mouret, Thomas Robert Institut

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

Quelques éléments de compilation en C et makefiles

Quelques éléments de compilation en C et makefiles Quelques éléments de compilation en C et makefiles Guillaume Feuillade 1 Compiler un programme C Le principe de la compilation consiste à passer d un ensemble de fichiers de code à un programme exécutable

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

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

Algorithmique Partie 1

Algorithmique Partie 1 Algorithmique Partie 1 IUT Informatique de Lens, 1ère Année Université d Artois Frédéric Koriche koriche@cril.fr 2011 - Semestre 1 Modalités Sommaire 1 Modalités 2 Programmation 3 Données 4 Opérateurs

Plus en détail

Introduction à la Programmation Sylvain Tisserant

Introduction à la Programmation Sylvain Tisserant INFO 1 Introduction à la Programmation Sylvain Tisserant Mes coordonnées Enseignant-Chercheur Professeur au département IRM depuis sa création (ES2I, ESIL, Polytech Marseille) Directeur du département

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

Sommaire. Introduction à la compilation. Notion de compilation. Notion de compilation. Notion de compilation. Notion de compilation

Sommaire. Introduction à la compilation. Notion de compilation. Notion de compilation. Notion de compilation. Notion de compilation Introduction à la compilation A. DARGHAM Faculté des Sciences Oujda Sommaire Environnement d un compilateur Schéma global d un compilateur Caractéristiques d un bon compilateur Définition Un compilateur

Plus en détail

édition revue et corrigée avec Java SE 7 7 1 Les bases 11 Compiler un programme Java 13 Exécuter un programme Java 14 Définir le chemin de classe 15

édition revue et corrigée avec Java SE 7 7 1 Les bases 11 Compiler un programme Java 13 Exécuter un programme Java 14 Définir le chemin de classe 15 Table des matières Au sujet de l auteur 1 Introduction 3 édition revue et corrigée avec Java SE 7 7 1 Les bases 11 Compiler un programme Java 13 Exécuter un programme Java 14 Définir le chemin de classe

Plus en détail