CUDA et son espace mémoire. shared-memory

Documents pareils
Introduction à CUDA.

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

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

Instructions pour mettre à jour un HFFv2 v1.x.yy v2.0.00

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

VMware ESX : Installation. Hervé Chaudret RSI - Délégation Centre Poitou-Charentes

Instructions Mozilla Thunderbird Page 1

Z-Axis Compliance Device Compliance en z

Une bibliothèque de templates pour CUDA

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

Editing and managing Systems engineering processes at Snecma

Once the installation is complete, you can delete the temporary Zip files..

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

Paxton. ins Net2 desktop reader USB

Introduction à la Programmation Parallèle: MPI

Conception de circuits numériques et architecture des ordinateurs

3615 SELFIE. HOW-TO / GUIDE D'UTILISATION

DOCUMENTATION MODULE BLOCKCATEGORIESCUSTOM Module crée par Prestacrea - Version : 2.0

Mobile Connect. Essai gratuit inclus. Welcome Pack. Mobile Broadband

APPENDIX 6 BONUS RING FORMAT

Calcul multi GPU et optimisation combinatoire

Règles et paramètres d'exploitation de Caparmor 2 au 11/12/2009. Pôle de Calcul Intensif pour la mer, 11 Decembre 2009


Acce s aux applications informatiques Supply Chain Fournisseurs

Outils d'analyse de la sécurité des réseaux. HADJALI Anis VESA Vlad

Exercices sur SQL server 2000

Garage Door Monitor Model 829LM

DOCUMENTATION - FRANCAIS... 2

Chapitre 4 : Les mémoires

PACKZ System Requirements. Version: Version: Copyright 2015, PACKZ Software GmbH. 1

How to Login to Career Page

Un exemple de cloud au LUPM : Stratuslab

Thank you for choosing the Mobile Broadband USB Stick. With your USB Stick, you can access a wireless network at high speed.

Monitor LRD. Table des matières

Software and Hardware Datasheet / Fiche technique du logiciel et du matériel

INF6500 : Structures des ordinateurs. Sylvain Martel - INF6500 1

Thank you for choosing the Mobile Broadband USB Stick. With your USB Stick, you can access a wireless network at high speed.

PROJECT POUR LE SYSTÈME DE SURVEILLANCE PAR CAMERA BASÉ SUR TECHNOLOGIE AXIS, PANNEAUX SOLAIRES ET LUMIERE DU LEDS BLOC D APARTEMENT LAURIER.

Gestion des prestations Volontaire

Présentation de l outil AppliDis ESX Console Viewer

HSCS 6.4 : mieux appréhender la gestion du stockage en environnement VMware et service de fichiers HNAS Laurent Bartoletti Product Marketing Manager

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Paris Airports - Web API Airports Path finding

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Improving the breakdown of the Central Credit Register data by category of enterprises

On distingue deux grandes catégories de mémoires : mémoire centrale (appelée également mémoire interne)

MELTING POTES, LA SECTION INTERNATIONALE DU BELLASSO (Association étudiante de lʼensaparis-belleville) PRESENTE :

FCM 2015 ANNUAL CONFERENCE AND TRADE SHOW Terms and Conditions for Delegates and Companions Shaw Convention Centre, Edmonton, AB June 5 8, 2015

Dexia Guide d installation de NetWorker Server 25 juin Legato Systems, Inc.

Principe. Technologies utilisées. 1. Linux et LVM. Les snapshots (instantannés) sous Linux et FreeBSD. Présentation de LVM. Organisation de LVM

Micro-ordinateurs, informations, idées, trucs et astuces utiliser le Bureau à distance

France SMS+ MT Premium Description

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

The new consumables catalogue from Medisoft is now updated. Please discover this full overview of all our consumables available to you.

Fabricant. 2 terminals

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

I>~I.J 4j1.bJ1UlJ ~..;W:i 1U

Fiche Produit TSSO Extension Mobility Single Sign-On

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

5Visualisation. pièges à. éviter... de données : e-book : Visualisation & Ergonomie. Page 1 / 30. Partagez cet e-book :

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

HAUTE DISPONIBILITÉ DE MACHINE VIRTUELLE AVEC HYPER-V 2012 R2 PARTIE CONFIGURATION OPENVPN SUR PFSENSE

DOCUMENTATION - FRANCAIS... 2

Filtres maîtres et distribués ADSL

Happy birthday ZSet High performance computing dans ZSet

English version Legal notice

Guide d installation Deco Drain inc. DD200

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

Instructions Installation ELLIS Business: Vidéo Local Windows 2003 & XP poste de Travail

Adeunis-RF Softwares. Stand-Alone configuration Manager V2. User guide version V1 FRANCAIS ENGLISH

Contrôle d'accès Access control. Notice technique / Technical Manual

FAQ. Gestion des Traps SNMP. Date 15/09/2010 Version 1.0 Référence 001 Auteur Denis CHAUVICOURT

Principe de TrueCrypt. Créer un volume pour TrueCrypt

Internet Group Management Protocol (IGMP) Multicast Listener Discovery ( MLD ) RFC 2710 (MLD version 1) RFC 3810 (MLD version 2)

Recherche dans un tableau

StruxureWare Power Monitoring v7.0. La nouvelle génération en matière de logiciel de gestion complète d énergie

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

System Center Data Protection Manager 2010 (DPM2010) Mettre en œuvre un réseau de backup

Plan. Department of Informatics

CONTEC CO., LTD. Novembre 2010

NOUVELLE série KTS pour un diagnostic confortable, rapide et fiable

I. Programmation I. 1 Ecrire un programme en Scilab traduisant l organigramme montré ci-après (on pourra utiliser les annexes):

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

Cours Bases de données 2ème année IUT

XtremWeb-HEP Interconnecting jobs over DG. Virtualization over DG. Oleg Lodygensky Laboratoire de l Accélérateur Linéaire

Dis où ces gens vont d après les images / Tell where these people are going based on the pictures.

Deadline(s): Assignment: in week 8 of block C Exam: in week 7 (oral exam) and in the exam week (written exam) of block D

DOCUMENTATION - FRANCAIS... 2

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

DG-ADAJ: Une plateforme Desktop Grid

Statement of the European Council of Medical Orders on telemedicine

Monitoring des classes de neige des calottes polaires par Envisat

Owner's Manual RSB-1410

OpenStack, l Infrastructure as a Service libre

Restaurant Application Quick Reference Guide

Cisco CCVP. Configuration de CUCM

Critères à l attention des fabricants et des fournisseurs de biens ou de services : dispositifs mécaniques pour bingo

COMPOSANTS DE L ARCHITECTURE D UN SGBD. Chapitre 1

Sybase High Avalaibility

Transcription:

CUDA et son espace mémoire shared-memory

CUDA Device Space Each thread can: (Device) Grid R/W per-threadregisters very fast Block (0, 0) R/W per-threadlocal memory- fast R/W per-blockshared memory fast 16kB/SM, can be difficult to make it fast Read only per-grid constant memory - fast (64kB) Read only per-grid texture memory- fast (cache) The host can R/W global, constant, and texture memories Shared Registers R/W per-gridglobal memory- very slow Host Block (1, 0) Registers Shared Registers Registers Thread (0, 0) Thread (1, 0) Thread (0, 0) Thread (1, 0) Local Local Local Local Global Constant Texture 97

CUDA Variable Type Qualifiers Variable declaration Scope Lifetime local thread thread device local int LocalVar; device shared int SharedVar; shared block block device int GlobalVar; global grid application constant grid application device constant int ConstantVar; device is optional when used with local, shared, or constant Automatic variables without any qualifier reside inregister a Except arraysthat reside in local memory 98

Shared Ex : Réduction revisitée Réduction classique : log(n) passes... démarrer une nouvelle passe est coûteux nombreux accès mémoires redondants synchronisation globales des threads Idée Copier une partie du tableau en shared memory 2048 threads/bloc 4k floats accumulés / bloc (SM=16kB OK) divise par 4k la taille du vecteur à chaque passe (au lieu de /2) synchronisation au sein d'un bloc uniquement accès à la mémoire globale réduits Réduction partielle «in-place» en utilisant exclusivement la shared memory!! adopter la bonne stratégie pour réduire les divergences

100 Intel Xeon Phi

Shared Ex : Réduction revisitée Réduction 2 à 2, in-place, version 1 : résultat accès mémoires non séquentiels divergence de branche

Shared Ex : Réduction revisitée shared float partialsum[n1]; int i = 2*threadIdx.x; int offset = 2*blockIdx.x*blockDim.x; accès mémoires non séquentiels partialsum[i] = src[offset + i]; partialsum[i+1] = src[offset + i+1]; for(int stride=1; stride<=blockdim.x ; stride*=2) { syncthreads(); if( (i%(2*stride)==0) && (i+stride<2*blockdim.x)) partialsum[i] = partialsum[i] + partialsum[i+stride]; } if(i==0) dst[blockidx.x] = partialsum[0]; divergence de branche de nombreuses unités de calcul sont mises en attente sans être libérées

Shared Ex : Réduction revisitée Réduction 2 à 2, in-place, version 2 : résultat accès mémoires séquentiels pas de divergence de branche

Shared Ex : Réduction revisitée int i = threadidx.x; int offset = 2*blockIdx.x*blockDim.x; shared float partialsum[n1] ; partialsum[i] = data[offset+i]; partialsum[i+blockdim.x] = data[offset+i+blockdim.x]; for(int stride=blockdim.x; stride>0 && i<stride; stride=stride/2) { syncthreads(); partialsum[i] = partialsum[i] + partialsum[i+stride]; } if(t==0) data[blockidx.x] = partialsum[0] ; approche à combiner avec le N-body simulation...

Shared - Exemple 2 produit matriciel Ex : produit matriciel B Exercice =1024 #loads =?? #(mul+add) =?? A C opération de base pour résoudre Ax=b C = A*B parallélisme naturel : 1 tache = calcul d'un élément C(i,j) = 1 produit scalaire accès mémoires prohibitifs C(i,j)

Shared - Exemple 2 produit matriciel int i = threadidx.x + blockidx.x*blockdim.x, j = threadidx.y + blockidx.y*blockdim.y; float c = 0 ; for (int k = 0; k<n; k++) { c += A[i+(j+k)*N] * B[i+k+j*N]; } slow

Shared - Exemple 2 produit matriciel TILE_ Exercice =1024 TILE_=32 #loads =?? #madd =?? A C Cdsub TILE_ TILE_ TILE_ B considérer une sous matrice de C = 1 bloc de threads pré-charger les sous blocs de A et B en shared memory Idée TILE_E TILE_ 107

Shared - Exemple 2 produit matriciel int i = threadidx.x, j = threadidx.y; int oi = blockidx.x*blockdim.x, oj = blockidx.y*blockdim.y; shared float tilea[t*t], tileb[t*t]; float c = 0 ; for (int k = 0; k<n; k+=t) { tilea[i+j*t] = A[oi+i+(k+j)*N] ; tileb[i+j*t] = B[k+i+(j+oj)*N] ; slow syncthreads(); } for(int k1 = 0 ; k1<t; ++k1) c += tilea[i+k1*t] * tileb[k1+j*t] ; fast float a = A[oi+i+(k+j)*N]; Idée : découper explicitement la copie via un registre tilea[i+j*t] = a; on peut utiliser tilea[] pendant la copie!!

Shared - Exemple 2 produit matriciel TILE_ Masquage des accès mémoires: charger les blocs bleus dans des registres pour chaque bloc copier les blocs A des registres vers la shared memory copier les blocs suivant (oranges) dans des registres calculer Cij pour les blocs courants TILE_ TILE_ C Cdsub TILE_ B considérer une sous matrice de C = 1 bloc de threads pré-charger les sous blocs de A et B en shared memory Idée TILE_E TILE_ 109

Shared - Exemple 2 produit matriciel int i = threadidx.x, j = threadidx.y; int oi = blockidx.x*blockdim.x, oj = blockidx.y*blockdim.y ; shared float tilea[t*t], tileb[t*t]; float a = A[oi+i+j*N], b = B[i+(j+oj)*N]; c = 0 ; for (int k = 0; k<n; k+=t) { tilea[i+j*t] = a ; tileb[i+j*t] = b ; syncthreads(); a = A[oi+i+(j+k)*N] ; b = B[i+k+(j+oj)*N] ; } for(int k1 = 0 ; k1<t; ++k1) c += tilea[i+k1*t] * tileb[k1+j*t] ;