Différences entre les versions de « Jacket »
Ligne 130 : | Ligne 130 : | ||
</pre> | </pre> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Version du 1 mai 2013 à 11:08
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 Desfossés Foucault : http://dms.umontreal.ca/wiki/images/1/14/Jacketdiapos.pdf
Exemples
Exemple 1
On utilise la fonction TIMEIT de Jacket. La fonction TIMEIT sert à calculer le temps de calcul par les processeurs (GPU ou CPU).
addpath(genpath('/local/jacket-2.3/jacket/engine/')) clear; clear gpu_hook; n=6000 Acpu=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) Bgpu=gsingle(Bcpu); tCpuPlus=timeit(@() Acpu+Bcpu); tGpuPlus=timeit(@() Agpu+Bgpu); fprintf('Addition: %f\n', tCpuPlus/tGpuPlus); %on compare les deux calculs % Le résultat: «Addition: 17.26681» % Le verdict: l'addition matricielle en utilisant le 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 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