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; | ||
+ | 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 | ||
− | + | G3 = rand(currentSize); | |
− | + | G4 = 2*rand(currentSize); | |
− | + | result = G3*G4; | |
− | + | timeMultCPU(currentTest) = toc; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | 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') | ||
− | |||
Version du 10 avril 2013 à 14:53
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')