Introduction à la programmation massivement parallèle

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

Download "Introduction à la programmation massivement parallèle"

Transcription

1 Introduction à la programmation massivement parallèle L exemple d opencl F. Sailhan CNAM, département informatique November 21, 2014

2 Plan 1 Introduction 2 Notions de base sur le parallélisme Architecture 3 OpenCL Modèles Modèle d éxécution Mon premier Programme Premier bilan Deuxième Programme 4 Conclusion F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

3 Pourquoi étudier la programmation parallèle? Les contres 1 Les performances d un même logiciel s améliorent à chaque nouvelle génération de processeur, 2 Nous sommes habitués à la programmation séquentielle, 3 La programmation parallèle, ce n est pas nouveaux et pourtant, peu d applications l utilisent... 4 Depuis 2003, le multi coeur... 5 Les data centers, le Facebook Data Center on April 19, 2012 in Forest City, North Carolina. F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

4 Pourquoi étudier la programmation parallèle? Oui mais... 1 Cette cadence se ralentit en 2003 : la consommation d énergie et la dissipation de chaleur limitent la fréquence des horloges, 2 Plus besoin d ordinateurs coûteux... : la programmation devient parallèle avec le multi-coeur, massivement parallèle avec les GPU (Graphic Processing Units) Exigence temps réelles (toucher l écran d un smartphone) 20 capteurs par smartphone (caméras, microphones), systèmes embarqués (voitures) Résolution plus poussée (20 fois plus de pixels) accélération CPU impossible à moins de vider la batterie F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

5 Pourquoi étudier la programmation parallèle? F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

6 To be or not to be? CPU or GPU? la fausse question 4 multi-coeurs optimisés pour une exécution séquentielle 1 Une logique de contrôle sophistiquée au service de l éxecution parrallèle d un seul thread 2 Large mémoire cache avec accès réduit aux intructions + données GPU = pleins de multi-processeurs = parallélisation massive 1 Mémoire globable: DRAM DRAM de carte mère bande passante GPU et mémoire globale = 20 fois plus rapide qu avec la DRAM de la carte mère. Chip G80: 8GB/s DRAM-CPU et 86,4GB DRAM-GPU. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

7 L histoire des GPUs En 3 mots Années : les fonctionalités graphiques sont pipelinées au niveau hardware. Elles sont configurables mais pas programmables Années 2000: Nvidia développe le compilateur CUDA C, C++, les librairies à destination des programmeurs, Consortium Kronos crée pour développer d un standard ouvert (middleware + langage), cross-plateforme F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

8 Standards ouverts spécifiés par le groupe Khronos Khronos connecting software to silicon, OpenCL = API de calcul que nous verrons OpenGL = API graphique WebGL et WebCL = API pour l accélération graphique et accélération des calculs pour le Web (dans les navigateurs) Collada: exchange d information 3D entre applications OpenGL ES : API graphique pour les systèmes embarqués (smartphones, display, automobile) Stream input = API pour l interaction avec les capteurs générant des flux, combiner les flus OpenKcam : fusion (caméra) et contrôle (actuator) F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

9 Parallélisme : taxonomie de Michael J. Flynn Classification basée sur la concurrence des flux d instructions & données Flux d instructions = ensemble d instructions formant un processus Flux de données = données sur lesquelles le processus opère Single Instruction, Single Data stream (SISD): système séquentiel : 1 flux d instructions opère sur 1 donnée Single Instruction, Multiple Data streams (SIMD): 1 instruction diffusée à plusieurs unités de calcul ;chacune opère la même instruction sur différentes données Multiple Instruction, Single Data stream (MISD): plusieurs flux d instructions opèrent sur le même flux de données Multiple Instruction, Multiple Data streams (MIMD): plusieurs unités de calculs opèrent sur plusieurs flux de données au moyen de plusieurs flux d instructions F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

10 Parallélisme MISD, MIMD : 2 modèles mémoire Par mémoire distribuées # processeurs (spécialisés ou non) sont connectés à la mémoire via un réseau haut débit (Myrinet, Infiniband, 10Gbit Ethernet), mémoire Exemple : cluster de serveurs, MPP (Massively Parallel Processor) cf la liste des plus puissants : Chaque processeur dispose de son propre espace d adressage Inconvénient : transfert lent comparé à un accès locale en mémoire adapté aux applications peu communicantes Par mémoire partagée 1 tous les processeurs partagent le même espace d adressage et communiquent entre eux par lecture/écriture dans la mémoire partagée F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

11 Parallélisme MIMD : 2 modèles mémoire Par mémoire distribuées Les interactions se font par passage de message entre les processeurs Inconvénient : portage difficile d un programme séquentiel Exemple: langage MPI (Message Passing Interface) utilisé pour des clusters distribués (jusqu à noeuds) Par mémoire partagée 1 Cohérence forte quelques centaines de noeuds Exemple : Open MP (Open Multi-processing) 2 Cohérence relaxée : une mémoire partagée de petite taille Exemple : Cuda, Opencl F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

12 Parallélisme logiciel La parallélisation consiste à: 1 Analyser des dépendances au niveau des structures de données et des processus 2 Déterminer le meilleure algorithme/framework pour exécuter le code 3 Réecrire du code avec un framework tel que Message Passing Interface (MPI) ou OpenCL Parrallélisme des données Les sections de programme sont caractérisées par un parallélisme important des données ce qui permet d effectuer des opérations arithmétiques en parallèle sans danger F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

13 Parallélisme logiciel - Performances Lois des % du code est parallélisable,90 % du code est séquentiel, Idée : en terme de temps d éxécution, nous passons la plupart du temps dans les 10% du code Evaluation du bénéfice : loi d Amdahl S = 1 (1 P)+ P N N : nombre de processeurs, P : fraction du temps pris par la portion de code parallélisable S : rapidité F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

14 Parallélisme de contrôle - Parallélisme de données for(i=0;i<n;i++) { resulta = taska(i); resultb = taskb(i); resultc = taskc(i); } Parallélisme de données Les données sont partionnées Exemple: chaque processeur gère N/3 itérations de la boucle Avantage : plusieurs processeurs exécutent le même programme et finissent en même temps Parallélisme de contrôle Chaque processeur exécute une tâche de la boucle Inconvénient: désynchronisation Solution: partage équitable de la charge (gestion d une queue des F. Sailhan (CNAM, tâches département à assigner informatique) sur Introduction les processeur) à la programmation massivement parallèle November 21, / 54

15 1 Introduction 2 Notions de base sur le parallélisme Architecture 3 OpenCL Modèles Modèle d éxécution Mon premier Programme Premier bilan Deuxième Programme 4 Conclusion F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

16 Architecture GPU Grappes de multi-processeurs partageant un cache d instructions et la même logique de contrôle Chaque multi-processeur dispose d une unité MAD (Multiply-Add) et (Add-Multiply) et de fonctions particulières (exemple la racine carrée) Chaque multi-processeur exécute un parallélisme massif (plusieurs milliers de threads). Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

17 Exemple d architecture: Kepler GK100 de NVIDIA Dernière génération (2014) : Kepler = Fermi * 2 = 1536KB de cache L2 partagé par 15 SMX = 15 clusters contenant chacun 4 schedulers de 32 threads Chaque SMX dispose de 64KB (mémoire partagée + cache L1) + cache (read only) de F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

18 Exemple d architecture: Kepler GK100 Chaque thread a accès à 255 registres + les mémoires hierarchisées Opération atomiques (add, min, mac, compare and swap) Nouveauté : parallélisme dynamique = récursivité permise = planification à la F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

19 OpenCL (Open Computing Language) Definition a framework suited for parallel programming of heterogeneous systems Objectifs Utiliser toutes les ressources : à la fois CPU multi-coeurs et GPU : même code exécutable sur CPU/GPU (minus quelques optimisations) la parallélisation des tâches et des données Un modèle de programmation haut niveau basé sur le C Cross-platform, cross-vendeur, cross-os (android,...) API pour accéder à la plateforme : abstraction du matériel (mémoire, GPU ect...) API pour l exécution : exécution transparente des threads, gestion transparente des queues, des ressources mémoires F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

20 Modélisation de la mémoire Un modèle facilement retransposable sur les architectures matérielles. Celui de Cuda est casiment similaire. F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

21 Modélisation de la mémoire Mémoire privée : chaque work-item dispose d une mémoire privée qui est la plus rapide d accès, sans primitive de synchronisation, et est allouée/partitionnée à la compilation pour ledit kernel et ladite carte : sa taille est inconnue Mémoire locale : Mémoire partagée par tout un work group : chaque workitem du même work group peut y accéder. Générallement sur ship Mémoire globale accessible par tous les workgroup, est non synchronisée, possiblement constant (c-a-d en lecture seule) : mémoire la plus large (GB), Mémoire globale de l hôte la plus lente d accès mais la plus conséquente. Mémoire à éviter (temps de chargement important : mieux vaut garder le maximum possible, le plus longtemps possible sur le GPU) F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

22 Accès à la mémoire Espace d adressage: private (au work-item), local (workitems d un même workgoup), global (accessible par tous les workitems de tous les work groups), constante (read only pour la mémoire globale) Gestion explicite de la mémoire: les types de mémoire doivent être explicitement définis au niveau du code en raison du manque de mémoire des transbordements dont le coût diffère suivant le type de mémoire Modèle relaxé d accès à une mémoire partagée La vision d un work-item n est pas toujours celle des autres Nécessité de ce synchroniser avec des barrières. Exemple: attendre que tous les work-items aient écris avant de lire. Cette synchronisation est très coûteuse. F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

23 Vocabulaire Definition host = le système de calcul = CPU (Central Processing Unit) traditionnel équipé de nombreux arithmetic execution units. device = GPU Un programmeur définie des fonctions devant s éxécuter sur le device. Chaque fonction est appelée un kernel Organisation du programme Un programme OpenCL est divisé en deux parties : une partie s exécute sur l hôte (partie non parrallélisée) Une partie s éxécutant sur le GPU (partie parallélisée) F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

24 Modèle d exécution F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

25 Modèle d exécution Work-item: équivalent d un thread (= plus petite entité d exécution). L exécution d un kernel se fait sur un ensemble de work-items dont le nombre est paramétré par le développeur. Chaque work-item exécute le même code. Chaque work item est identifié (ID), Work-group: ensemble de work-items coopérant ensemble au sein d un work-groups. Reflète l organisation des work-items en grille de 1, 2, 3 dimensions. Est identifié par un ID ND-Range : niveau d organisation des work-groups = 1, 2 ou 3 dimensions F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

26 Premier programme Objectif : ajouter deux vecteurs 1 Développer une fonction=kernel appelée vector add qui ajoute deux vecteurs. Cette fonction est placée un fichier appelé vecteur.cl. 2 Développer toute le code permettant de lancer en parallèle les threads permettant d ajouter les deux vecteurs. Placer ce code dans un fichier vecteur.c. 3 Compiler + exécuter Consulter : F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

27 Kernel ajoutant deux vecteurs kernel void vector_add( global const float* src_a, global const float* src_b, global float* res, const int num) { } 2 vecteurs en entrées src a src b, un résultat res, #threads s exécutent. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

28 Kernel ajoutant deux vecteurs kernel void vector_add( global const float* src_a, global const float* src_b, global float* res, const int num) { const int idx = get_global_id(0); if (idx < num) { res[idx] = src_a[idx] + src_b[idx]; } } 2 vecteurs en entrées src a src b, un résultat res, #threads s exécutent get local id renvoie l identifiant du workitem s exécutant F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

29 Kernel - Développement Le language utilisé est basé sur l ANSI C99. Lors du développement d un kernel 3 aspects sont à considérer : 1 Il faut déterminer lors du passage des arguments le type de mémoire utilisé, c est à dire de l espace d adressage qui est soit : global : espace d adressage global constant : région de la mémoire en lecture seulement local : mémoire partagée par le work-group. private: mémoire du work-item. 2 Attention: chaque type d adressage est distinct, ce qui signifie que tous les mouvements de données doivent être explicites. 3 Les méthodes fournissant un accès au domaine de calcul F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

30 Premier programme : programmation de l hôte (host) Vous devez impérativement consulter la spécification du language très bien résumée par l OpenCL Quick Reference Card disponible à l url : Ce guide contient les types de base, les fonctions mathématiques, géométriques... dont il faut privilégier l utilisation F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

31 Premier programme : programmation de l hôte (host) Etape suivante déveloper l environnement autours permettant d exécuter le kernel : fichier séparé : vecteur.c Pour compiler et exécuter, taper en ligne de commande : $ gcc -o vect vecteur.c -lopencl $./vect #include <stdio.h> #include <stdlib.h> #ifdef APPLE #include <OpenCL/opencl.h> #else #include <CL/cl.h> #endif int main(void) {...} F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

32 Premier programme : programmation de la plateforme Platform hôte + ensemble de devices gérés par OpenCL. Permet à une application de partager les ressources et d exécuter les kernels sur les devices au sein de la plateforme Est représenté par l objet a cl latform object initialisé par la fonction suivante : cl_int oclgetplatformid (cl_platform_id *platforms) F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

33 Premier programme : initialisation du device Device Deux types de devices sont gérés par OpenCl: device type =CL DEVICE TYPE GPU pour GPU, CL DEVICE TYPE CPU pour CPU Le nombre de devices (typiquement 1) est défini num entries Le(s) device(s) sont initialisés par la fonction ci-dessous : cl_int clgetdeviceids (cl_platform_id platform, cl_device_type device_type, cl_uint num_entries, cl_device_id *devices, //pointeur : liste des devices cl_uint *num_devices) //#devices dont le type a été défini F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

34 Premier programme : initialisation du context Context est utilisé par l environnement d exécution d OpenCL (ses kernels, devices, gestionnaire de mémoire, queue(s) de commandes) est référencé par l objet cl context object, initialisé par la fonction ci-dessous: cl_context clcreatecontext (const cl_context_properties *prope // Bitwise with the properties CL_CONTEXT_PLATFORM cl_uint num_devices, //#devices const cl_device_id *devices, // Pointeur sur les devices void *pfn_notify(const char *errinfo, const void *private_info, size_t cb, void *user_data), //fonction de call utilisée pour les notifications void *user_data, // paramètres de la fonction ci-dessus cl_int *errcode_ret) // erreur renvoyée (aucune si = NULL) F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

35 Premier programme : queue de commande CommandQueue est utilisé pour empiler les commandes à exécuter. Plusieurs queues peuvent être crées (les commandes sont alors indépendantes et non synchronisées) est référencé par l objet cl command queue, initialisé par la fonction ci-dessous: cl_command_queue clcreatecommandqueue (cl_context context, cl_device_id device, cl_command_queue_properties properties, //bitwise cl_int *errcode_ret) //erreur renvoyée (aucune si = NULL) Les éléments basiques de l hôte sont maintenant configurés F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

36 Premier programme : plateforme, contexte, queue cl_platform_id platform; cl_context context; cl_command_queue queue; cl_device_id device; //cl_int error = 0; // Platform error = oclgetplatformid(&platform); //if (error!= CL_SUCCESS) exit(error); // Device clgetdeviceids(platform,cl_device_type_gpu,1,&device,null); // Context context = clcreatecontext(0, 1, &device, NULL, NULL, &error); // Command-queue queue = clcreatecommandqueue(context, device, 0, &error); F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

37 Premier programme : allocation de la mémoire Mémoire les variables à passer au kernel (entrées et sorties) doivent être définies La mémoire allouée sur le device est de type: CL MEM READ WRITE CL MEM WRITE ONLY CL MEM READ ONLY CL MEM USE HOST PTR : utilisation de la mémoire de l hôte CL MEM ALLOC HOST PTR : mémoire de l hôte allouée et rendue accessible CL MEM COPY HOST PTR :copie la mémoire pointée par host ptr cl_mem clcreatebuffer (cl_context context, cl_mem_flags flags, //type de mémoire size_t size, // taille exprimée en octets void *host_ptr, cl_int *errcode_ret) F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

38 Premier programme : allocation de la mémoire Mémoire Allocation de 3 vecteurs src a d, src b d, res d, initialisation de src a d, src b d Allocation des buffers: 2 en lecture et 1 en écriture (résultat) const int size = ; float* src_a_h = new float[size]; float* src_b_h = new float[size]; float* res_h = new float[size]; for(int i=0; i<size; i++) {src_a_h = src_b_h = (float) i;} const int mem_size = sizeof(float)*size; cl_mem src_a_d = clcreatebuffer(context, CL_MEM_READ_ONLY CL_MEM_COPY_HOST_PTR, mem_size, src_a_h, &error); cl_mem src_b_d = clcreatebuffer(context, CL_MEM_READ_ONLY CL_MEM_COPY_HOST_PTR, mem_size, src_b_h, &error); cl_mem res_d = clcreatebuffer(context, CL_MEM_WRITE_ONLY, mem_size, NULL, &error); F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

39 Premier programme: remarques Il existe deux façons de compiler : Compilation en ligne : le fichier source contenant le kernel est lu dans le code de l hôte (solution que nous adoptons par la suite) Built du kernel lors de l éxécution (OpenCL runtime library) Avantage : portabilité, facilite les tests du kernel Inconvénient : la compilation du kernel doit être effectué par le terminal où il est déployé (solution inadaptée aux systèmes embarqués) Compilation hors ligne : le fichier binaire du kernel est lu par le code de l hôte Pre-built du kernel par le compilateur OpenCL. Le binaire généré est chargé (OpenCL API). Avantage : rapidité Inconvénient : portabilité F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

40 Premier programme : lancement du programme Programme Un programme (= ensemble de kernels) est crée puis compilé // Création du programme cl_program clcreateprogramwithsource (cl_context context, cl_uint count/*#fichiers*/, const char **strings /*noms fichiers*/, const size_t *lengths/*longueurs des fichiers*/, cl_int *errcode_ret) //Compilation du programme cl_int clbuildprogram(cl_program program, cl_uint num_devices, const cl_device_id *device_list, const char *options, // options compilation void (*pfn_notify)(cl_program, void *user_data), void *user_data) F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

41 Premier programme : lancer le kernel Une fois crée, le kernel est lancé après définission des arguments. Sa compilation a lieu lors de l exécution // 1. Création de kernel : cl_kernel clcreatekernel (cl_program program, const char *kernel_name, cl_int *errcode_ret) //2. Définition de chaque argument cl_int clsetkernelarg(cl_kernel kernel, cl_uint arg_index,//qu argument size_t arg_size,//taille PROCHAIN argument const void *arg_value) // Valeur // 3. Appel du kernel cl_int clenqueuendrangekernel(cl_command_queue command_queue, cl_kernel kernel, cl_uint work_dim /*1D,2D,3D*/, const size_t *global_work_offset, const size_t *global_work_size//#work-ite, const size_t *local_work_size, //#work-items par work-group cl_uint num_events_in_wait_list, const cl_event *event_wait_list, cl_event *event) F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

42 Premier programme : lancer le kernel // 1. Création du programme size_t src_size = 124; const char* path = shrfindfilepath("vecteur.cl", NULL); const char* source = oclloadprogsource(path, "", &src_size); cl_program program = clcreateprogramwithsource(context, 1, &source, &src_size, &error); error = clbuildprogram(program, 1, &device,null,null,null); cl_kernel vector_add_kernel = clcreatekernel(program, "vector_add_gpu", &error); F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

43 Premier programme : lancer le kernel // Arguments placés dans la queue clsetkernelarg(vector_add_k, 0, sizeof(cl_mem), &src_a_d); clsetkernelarg(vector_add_k, 1, sizeof(cl_mem), &src_b_d); clsetkernelarg(vector_add_k, 2, sizeof(cl_mem), &res_d); clsetkernelarg(vector_add_k, 3, sizeof(size_t), &size); // Lancement du kernel const size_t local_ws = 512; // #work-items par work-group //shrroundup renvoie le + petit multiple de local_ws > size const size_t global_ws = shrroundup(local_ws, size); //#work-items total error = clenqueuendrangekernel(queue, vector_add_k, 1, NULL, &global_ws, &local_ws, 0, NULL, NULL); F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

44 Premier programme : lecture des résultats, libération cl_int clenqueuereadbuffer (cl_command_queue command_queue, cl_mem buffer, // à partir de quel buffer cl_bool blocking_read, // lecture bloquante ou non size_t offset, // offset depuis le début size_t cb, // combien d octets lire void *ptr, // pointer sur la mémoire de l hote cl_uint num_events_in_wait_list, const cl_event *event_wait_list, cl_event *event) lecture des résultats et libération des ressources allouées : float* check = new float[size]; clenqueuereadbuffer(queue, res_d, CL_TRUE, 0, mem_size, check, 0, NULL, NULL); clreleasekernel(vector_add_k); clreleasecommandqueue(queue); clreleasecontext(context); clreleasememobject(src_a_d); clreleasememobject(src_b_d); F. Sailhan clreleasememobject(res_d); (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

45 Premier bilan: restriction Le parallélisme des données : il existe une corrélation entre les identifiants et l organisation des work-items et les accès en mémoire. Contrôle de flôt: il est important que les même instructions soient exécutées. Si plusieurs chemins peuvent être empruntés, les différents chemins seront sérialisés Restrictions : pas de pointeur passé en argument au kernel, pas de tableau de taille variable, pas de récursion (pour les GPUs anciens) F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

46 Premier bilan: mise en garde Le GPU parallélise efficacement si : la même opération est effectuée sur un ensemble de données (de taille relativement modérée) Chaque work-item fait des accès cohérents en mémoire GLOBALE : accès regroupés et séquentiels La mémoire globale est une sucession de mots de 16 ou 32 bits. Ici, chaque thread accède à un float (= 32 bits) en mémoire Cas 1: accès séquentiel aligné : 1 transaction Cas 2: accès séquentiel non aligné = 2 transactions Cas 3: accès séquentiel espacé = 2 transactions F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

47 Premier bilan: calcul de la bande passante théorique Le GPU parallélise efficacement si : la même opération est effectuée sur un ensemble de données (de taille relativement modérée) Les échanges d informations entre l hôte et le device sont minimisés car le bus PCI manque de bande passante Le coût de chargement des données de l hôte vers le device (et vis versa) est justifié. Coût injustifiable pour l addition de 2 vecteurs. Pour l addition de 2 matrices? le carré d une matrice? Hypothèses : NVIDIA GeForce GTX 280 DDR (Double Data Rate) RAM avec une cadence d horloge (memory clock) de 1,107 MHz et une interface mémoire à 512-bits Question: Quelle est la bande passance théorique (max)? Réponse : (512/8).2)/10 9 = 141.6Gbytes/sec Bande passante effective = ((Br + Bw)/10 9 )/time Br : nb d octets lus par kernel, Bw : nb d octets écris par kernel i, time : exprimé en seconde. Exemple : pour la copie d une matrice 2048 x 2048, bande passante effective = /10 9 F. Sailhan (CNAM, département informatique) Introduction à la programmation /time massivement parallèle November 21, / 54

48 A vous de jouer Objectif: multiplier une matrice par un vecteur, voir deux matrices Rappel: multiplication matrice par vecteur a b c 1 a + 2.b + 3.c d e f 2 = d + 2.e + 3.f g h i 3 g + 2.h + 3.i Rappel: multiplication de 2 matrices a b c j k l d e f m n o = g h i p q r a.j + b.m + c.p a.k + b.n + c.q a.l + b.o + c.r d.j + e.m + f.p d.k + e.n + f.q d.l + e.o + f.r g.j + h.m + i.p g.k + h.n + i.q g.l + h.o + i.r Stratégie: sachant que l accès à la mémoire globale est très lent, maximisez le nombre d accès à la mémoire partagée (locale) F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

49 Rappel: fonction multipliant la matrice M par le vecteur V La fonction ci-dessous n est pas parallélisée matrix_vector_mul(const float* M, uint width, uint height, const float* V, float* W) { for (uint y = 0; y < height; ++y) { const float* row = M + y * width; } row pointe au début de chaque ligne identifiée par y F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

50 Rappel: fonction multipliant la matrice M par le vecteur V La fonction ci-dessous n est pas parallélisée matrix_vector_mul(const float* M, uint width, uint height, const float* V, float* W) { for (uint y = 0; y < height; ++y) { const float* row = M + y * width; float dotproduct = 0; for (uint x = 0; x < width; ++x) dotproduct += row[x] * V[x]; W[y] = dotproduct; } } row pointe au début de chaque ligne identifiée par y F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

51 Work-item multipliant une matrice par un vecteur kernel void MatrixVectorMul0(const global float* M, uint width, uint height, const global float* V, global float* W) { uint y = get_global_id(0); const float* row = M + y * width; float dotproduct = 0; for (uint x = 0; x < width; ++x) dotproduct += row[x] * V[x]; W[y] = dotproduct; } Invonvénient : un work-item calcul une ligne et risque d être inoccupé. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

52 Work-item multipliant une matrice par un vecteur kernel void MatrixVectorMul1(const global float* M, uint width, uint height, const global float* V, global float* W) { unint y; for (y=get_global_id(0); y<height; y+=get_global_size(0)) { const float* row = M + y * width; float dotproduct = 0; for (uint x = 0; x < width; ++x) dotproduct += row[x] * V[x]; W[y] = dotproduct; } } F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

53 Premier bilan Le nombre d éléments calculé par chaque work-item = height/ # work-items (+1 pour certains work-items si height n est pas un multiple du # work-items) Avantage : découplage entre la taille de la matrice et le nombre de work-item s exécutant Remarque: un kernel doit s exécuter sur un #work-items #multiprocesseurs. centaines de work-items par multiprocessor qui seraient un multiple de la taille de warp (= 32). Le meilleur NDRange dépend du kernel, du #registres et doit être fixé par des expérimentations Autres optimisations : l accès contigu à la mémoire permettant une seule transaction mémoire F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

54 Accès mémoire, multiplication matrice par un vecteur kernel void MatrixVectorMul1(...) { unint y; for(y=get_global_id(0);y<height;y+=get_global_ { const float* row = M + y * width; float dotproduct = 0; for (uint x = 0; x < width; ++x) dotproduct += row[x] * V[x]; W[y] = dotproduct; } }. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

55 Accès mémoire, multiplication matrice par un vecteur kernel void mul( global float*m, uint width,uint height, global float* V, global float* W, local float* partprod) for(y=get_group_id(0); y<height; y +=get_num_groups(0)){ float sum = 0; for(uint x=get_local_id(0);x<width;x+=get_local_size(0)) sum += row[x] * V[x]; partprod[get_local_id(0)]=sum; if (get_local_id(0) == 0) { float dotproduct = 0; for (uint t = 0; t < get_local_size(0); ++t) dotproduct += partprod[t]; W[y] = dotproduct; } barrier(clk_local_mem_fence);}} F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

56 Conclusion: GPU for ever? Nous assistons à une renaissance du calcul parallèle caractérisé par une utilisation efficace de toutes les ressources, une utilisation avisée de la concurrence. Critère primordiale : sélectionner le bon matériel en fonction de l algorithme GPU = processeur massivement multi-coeur caractérisé par une exécution SIMD GPU = special purpose hardware (parallélisme des données) Implication multiples: les algorithmes doivent être impérativement désignés pour éviter toute divergence au niveau des branchements. Leur massivité implique de les maintenir occupés Difficulté à debuger le code CPU = general purpose hardware parfait pour un code série ou un faible parallélisme avec de petites unités de travail dont les tâches à effectuer ne sont pas reliées, facile à débuger, outils mature F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

57 David B. Kirk and Wen-mei W. Hwu Programming massively parallel processors A Hands-on approach laurel.datsi.fi.upm.es/ media/proyectos/gopac/programming massively parallel processors.pdf Kronos group Kronos group Nvidia OpenCL Best Practices Guide F. Sailhan (CNAM, département informatique) Introduction à la programmation massivement parallèle November 21, / 54

Introduction au calcul parallèle avec OpenCL

Introduction au calcul parallèle avec OpenCL Introduction au calcul parallèle avec OpenCL Julien Dehos Séminaire du 05/01/2012 Sommaire Introduction Le calculateur du CGR/LISIC/LMPA Généralités sur OpenCL Modèles Programmation Optimisation Conclusion

Plus en détail

Initiation au HPC - Généralités

Initiation au HPC - Généralités Initiation au HPC - Généralités Éric Ramat et Julien Dehos Université du Littoral Côte d Opale M2 Informatique 2 septembre 2015 Éric Ramat et Julien Dehos Initiation au HPC - Généralités 1/49 Plan du cours

Plus en détail

Introduction à la programmation des GPUs

Introduction à la programmation des GPUs Introduction à la programmation des GPUs Anne-Sophie Mouronval Mesocentre de calcul de l Ecole Centrale Paris Laboratoire MSSMat Avril 2013 Anne-Sophie Mouronval Introduction à la programmation des GPUs

Plus en détail

. Plan du cours. . Architecture: Fermi (2010-12), Kepler (12-?)

. Plan du cours. . Architecture: Fermi (2010-12), Kepler (12-?) Plan du cours Vision mate riel: architecture cartes graphiques NVIDIA INF 560 Calcul Paralle le et Distribue Cours 3 Vision logiciel: l abstraction logique de l architecture propose e par le langage CUDA

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

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

Architecture des ordinateurs

Architecture des ordinateurs Décoder la relation entre l architecture et les applications Violaine Louvet, Institut Camille Jordan CNRS & Université Lyon 1 Ecole «Découverte du Calcul» 2013 1 / 61 Simulation numérique... Physique

Plus en détail

Une bibliothèque de templates pour CUDA

Une bibliothèque de templates pour CUDA Une bibliothèque de templates pour CUDA Sylvain Collange, Marc Daumas et David Defour Montpellier, 16 octobre 2008 Types de parallèlisme de données Données indépendantes n threads pour n jeux de données

Plus en détail

Quantification d incertitude et Tendances en HPC

Quantification d incertitude et Tendances en HPC Quantification d incertitude et Tendances en HPC Laurence Viry E cole de Physique des Houches 7 Mai 2014 Laurence Viry Tendances en HPC 7 Mai 2014 1 / 47 Contents 1 Mode lisation, simulation et quantification

Plus en détail

M2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013

M2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013 Rendu Temps Réel - OpenGL 4 et compute shaders December 18, 2013 résumé des épisodes précédents... création des objets opengl, organisation des données, configuration du pipeline, draw,... opengl 4.3 :

Plus en détail

Introduction à CUDA. gael.guennebaud@inria.fr

Introduction à CUDA. gael.guennebaud@inria.fr 36 Introduction à CUDA gael.guennebaud@inria.fr 38 Comment programmer les GPU? Notion de kernel exemple (n produits scalaires): T ci =ai b ( ai, b : vecteurs 3D, ci for(int i=0;i

Plus en détail

Limitations of the Playstation 3 for High Performance Cluster Computing

Limitations of the Playstation 3 for High Performance Cluster Computing Introduction Plan Limitations of the Playstation 3 for High Performance Cluster Computing July 2007 Introduction Plan Introduction Intérêts de la PS3 : rapide et puissante bon marché L utiliser pour faire

Plus en détail

Architecture des calculateurs

Architecture des calculateurs Formation en Calcul Scientifique - LEM2I Architecture des calculateurs Violaine Louvet 1 1 Institut Camille jordan - CNRS 12-13/09/2011 Introduction Décoder la relation entre l architecture et les applications

Plus en détail

INF6500 : Structures des ordinateurs. Sylvain Martel - INF6500 1

INF6500 : Structures des ordinateurs. Sylvain Martel - INF6500 1 INF6500 : Structures des ordinateurs Sylvain Martel - INF6500 1 Cours 4 : Multiprocesseurs Sylvain Martel - INF6500 2 Multiprocesseurs Type SISD SIMD MIMD Communication Shared memory Message-passing Groupe

Plus en détail

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données EARTH et Threaded-C: Éléments clés du manuel de références de Threaded-C Bref historique de EARTH et Threaded-C Ancêtres de l architecture EARTH: Slide 1 Machine à flux de données statique de J.B. Dennis

Plus en détail

Équilibrage Dynamique de Charge pour des Calculs Parallèles sur Cluster Linux - Une Évaluation de l Environnement AMPI.

Équilibrage Dynamique de Charge pour des Calculs Parallèles sur Cluster Linux - Une Évaluation de l Environnement AMPI. Facultés Universitaires Notre-Dame de la Paix, Namur Institut d Informatique Année académique 2003-2004 Équilibrage Dynamique de Charge pour des Calculs Parallèles sur Cluster Linux - Une Évaluation de

Plus en détail

<Insert Picture Here> Solaris pour la base de donnés Oracle

<Insert Picture Here> Solaris pour la base de donnés Oracle Solaris pour la base de donnés Oracle Alain Chéreau Oracle Solution Center Agenda Compilateurs Mémoire pour la SGA Parallélisme RAC Flash Cache Compilateurs

Plus en détail

MAC-TC: programmation d un plate forme DSP-FPGA

MAC-TC: programmation d un plate forme DSP-FPGA MAC-TC: programmation d un plate forme DSP-FPGA Tanguy Risset avec l aide de: Nicolas Fournel, Antoine Fraboulet, Claire Goursaud, Arnaud Tisserand - p. 1/17 Plan Partie 1: le système Lyrtech Introduction

Plus en détail

Contrôle Non Destructif : Implantation d'algorithmes sur GPU et multi-coeurs. Gilles Rougeron CEA/LIST Département Imagerie Simulation et Contrôle

Contrôle Non Destructif : Implantation d'algorithmes sur GPU et multi-coeurs. Gilles Rougeron CEA/LIST Département Imagerie Simulation et Contrôle Contrôle Non Destructif : Implantation d'algorithmes sur GPU et multi-coeurs Gilles Rougeron CEA/LIST Département Imagerie Simulation et Contrôle 1 CEA R & D for Nuclear Energy 5 000 people Nuclear systems

Plus en détail

Hiérarchie matériel dans le monde informatique. Architecture d ordinateur : introduction. Hiérarchie matériel dans le monde informatique

Hiérarchie matériel dans le monde informatique. Architecture d ordinateur : introduction. Hiérarchie matériel dans le monde informatique Architecture d ordinateur : introduction Dimitri Galayko Introduction à l informatique, cours 1 partie 2 Septembre 2014 Association d interrupteurs: fonctions arithmétiques élémentaires Elément «NON» Elément

Plus en détail

Programmation système I Les entrées/sorties

Programmation système I Les entrées/sorties Programmation système I Les entrées/sorties DUT 1 re année Université de Marne La vallée Les entrées-sorties : E/O Entrées/Sorties : Opérations d échanges d informations dans un système informatique. Les

Plus en détail

Calcul multi GPU et optimisation combinatoire

Calcul multi GPU et optimisation combinatoire Année universitaire 2010 2011 Master recherche EEA Spécialité : SAID Systèmes Automatiques, Informatiques et Décisionnels Parcours : Systèmes Automatiques Calcul multi GPU et optimisation combinatoire

Plus en détail

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation Base de données S. Lèbre slebre@unistra.fr Université de Strasbourg, département d informatique. Présentation du module Contenu général Notion de bases de données Fondements / Conception Utilisation :

Plus en détail

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs Brefs rappels sur la pile et le tas (Stack / Heap) et les pointeurs (exemples en C) v1.11 - Olivier Carles 1 Pile et Tas Mémoire allouée de manière statique Mémoire Allouée Dynamiquement variables locales

Plus en détail

Temps Réel. Jérôme Pouiller <j.pouiller@sysmic.org> Septembre 2011

Temps Réel. Jérôme Pouiller <j.pouiller@sysmic.org> Septembre 2011 Temps Réel Jérôme Pouiller Septembre 2011 Sommaire Problèmatique Le monotâche Le multitâches L ordonnanement Le partage de ressources Problèmatiques des OS temps réels J. Pouiller

Plus en détail

DG-ADAJ: Une plateforme Desktop Grid

DG-ADAJ: Une plateforme Desktop Grid DG-ADAJ: Une plateforme pour Desktop Grid Olejnik Richard, Bernard Toursel Université des Sciences et Technologies de Lille Laboratoire d Informatique Fondamentale de Lille (LIFL UMR CNRS 8022) Bât M3

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

Systèmes et traitement parallèles

Systèmes et traitement parallèles Systèmes et traitement parallèles Mohsine Eleuldj Département Génie Informatique, EMI eleuldj@emi.ac.ma 1 Système et traitement parallèle Objectif Etude des architectures parallèles Programmation des applications

Plus en détail

La technologie Java Card TM

La technologie Java Card TM Présentation interne au CESTI La technologie Java Card TM sauveron@labri.u-bordeaux.fr http://dept-info.labri.u-bordeaux.fr/~sauveron 8 novembre 2002 Plan Qu est ce que Java Card? Historique Les avantages

Plus en détail

Canvas 3D et WebGL. Louis Giraud et Laetitia Montagny. 9 Avril 2013. Université Lyon 1

Canvas 3D et WebGL. Louis Giraud et Laetitia Montagny. 9 Avril 2013. Université Lyon 1 Canvas 3D et WebGL Louis Giraud et Laetitia Montagny Université Lyon 1 9 Avril 2013 1 Présentation du sujet Introduction Présentation du sujet Problématique : Représenter de la 3D dans le navigateur sans

Plus en détail

Segmentation d'images à l'aide d'agents sociaux : applications GPU

Segmentation d'images à l'aide d'agents sociaux : applications GPU Segmentation d'images à l'aide d'agents sociaux : applications GPU Richard MOUSSA Laboratoire Bordelais de Recherche en Informatique (LaBRI) - UMR 5800 Université de Bordeaux - France Laboratoire de recherche

Plus en détail

Remote Method Invocation Les classes implémentant Serializable

Remote Method Invocation Les classes implémentant Serializable Parallélisme Architecture Eric Goubault Commissariat à l Energie Atomique Saclay Classe qui implémente la méthode distante (serveur): - dont les méthodes renvoient un objet serializable - ou plus généralement

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

UE C avancé cours 1: introduction et révisions

UE C avancé cours 1: introduction et révisions Introduction Types Structures de contrôle Exemple UE C avancé cours 1: introduction et révisions Jean-Lou Desbarbieux et Stéphane Doncieux UMPC 2004/2005 Introduction Types Structures de contrôle Exemple

Plus en détail

Exécutif temps réel Pierre-Yves Duval (cppm)

Exécutif temps réel Pierre-Yves Duval (cppm) Exécutif temps réel Pierre-Yves Duval (cppm) Ecole d informatique temps réel - La Londes les Maures 7-11 Octobre 2002 Plan Exécutif Tâches Evénements et synchronisation Partage de ressources Communications

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

Vers du matériel libre

Vers du matériel libre Février 2011 La liberté du logiciel n est qu une partie du problème. Winmodems Modem traditionnel Bon fonctionnement Plus cher Electronique propriétaire Blob sur DSP intégré au modem Bien reçu par les

Plus en détail

Journée Utiliateurs 2015. Nouvelles du Pôle ID (Informatique) Pierre Neyron, LIG/CNRS

Journée Utiliateurs 2015. Nouvelles du Pôle ID (Informatique) Pierre Neyron, LIG/CNRS Journée Utiliateurs 2015 Nouvelles du Pôle ID (Informatique) Pierre Neyron, LIG/CNRS 1 Pôle ID, Grid'5000 Ciment Une proximité des platesformes Autres sites G5K Grenoble + CIMENT Pôle ID = «Digitalis»

Plus en détail

Analyse de sécurité de logiciels système par typage statique

Analyse de sécurité de logiciels système par typage statique Contexte Modélisation Expérimentation Conclusion Analyse de sécurité de logiciels système par typage statique Application au noyau Linux Étienne Millon UPMC/LIP6 Airbus Group Innovations Sous la direction

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

La carte à puce. Jean-Philippe Babau

La carte à puce. Jean-Philippe Babau La carte à puce Jean-Philippe Babau Département Informatique INSA Lyon Certains éléments de cette présentation sont issus de documents Gemplus Research Group 1 Introduction Carte à puce de plus en plus

Plus en détail

Ordinateurs, Structure et Applications

Ordinateurs, Structure et Applications Ordinateurs, Structure et Applications Cours 10, Les interruptions Etienne Tremblay Université Laval, Hiver 2012 Cours 10, p.1 Les interruptions du 8086 Une interruption interrompt l exécution séquentielle

Plus en détail

Conception des systèmes répartis

Conception des systèmes répartis Conception des systèmes répartis Principes et concepts Gérard Padiou Département Informatique et Mathématiques appliquées ENSEEIHT Octobre 2012 Gérard Padiou Conception des systèmes répartis 1 / 37 plan

Plus en détail

Parallélisme et Répartition

Parallélisme et Répartition Parallélisme et Répartition Master Info Françoise Baude Université de Nice Sophia-Antipolis UFR Sciences Département Informatique baude@unice.fr web du cours : deptinfo.unice.fr/~baude Septembre 2009 Chapitre

Plus en détail

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par

Plus en détail

Potentiels de la technologie FPGA dans la conception des systèmes. Avantages des FPGAs pour la conception de systèmes optimisés

Potentiels de la technologie FPGA dans la conception des systèmes. Avantages des FPGAs pour la conception de systèmes optimisés Potentiels de la technologie FPGA dans la conception des systèmes Avantages des FPGAs pour la conception de systèmes optimisés Gérard FLORENCE Lotfi Guedria Agenda 1. Le CETIC en quelques mots 2. Générateur

Plus en détail

Chapitre 2 : Abstraction et Virtualisation

Chapitre 2 : Abstraction et Virtualisation Virtualisation et Cloud Computing Chapitre 2 : Abstraction et Virtualisation Objectifs Présenter la notion de niveaux d abstraction séparés par des interfaces bien définies Description des avantages et

Plus en détail

Architecture des ordinateurs

Architecture des ordinateurs Architecture des ordinateurs Cours 7 17 décembre 2012 Archi 1/1 Fonctions, suite et fin Archi 2/1 Rappel Forme générale d un sous-programme (fonction) : etiquette sousprogramme: push ebp ; empile la valeur

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

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

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51 DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51 PLAN DU COURS Introduction au langage C Notions de compilation Variables, types, constantes, tableaux, opérateurs Entrées sorties de base Structures de

Plus en détail

Algorithmique et Programmation, IMA

Algorithmique et Programmation, IMA Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions

Plus en détail

Initiation. àl algorithmique et à la programmation. en C

Initiation. àl algorithmique et à la programmation. en C Initiation àl algorithmique et à la programmation en C Initiation àl algorithmique et à la programmation en C Cours avec 129 exercices corrigés Illustration de couverture : alwyncooper - istock.com Dunod,

Plus en détail

Eléments d architecture des machines parallèles et distribuées

Eléments d architecture des machines parallèles et distribuées M2-RISE - Systèmes distribués et grille Eléments d architecture des machines parallèles et distribuées Stéphane Vialle Stephane.Vialle@supelec.fr http://www.metz.supelec.fr/~vialle Notions d architecture

Plus en détail

Les environnements de calcul distribué

Les environnements de calcul distribué 2 e Atelier CRAG, 3 au 8 Décembre 2012 Par Blaise Omer YENKE IUT, Université de Ngaoundéré, Cameroun. 4 décembre 2012 1 / 32 Calcul haute performance (HPC) High-performance computing (HPC) : utilisation

Plus en détail

TPs Architecture des ordinateurs DUT Informatique - M4104c SUJETS. R. Raffin Aix-Marseille Université romain.raffin-at-univ-amu.fr

TPs Architecture des ordinateurs DUT Informatique - M4104c SUJETS. R. Raffin Aix-Marseille Université romain.raffin-at-univ-amu.fr TPs Architecture des ordinateurs DUT Informatique - M4104c SUJETS R. Raffin Aix-Marseille Université romain.raffin-at-univ-amu.fr 2015 Table des matières 1 TP 1 : prise en main 2 1.1 Introduction.......................................................

Plus en détail

IRL : Simulation distribuée pour les systèmes embarqués

IRL : Simulation distribuée pour les systèmes embarqués IRL : Simulation distribuée pour les systèmes embarqués Yassine El Khadiri, 2 ème année Ensimag, Grenoble INP Matthieu Moy, Verimag Denis Becker, Verimag 19 mai 2015 1 Table des matières 1 MPI et la sérialisation

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

Bases de programmation. Cours 5. Structurer les données

Bases de programmation. Cours 5. Structurer les données Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et

Plus en détail

Techniques de stockage. Techniques de stockage, P. Rigaux p.1/43

Techniques de stockage. Techniques de stockage, P. Rigaux p.1/43 Techniques de stockage Techniques de stockage, P. Rigaux p.1/43 Techniques de stockage Contenu de ce cours : 1. Stockage de données. Supports, fonctionnement d un disque, technologie RAID 2. Organisation

Plus en détail

Introduction aux systèmes temps réel. Iulian Ober IRIT ober@iut-blagnac.fr

Introduction aux systèmes temps réel. Iulian Ober IRIT ober@iut-blagnac.fr Introduction aux systèmes temps réel Iulian Ober IRIT ober@iut-blagnac.fr Définition Systèmes dont la correction ne dépend pas seulement des valeurs des résultats produits mais également des délais dans

Plus en détail

Mesure de performances. [Architecture des ordinateurs, Hennessy & Patterson, 1996]

Mesure de performances. [Architecture des ordinateurs, Hennessy & Patterson, 1996] Mesure de performances [Architecture des ordinateurs, Hennessy & Patterson, 1996] Croissance des performances des microprocesseurs Avant le milieu des années 80, le gain dépendait de la technologie. Après,

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

Architectures informatiques dans les nuages

Architectures informatiques dans les nuages Architectures informatiques dans les nuages Cloud Computing : ressources informatiques «as a service» François Goldgewicht Consultant, directeur technique CCT CNES 18 mars 2010 Avant-propos Le Cloud Computing,

Plus en détail

I. Introduction aux fonctions : les fonctions standards

I. Introduction aux fonctions : les fonctions standards Chapitre 3 : Les fonctions en C++ I. Introduction aux fonctions : les fonctions standards A. Notion de Fonction Imaginons que dans un programme, vous ayez besoin de calculer une racine carrée. Rappelons

Plus en détail

Une méthode de conception de systèmes sur puce

Une méthode de conception de systèmes sur puce École thématique ARCHI 05 Une méthode de conception de systèmes sur puce (de l intégration d applications) Frédéric PÉTROT Laboratoire TIMA Institut National Polytechnique de Grenoble Frédéric Pétrot/TIMA/INPG

Plus en détail

Contribution à la conception à base de composants logiciels d applications scientifiques parallèles.

Contribution à la conception à base de composants logiciels d applications scientifiques parallèles. - École Normale Supérieure de LYON - Laboratoire de l Informatique du Parallélisme THÈSE en vue d obtenir le grade de Docteur de l École Normale Supérieure de Lyon - Université de Lyon Discipline : Informatique

Plus en détail

Introduction au langage C

Introduction au langage C Introduction au langage C Cours 1: Opérations de base et premier programme Alexis Lechervy Alexis Lechervy (UNICAEN) Introduction au langage C 1 / 23 Les premiers pas Sommaire 1 Les premiers pas 2 Les

Plus en détail

Big Data. Cyril Amsellem Consultant avant-vente. 16 juin 2011. Talend 2010 1

Big Data. Cyril Amsellem Consultant avant-vente. 16 juin 2011. Talend 2010 1 Big Data Cyril Amsellem Consultant avant-vente 16 juin 2011 Talend 2010 1 Big Data Architecture globale Hadoop Les projets Hadoop (partie 1) Hadoop-Core : projet principal. HDFS : système de fichiers distribués

Plus en détail

Cours de Système : Gestion de Fichiers

Cours de Système : Gestion de Fichiers Cours de Système : Gestion de Fichiers Bertrand Le cun et Emmanuel Hyon bertrand.le cun{at}u-paris10.fr et Emmanuel.Hyon{at}u-paris10.fr Université Paris Ouest Nanterre 25 octobre 2011 B.L.C. & E.H. (UPO)

Plus en détail

Exigences système BauBit pro

Exigences système BauBit pro INTRODUCTION Chaque installation de BauBit pro se compose d un serveur et d un ou plusieurs clients. Le serveur BauBit pro utilise Microsoft SQL Server 2014 comme système de base de données. Les exigences

Plus en détail

Cours Programmation Système

Cours Programmation Système Cours Programmation Système Filière SMI Semestre S6 El Mostafa DAOUDI Département de Mathématiques et d Informatique, Faculté des Sciences Université Mohammed Premier Oujda m.daoudi@fso.ump.ma Février

Plus en détail

Tests de performance du matériel

Tests de performance du matériel 3 Tests de performance du matériel Après toute la théorie du dernier chapitre, vous vous demandez certainement quelles sont les performances réelles de votre propre système. En fait, il y a plusieurs raisons

Plus en détail

Chap III : Les tableaux

Chap III : Les tableaux Chap III : Les tableaux Dans cette partie, on va étudier quelques structures de données de base tels que : Les tableaux (vecteur et matrice) Les chaînes de caractères LA STRUCTURE DE TABLEAU Introduction

Plus en détail

Sur un ordinateur portable ou un All-in-One tactile, la plupart des éléments mentionnés précédemment sont regroupés. 10) 11)

Sur un ordinateur portable ou un All-in-One tactile, la plupart des éléments mentionnés précédemment sont regroupés. 10) 11) 1/ Généralités : Un ordinateur est un ensemble non exhaustif d éléments qui sert à traiter des informations (documents de bureautique, méls, sons, vidéos, programmes ) sous forme numérique. Il est en général

Plus en détail

Métriques de performance pour les algorithmes et programmes parallèles

Métriques de performance pour les algorithmes et programmes parallèles Métriques de performance pour les algorithmes et programmes parallèles 11 18 nov. 2002 Cette section est basée tout d abord sur la référence suivante (manuel suggéré mais non obligatoire) : R. Miller and

Plus en détail

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE ARDUINO DOSSIER RESSOURCE POUR LA CLASSE Sommaire 1. Présentation 2. Exemple d apprentissage 3. Lexique de termes anglais 4. Reconnaître les composants 5. Rendre Arduino autonome 6. Les signaux d entrée

Plus en détail

Rapport d activité. Mathieu Souchaud Juin 2007

Rapport d activité. Mathieu Souchaud Juin 2007 Rapport d activité Mathieu Souchaud Juin 2007 Ce document fait la synthèse des réalisations accomplies durant les sept premiers mois de ma mission (de novembre 2006 à juin 2007) au sein de l équipe ScAlApplix

Plus en détail

Programmation système de commandes en C

Programmation système de commandes en C Programmation système de commandes en C Cours de Programmation système Tuyêt Trâm DANG NGOC Université de Cergy-Pontoise 2012 2013 Tuyêt Trâm DANG NGOC Programmation système de commandes

Plus en détail

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7 Cahier des charges driver WIFI pour chipset Ralink RT2571W sur hardware ARM7 RevA 13/03/2006 Création du document Sylvain Huet RevB 16/03/2006 Fusion des fonctions ARP et IP. SH Modification des milestones

Plus en détail

Windows Server 2008. Chapitre 1: Découvrir Windows Server 2008

Windows Server 2008. Chapitre 1: Découvrir Windows Server 2008 Windows Server 2008 Chapitre 1: Découvrir Windows Server 2008 Objectives Identifier les caractéristiques de chaque édition de Windows Server 2008 Identifier les caractéristiques généraux de Windows Server

Plus en détail

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la

Plus en détail

Caractéristiques principales:

Caractéristiques principales: Powered by AndoridTM4.1 Jelly Bean Archos introduit sa nouvelle tablette ChildPad: l ARCHOS 80 CHILDPAD. Equipée de la dernière version d Android Jelly Bean, cette tablette de 8 a spécialement été conçue

Plus en détail

Réseau longue distance et application distribuée dans les grilles de calcul : étude et propositions pour une interaction efficace

Réseau longue distance et application distribuée dans les grilles de calcul : étude et propositions pour une interaction efficace 1 Réseau longue distance et application distribuée dans les grilles de calcul : étude et propositions pour une interaction efficace Réseau longue distance et application distribuée dans les grilles de

Plus en détail

Optimisation multi-critère pour l allocation de ressources sur Clouds distribués avec prise en compte de l énergie

Optimisation multi-critère pour l allocation de ressources sur Clouds distribués avec prise en compte de l énergie Optimisation multi-critère pour l allocation de ressources sur Clouds distribués avec prise en compte de l énergie 1 Présenté par: Yacine KESSACI Encadrement : N. MELAB E-G. TALBI 31/05/2011 Plan 2 Motivation

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

Cours 7 : Programmation d une chaîne d acquisition

Cours 7 : Programmation d une chaîne d acquisition Cours 7 : Programmation d une chaîne d acquisition 4 Concepts 4 Programmation Cible Pentium : Langages de haut niveau Langage graphique G sous LabView + librairies de VI ; Langage C + librairies de fonctions

Plus en détail

Architecture des ordinateurs Introduction à l informatique

Architecture des ordinateurs Introduction à l informatique Architecture des ordinateurs Introduction à l informatique 17 septembre 2004 1 2 3 4 5 6 Les interrupteurs... 0V 5V Ce sont des composants électroniques qui laissent pser un courant principal lorsque la

Plus en détail

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers. I Présentation : Dans le chapitre 1, nous avons vu comment utiliser les appels-systèmes de bas niveau pour créer et accéder à des fichiers sur le disque. Nous avons notamment mis en évidence leur dépouillement

Plus en détail

Infrastructures Parallèles de Calcul

Infrastructures Parallèles de Calcul Infrastructures Parallèles de Calcul Clusters Grids Clouds Stéphane Genaud 11/02/2011 Stéphane Genaud () 11/02/2011 1 / 8 Clusters - Grids - Clouds Clusters : assemblage de PCs + interconnexion rapide

Plus en détail

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Structure d un programme et Compilation Notions de classe et d objet Syntaxe Cours1 Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Programmation Orientée Objet Un ensemble d objet qui communiquent Pourquoi POO Conception abstraction sur les types

Plus en détail

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing 3/4/27 Programmation Avancée Multimédia Multithreading Benoît Piranda Équipe SISAR Université de Marne La Vallée Besoin Programmes à traitements simultanés Réseau Réseau Afficher une animation en temps

Plus en détail

Cours 3 : L'ordinateur

Cours 3 : L'ordinateur Cours 3 : L'ordinateur Abdelkrim Zehioua 2éme année Licence Gestion Faculté des sciences Économiques et sciences de Gestion Université A, Mehri - Constantine 2 Plan du cours 1.Définitions de l'ordinateur

Plus en détail

Structure d un programme

Structure d un programme Architecture des ordinateurs Cours 6 Structure d un programme 3 décembre 2012 Archi 1/30 Programme en Assembleur Archi 2/30 Sections de données programme en assembleur = fichier texte (extension.asm) organisé

Plus en détail

Introduction à l architecture des ordinateurs. Adrien Lebre Décembre 2007

Introduction à l architecture des ordinateurs. Adrien Lebre Décembre 2007 Introduction à l architecture des ordinateurs Adrien Lebre Décembre 2007 Plan - partie 1 Vue d ensemble La carte mère Le processeur La mémoire principal Notion de bus Introduction à l architecture des

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

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

Pourquoi OneSolutions a choisi SyselCloud

Pourquoi OneSolutions a choisi SyselCloud Pourquoi OneSolutions a choisi SyselCloud Créée en 1995, Syselcom est une société suisse à capitaux suisses. Syselcom est spécialisée dans les domaines de la conception, l intégration, l exploitation et

Plus en détail

Info0804. Cours 6. Optimisation combinatoire : Applications et compléments

Info0804. Cours 6. Optimisation combinatoire : Applications et compléments Recherche Opérationnelle Optimisation combinatoire : Applications et compléments Pierre Delisle Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique 17 février 2014 Plan de

Plus en détail

Serveur Lynx CALLEO Application 2240 Fiches Technique

Serveur Lynx CALLEO Application 2240 Fiches Technique Fiches Technique Flexible et innovant + Le serveur d application est particulièrement adapté pour les applications générales des entreprises et satisfait également les exigences les plus strictes. Grâce

Plus en détail