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/2/20/Jacket.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')