Différences entre les versions de « Jacket »

Ligne 16 : Ligne 16 :
 
== Exemples ==
 
== Exemples ==
  
===Exemple 1===
+
Dans les exemples suivants, la fonction [http://wiki.accelereyes.com/wiki/index.php/TIMEIT TIMEIT] de Jacket est utilisée afin de chronométrer le temps d'exécution d'un segment de code ou d'une fonction tournant sur CPU ou sur GPU.  
On utilise la fonction [http://wiki.accelereyes.com/wiki/index.php/TIMEIT TIMEIT] de Jacket. La fonction TIMEIT sert à calculer le temps de calcul par les processeurs (GPU ou CPU).  
+
 
 +
=== Addition matricielle ===
  
 
<pre>
 
<pre>
 
addpath(genpath('/local/jacket-2.3/jacket/engine/'))
 
addpath(genpath('/local/jacket-2.3/jacket/engine/'))
  
clear; clear gpu_hook;
+
clear; clear gpu_hook;   % La mémoire du CPU et celle du GPU sont effacées.
  
 
n=6000
 
n=6000
  
Acpu=rand(n,n,'single');
+
Acpu=rand(n,n,'single'); % Déclaration de 2 matrices aléatoires (précision simple) sur CPU.
 
Bcpu=rand(n,n,'single');
 
Bcpu=rand(n,n,'single');
  
Agpu=gsingle(Acpu); %on déclare la même matrice, mais cette fois-ci pour le GPU (c.-à-d., gsingle)
+
Agpu=gsingle(Acpu);       % Copie des matrices précédentes sur GPU.
 
 
 
Bgpu=gsingle(Bcpu);
 
Bgpu=gsingle(Bcpu);
  
tCpuPlus=timeit(@() Acpu+Bcpu);
+
tCpuPlus=timeit(@() Acpu+Bcpu); % Mesure du temps d'exécution de l'addition des 2 matrices
 
+
tGpuPlus=timeit(@() Agpu+Bgpu); % pour le CPU et pour le GPU.
tGpuPlus=timeit(@() Agpu+Bgpu);
 
 
 
  
fprintf('Addition: %f\n', tCpuPlus/tGpuPlus); % On compare le temps des deux calculs.
+
fprintf('Addition: %f\n', tCpuPlus/tGpuPlus); % Comparaison des 2 temps.
  
% Le résultat: « Addition: 17.26681 »
+
% Résultat : « Addition: 17.26681 »
% Le verdict: l'addition matricielle sur GPU est 17 fois plus rapide.   
+
% Verdict: l'addition matricielle sur GPU est 17 fois plus rapide.   
 
</pre>
 
</pre>
  

Version du 25 juin 2013 à 11:17


Jacket Logo.png

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 les machines tigre et lionceau seulement.

Présentation donnée par Alexandre Desfossés Foucault : http://dms.umontreal.ca/wiki/images/d/d0/PresentationJacket0.pdf

Exemples

Dans les exemples suivants, la fonction TIMEIT de Jacket est utilisée afin de chronométrer le temps d'exécution d'un segment de code ou d'une fonction tournant sur CPU ou sur GPU.

Addition matricielle

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

clear; clear gpu_hook;    % La mémoire du CPU et celle du GPU sont effacées.

n=6000

Acpu=rand(n,n,'single');  % Déclaration de 2 matrices aléatoires (précision simple) sur CPU.
Bcpu=rand(n,n,'single');

Agpu=gsingle(Acpu);       % Copie des matrices précédentes sur GPU.
Bgpu=gsingle(Bcpu);

tCpuPlus=timeit(@() Acpu+Bcpu);  % Mesure du temps d'exécution de l'addition des 2 matrices
tGpuPlus=timeit(@() Agpu+Bgpu);  % pour le CPU et pour le GPU.

fprintf('Addition: %f\n', tCpuPlus/tGpuPlus);  % Comparaison des 2 temps.

% Résultat : « Addition: 17.26681 »
% Verdict: l'addition matricielle sur GPU est 17 fois plus rapide.  

Exemple 2

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

clear; clear gpu_hook;

% Chronométrons pour comparer le temps de calcul du CPU au temps de calcul du GPU.

minSize = 100; maxSize = 2000; it = 100;

sizes = minSize:it:maxSize;

nbSizes = length(sizes);

timeMultGPU = zeros(nbSizes,1);

timeMultCPU = zeros(nbSizes,1);

currentTest = 1;

for currentSize = minSize:it:maxSize

	G1=grand(currentSize); G2=grand(currentSize);

	G3=double(G1); G4=double(G2);

	timeMultGPU(currentTest) = timeit(@() G1*G2);  

	timeMultCPU(currentTest) = timeit(@() G3*G4);

	currentTest = currentTest + 1;

end

timeMultGPU          %Le temps calculé pour le GPU

timeMultCPU          %Le temps calculé pour le CPU

timeMultCPU/timeMultGPU          %Le rapport entre les deux temps calculé. 

plot(minSize:it:maxSize,timeMultGPU,'-or')

hold on

plot(minSize:it:maxSize,timeMultCPU,'-xb')

set(gca,'FontSize',16)

title('Temps de calcul GPU vs CPU pour la multiplication matricielle')

xlabel('Taille des matrices')

ylabel('Temps de calcul (s)')

legend('GPU','CPU','Location','NorthWest')

Exemple 3 (GFOR)

Dans cet exemple on va exécuter plusieurs itérations d'une boucle «for» simultanément sur le GPU. Tous les m multiplications matricielles sont réalisées simultanément.

clear; clear gpu_hook;

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


n=5;
m=20;

A = grand(n,n,m);  % On crée une matrice (un tableau) sur le GPU.

B = gones(n);

gfor p = 1:m

    A(:,:,p) = A(:,:,p) * B

gend

Voir aussi

Articles connexes

Références externes


La dernière modification de cette page a été faite le 25 juin 2013 à 11:17.