Bonjour à tous,

J'aimerais faire du calcul parallèle sur GPU avec Matlab. Normalement la fonction arrayfun permet de faire cela. Dans un cadre classique, ça fonctionne très bien mais dans mon application, j'aimerais ajouter un tableau de données (data dans mon exemple) qui servira à toutes les cellules. Voici un exemple simple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
Nx = 32;
Nz = 64;
x = linspace(0,1,Nx);
z = linspace(0,1,Nz);
[X,Z] = meshgrid(x,z);
Nel = Nx*Nz;
 
data = randn(1000,1000);
 
X_gpu = gpuArray(X);
Z_gpu = gpuArray(Z);
O_GPU = arrayfun(@kernelSimple,X_gpu,Z_gpu,Nel,data);
Cela me renvoie l'erreur:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Error using parallel.gpu.GPUArray/arrayfun
Matrix dimensions must agree.
 
Error in MAIN_exempleSimple (line 31)
O_GPU = arrayfun(@kernelSimple,X_gpu,Z_gpu,Nel,data);
En fait, tant que les paramètres d'entrée sont scalaires, cela fonction très bien. J'ai essayé de convertir ma variable data en structure ou cell mais arrayfun ne prend pas ce type de variable en entrée... Avez-vous une idée pour utiliser un tableau en paramètre d'entrée de arrayfun ?

Merci d'avance !
Bonne soirée.

Mcewen