Différences entre les versions de « Jacket »
Ligne 24 : | Ligne 24 : | ||
matrixSize = 2000; | matrixSize = 2000; | ||
+ | |||
A = rand(matrixSize); | A = rand(matrixSize); | ||
+ | |||
b = ones(matrixSize,1); | b = ones(matrixSize,1); | ||
Ligne 87 : | Ligne 89 : | ||
G1 = gones(100); | G1 = gones(100); | ||
+ | |||
G2 = 2 * gones(100); | G2 = 2 * gones(100); | ||
+ | |||
result = G1 * G2; | result = G1 * G2; | ||
Ligne 95 : | Ligne 99 : | ||
%% 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; | ||
+ | |||
timeMultJacket = zeros(nbSizes,1); | timeMultJacket = zeros(nbSizes,1); | ||
Version du 27 février 2013 à 14:21
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
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.0/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.0/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;
timeMultJacket = zeros(nbSizes,1);
currentTest = 1;
for currentSize = 10:100:maxSize
tic
G1=grand(currentSize);
G2=2*grand(currentSize);
result = G1*G2;
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')