Introduction à la programmation massivement parallèle
|
|
- Jean-Baptiste Favreau
- il y a 8 ans
- Total affichages :
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 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étailInitiation 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étailIntroduction à 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 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étailIntroduction à 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étailEPREUVE 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étailArchitecture 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étailUne 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étailQuantification 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étailM2-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étailIntroduction à 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étailLimitations 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étailArchitecture 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étailINF6500 : 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étailArgument-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.
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
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étailMAC-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étailContrô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étailHié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étailProgrammation 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étailCalcul 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étail4. 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étailBrefs 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étailTemps 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étailDG-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étailArchitecture 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étailSystè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étailLa 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étailCanvas 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étailSegmentation 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étailRemote 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étailConventions 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étailUE 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étailExé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étailProgrammation 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étailVers 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étailJourné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étailAnalyse 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étailINTRODUCTION 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étailLa 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étailOrdinateurs, 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étailConception 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étailParallé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étailINITIATION 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étailPotentiels 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étailChapitre 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étailArchitecture 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étailGé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étailTP 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étailDE 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étailAlgorithmique 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étailInitiation. à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étailElé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étailLes 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étailTPs 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étailIRL : 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étail1. 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étailBases 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étailTechniques 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étailIntroduction 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étailMesure 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étail1 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étailArchitectures 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étailI. 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étailUne 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étailContribution à 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étailIntroduction 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étailBig 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étailCours 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étailExigences 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étailCours 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étailTests 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étailChap 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étailSur 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étailMé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étailARDUINO 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étailRapport 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étailProgrammation 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étailCahier 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étailWindows 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étailPour 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étailCaracté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étailRé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étailOptimisation 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étailCours 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étailCours 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étailArchitecture 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étailDans 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étailInfrastructures 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étailStructure 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étail03/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étailCours 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étailStructure 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étailIntroduction à 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étailExé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étailUE 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étailPourquoi 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étailInfo0804. 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étailServeur 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