MATLAB - VECTORISATION

Slides:



Advertisements
Présentations similaires
La Méthode de Simplexe Standardisation
Advertisements

Premier programme en C :
La boucle for : init7.c et init71.c
Rappels C.
Langage C# et Plate-forme .NET
Cours n° 6 Standard Template Library I.
Cours 5 – Comment bien échantillonner le signal audio
GEF 243B Programmation informatique appliquée
Cours n° 8 Conception et Programmation à Objets
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
la programmation en langage C
C.
Parallélisation d’un Algorithme CNFT
Exercices page JSP.
Paramètres et pointeurs
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
Système d’exploitation : Assembleur
Exercice Trame Ethernet
Nous allons vous présenter: - Photoshop - Algorithme et programmation
La mesure de tendance centrale
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Athapascan-1 Interface C++ de programmation parallèle
Mise en situation... m g l = 1 m l2 = 1 Positions: Vitesses:
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()
TRAITEMENT DE STRUCTURES
Rappel... Solution itérative de systèmes linéaires (suite et fin).
E. Canot J. Erhel C. De Dieuleveult Le code d´eau salée réunion hydrogrid le 11/10/2004.
Introduction à la programmation (Java)
Optimisation et parallélisation de code pour processeur à instructions SIMD multimedia François Ferrand.
HistoriqueHistorique Langage C++, parution du livre Bjarne Stroustrup Normalisation ANSI.
Conteneurs STL.
Algèbre linéaire (GCI –100)
1 PROTOTYPE PGC++ Vecteur_3D DÉFINITION. 2 class Vecteur_3D { private : float vx, vy, vz, vw; // Représentation en coordonnées homogènes. public : Vecteur_3D();
IFT 6800 Atelier en Technologies d’information
Maintenant que tu as compris, on va passer aux exercices Prends une feuille, un stylo, une règle.
Chapitre 9 Les sous-programmes.
Les pointeurs en C. valeur : main () { float valeur; void* pointeur; }
Introduction au Langage C
Initiation à la programmation en Python
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.

La librairie assert.h.
Cours du 25 octobre Mardi le 24 octobre
Structures des données
2.1 - Historique Chapitre 2 : Introduction au langage C++
DESSINS SCHEMATIQUES DES FIGURES
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
- énergie bornée (tend vers 0 lorsque
Cours 1 1 Java. Cours 1 2 Plan général 1.Introduction 2.Les types primitifs, évaluation d’expressions 3.Instructions for, if…. 4.Introduction de l’objet,
La notion de type revisitée en POO
Présentation rapide d’
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Cours C++ Fonctions Surcharge d’opérateurs Passage d’arguments
HistoriqueHistorique Langage C++, parution du livre Bjarne Stroustrup Normalisation ANSI.
Introduction au langage C Fonctions et Procédures
Novembre 2014J.Callot L.Piedfort1 TP1 Enoncé. novembre 2014J.Callot L.Piedfort2 Objectifs Générer un environnement de travail avec Code Warrior Prendre.
Les types composés Les enregistrements.
Les surcharges d'opérateurs
8PRO100 Éléments de programmation Les tableaux multi-dimensionnels.
ISBN Chapitre 10 L'implémentation des sous- programmes.
Matlab (Matrix Laboratory)
Processus Légers. Rappel sur le fork() fork() Processus 1 Pile Data Text Processus 2 Pile Data Text.
Calculer la somme de deux nombres entiers relatifs
PRO-1027 Programmation Scientifique en C
Informatique 2A Langage C 5ème séance. Déroulement de la séance 5 1 ère partie Étude des chaînes de caractères 2 ème partie Les structures 3.
Informatique 1A Langage C 6 ème séance 1. Objectifs de la séance 6  Allocation dynamique de mémoire  Application à la création de tableaux 2.
M. BENJELLOUN : 2005 Le but final est de programmer un jeu où l'ordinateur choisira un nombre aléatoire entre 0 et 100 que vous devez deviner.
Informatique 2A Langage C 4ème séance
Calcul mental 20 secondes par calcul..
renvoie la moyenne d’un tableau d’entiers
Transcription de la présentation:

MATLAB - VECTORISATION OPTIMISATION DES FONCTIONS MATLAB Moyenne 3x3 dans une image - images de 300x300 : ImS  ImD - fonction Matlab ( m ), 4 méthodes - traduction en C du code Matlab ( mex ) via MCC - fonction C compatible Matlab ( mex ) via MEX Tests sur 2 systèmes, avec Matlab 6.0 (R12) et Visual C/C++ 6.0 : - P 233 MHz 64Mo Win 98se - PIII 1 GHz 512Mo Win XP Pro

MATLAB – VECTORISATION ( 1 ) % Méthode 1  4 boucles imbriquées ( type langage C ) tic; for L=2:Nl-1, for C=2:Nc-1, Somme=0; for Ls=L-1:L+1, for Cs=C-1:C+1 Somme=Somme+ImS(Ls,Cs); end ImD(L,C)=Somme/9; end; Res(1)=toc;

MATLAB – VECTORISATION ( 2 ) % Méthode 2  2 boucles imbriquées, fonction somme vectorielle tic; for L=2:Nl-1, for C=2:Nc-1, Zone3x3=ImS(L-1:L+1,C-1:C+1); ImD(L,C)=sum(Zone3x3(:))/9; end end; Res(2)=toc; SUM

MATLAB – VECTORISATION ( 3 ) % Méthode 3  vectorisation : arrangement 3x3 en colonne % sur 9 lignes tic; for L=2:Nl-1, Bloc3xN=ImS(L-1:L+1,:); Col_9=[ [zeros(3,2) Bloc3xN];... [zeros(3,1) Bloc3xN zeros(3,1)];... [Bloc3xN zeros(3,2)] ]; ImD(L,2:Nc-1)=sum(Col_9(:,3:Nc)); end; ImD=ImD/9; Res(3)=toc; A B C 0 0 A B 0 0 C

MATLAB – VECTORISATION ( 4 ) % Méthode 4  vectorisation précédente et pré-allocations tic; Col_9=zeros(9,Nc+2); Bloc3xN=zeros(3,Nc); for L=2:Nl-1, Bloc3xN=ImS(L-1:L+1,:); Col_9(1:3,3:Nc+2)=Bloc3xN; Col_9(4:6,2:Nc+1)=Bloc3xN; Col_9(7:9,1:Nc)=Bloc3xN; ImD(L,2:Nc-1)=sum(Col_9(:,3:Nc)); end; ImD=ImD/9; Res(4)=toc;

MATLAB : C - MEX Appel de fonction C compatible Matlab ( mex ) ImDst = vecteur_c ( ImSrc ); #include "mex.h" #include <stdlib.h> #define INV9 (1./9.) void mexFunction(int Nres,mxArray *Res[],int Narg,const mxArray *Arg[]) { double *Ipo,*Mpo,*Ip,*Mp,Som,Div=INV9; int Nx,Ny,Txy,Nv8,Npix,V8[8]; const int *Dim; Dim=mxGetDimensions(Arg[0]); // dim.image Ny=Dim[0]; Nx=Dim[1]; Txy=Nx*Ny; Ipo=(double *)mxGetData(Arg[0]); // adresse V8[0]=-Ny-1; V8[1]=-Ny; V8[2]=-Ny+1; V8[3]=-1; // zone 3x3 V8[4]=1; V8[5]=Ny-1; V8[6]=Ny; V8[7]=Ny+1; Res[0]=mxCreateDoubleMatrix(Ny,Nx,mxREAL); // creation moyenne Mpo=(double *)mxGetData(Res[0]);

MATLAB : C - MEX ( suite ) Mp=Mpo+Ny; Ip=Ipo+Ny; for (Npix=Txy-2*Ny-2; Npix; Npix--) // calcul hors bordures { for (Som=*(++Ip),Nv8=8; Nv8; ) Som+=*(Ip+V8[--Nv8]); *(++Mp)=Som*Div; } Mp=Mpo; Ip=Ipo; for (Txy-=Ny,Npix=Ny; Npix; Npix--) // recopie bordures EW *(Mp+Txy)=*(Ip+Txy); *(Mp++)=*(Ip++); for (Txy=Ny-1,Npix=Nx-2; Npix; Npix--) // recopie bordures NS *(Mp+Txy)=*(Ip+Txy); *(Mp)=*(Ip); Mp+=Ny; Ip+=Ny;

MATLAB - CHONOMETRIE Chronométrie des méthodes de codage ( en secondes ) : 4 boucles 2 boucles vector. vector. + pré-alloc. P 233 m 64.7 22.5 2.6 1.6 P 233 mex 4.9 12.1 2.9 2.1 P 1G m 8.0 3.3 0.14 0.08 P 1G mex 0.9 1.9 0.12 0.13 C  mex ( * ) 0.1 0.01 ( * ) : avec appel DLL, création de l’image destination et gestion des bords

FIN DE PRESENTATION FIN DE PRESENTATION RETOUR AU PLAN FIN DE PRESENTATION