Différences entre les versions de « Jacket »

Ligne 84 : Ligne 84 :
  
 
===Exemple 2===
 
===Exemple 2===
 +
  
 
addpath(genpath('/local/jacket-2.3/jacket/engine/'))
 
addpath(genpath('/local/jacket-2.3/jacket/engine/'))
 
 
format short e
 
format short e
  
Ligne 93 : Ligne 93 :
  
 
G1 = gones(100);
 
G1 = gones(100);
 
 
G2 = 2 * gones(100);
 
G2 = 2 * gones(100);
 
 
result = G1 * G2;
 
result = G1 * G2;
  
Ligne 103 : Ligne 101 :
  
 
%% Chronométrons pour comparer le temps de calcul du cpu au temps de calcul du gpu
 
%% Chronométrons pour comparer le temps de calcul du cpu au temps de calcul du gpu
 
 
% Multiplication sur le GPU :
 
% Multiplication sur le GPU :
  
 
maxSize = 1510;
 
maxSize = 1510;
 
+
sizes = 10:100:maxSize;
 +
nbSizes = length(sizes);
 
timeMultJacket = zeros(nbSizes,1);
 
timeMultJacket = zeros(nbSizes,1);
  
Ligne 114 : Ligne 112 :
 
for currentSize = 10:100:maxSize
 
for currentSize = 10:100:maxSize
  
tic
+
    tic
 
 
G1=grand(currentSize);
 
 
 
G2=2*grand(currentSize);
 
 
 
result = G1*G2;
 
 
 
timeMultJacket(currentTest) = toc;
 
 
 
currentTest = currentTest + 1;
 
  
 +
    G1=grand(currentSize);
 +
    G2=2*grand(currentSize);
 +
    result = G1*G2;
 +
    gsync
 +
    timeMultJacket(currentTest) = toc;
 +
    currentTest = currentTest + 1;
 
end
 
end
  
Ligne 136 : Ligne 130 :
  
 
currentTest = 0;
 
currentTest = 0;
 
 
for currentSize = 10:100:maxSize
 
for currentSize = 10:100:maxSize
 +
    currentTest = currentTest + 1;
 +
    tic
  
currentTest = currentTest + 1;
+
    G3 = rand(currentSize);
 
+
    G4 = 2*rand(currentSize);
tic
+
    result = G3*G4;
  
      
+
     timeMultCPU(currentTest) = toc;
G3 = rand(currentSize);
 
 
 
G4 = 2*rand(currentSize);
 
 
 
result = G3*G4;
 
 
 
timeMultCPU(currentTest) = toc;
 
 
      
 
      
 
end
 
end
Ligne 157 : Ligne 145 :
  
 
plot(10:100:1510,timeMultJacket,'-or')
 
plot(10:100:1510,timeMultJacket,'-or')
 
 
hold on
 
hold on
 
 
plot(10:100:1510,timeMultCPU,'-xb')
 
plot(10:100:1510,timeMultCPU,'-xb')
 
 
set(gca,'FontSize',16)
 
set(gca,'FontSize',16)
 
 
title('Temps de calcul JACKET vs CPU pour la multiplication matricielle')
 
title('Temps de calcul JACKET vs CPU pour la multiplication matricielle')
 
 
xlabel('Taille des matrices')
 
xlabel('Taille des matrices')
 
 
ylabel('Temps de calcul')
 
ylabel('Temps de calcul')
 +
legend('Jacket','CPU')
  
legend('Jacket','CPU')
 
  
  

Version du 10 avril 2013 à 14:53


Le logo de Jacket.

Jacket est un toolbox propriétaire pour MATLAB qui permet l'exécution de code sur GPUs. Similaire à GPUmat, son cousin gratuit, pour sa syntaxe, Jacket comprend cependant davantage de fonctions implémentées et accélère également l'affichage des graphismes 2d ou 3d, en faisant usage du GPU.

Guide

Attention: Jacket est installé sur Tigre et Lionceau.

Présentation donnée par Alexandre Desfosses Foucault: http://dms.umontreal.ca/wiki/images/9/9a/PresentationJacket.pdf


Exemples

Exemple 1

clear

addpath(genpath('/local/jacket-2.3/jacket/engine/'))

%% Exécution de plusieurs opérations indépendantes sur le CPU

%Création des matrices sur le CPU

matrixSize = 2000;

A = rand(matrixSize);

b = ones(matrixSize,1);

tic

%pour plusieurs valeurs de p différentes, on résoud le système linéaire

for p = 1:50

x = linsolve(A,p*b);

end

allCpuTime = toc


%% On refait la même chose, en mettant les variables sur le gpu

A = gdouble(A); b = gdouble(b);

tic

%pour plusieurs valeurs de p différentes, on résoud le système linéaire

for p = 1:50

x = linsolve(A,p*b);

end

gpuVariablesForLoopTime = toc


%% On utilise GFOR pour faire tourner toutes résolutions linéaires en même temps

tic

gfor p = 1:50

x = linsolve(A,p*b);

gend

GFORTime = toc

%% Résultats %Variables sur cpu : 1.4222e+01 % Variables sur GPU et boucle for : 4.4444e+00 % Variables sur GPU et boucle GFOR : 2.5247e+00

%Attention, chiffres valides pour une matrice 2000x2000


Exemple 2

addpath(genpath('/local/jacket-2.3/jacket/engine/')) format short e


%% multiplication matricielle, calcul sur le GPU

G1 = gones(100); G2 = 2 * gones(100); result = G1 * G2;

% seule différence : gones au lieu de ones


%% Chronométrons pour comparer le temps de calcul du cpu au temps de calcul du gpu % Multiplication sur le GPU :

maxSize = 1510;

sizes = 10:100:maxSize;
nbSizes = length(sizes);

timeMultJacket = zeros(nbSizes,1);

currentTest = 1;

for currentSize = 10:100:maxSize

   tic
   G1=grand(currentSize);
   G2=2*grand(currentSize);
   result = G1*G2;
   gsync
   timeMultJacket(currentTest) = toc;
   currentTest = currentTest + 1;

end

%% Multiplication matricielle, calcul sur le CPU

timeMultJacket

timeMultCPU = zeros(nbSizes,1);


currentTest = 0; for currentSize = 10:100:maxSize

   currentTest = currentTest + 1;
   tic
   G3 = rand(currentSize);
   G4 = 2*rand(currentSize);
   result = G3*G4;
   timeMultCPU(currentTest) = toc;
   

end

timeMultCPU

plot(10:100:1510,timeMultJacket,'-or') hold on plot(10:100:1510,timeMultCPU,'-xb') set(gca,'FontSize',16) title('Temps de calcul JACKET vs CPU pour la multiplication matricielle') xlabel('Taille des matrices') ylabel('Temps de calcul') legend('Jacket','CPU')



Voir aussi

Articles connexes

Références externes


La dernière modification de cette page a été faite le 10 avril 2013 à 14:53.