J'essaie d'ajouter les lignes d'une matrice 4800x9600 ensemble, ce qui entraîne une matrice 1x9600.CUDA Ajouter des lignes d'une matrice
Ce que j'ai fait est divisé le 4800x9600 en 9.600 matrices de longueur 4800 chacun. J'effectue ensuite une réduction sur les 4800 éléments.
Le problème est, ce qui est vraiment lent ...
Quelqu'un at-il des suggestions? Fondamentalement, j'essaie d'implémenter la fonction somme (...) de MATLAB.
Voici le code que j'ai vérifié fonctionne très bien, il est juste qu'il est vraiment lent:
void reduceRows(Matrix Dresult,Matrix DA)
{
//split DA into chunks
Matrix Dchunk;
Dchunk.h=1;Dchunk.w=DA.h;
cudaMalloc((void**)&Dchunk.data,Dchunk.h*Dchunk.w*sizeof(float));
Matrix DcolSum;
DcolSum.h=1;DcolSum.w=1;
//cudaMalloc((void**)&DcolSum.data,DcolSum.h*DcolSum.w*sizeof(float));
int i;
for(i=0;i<DA.w;i++) //loop over each column
{
//printf("%d ",i);
cudaMemcpy(Dchunk.data,&DA.data[i*DA.h],DA.h*sizeof(float),cudaMemcpyDeviceToDevice);
DcolSum.data=&Dresult.data[i];
reduceTotal(DcolSum,Dchunk);
}
cudaFree(Dchunk.data);
}
Matrice est définie comme:
typedef struct{
long w;
long h;
float* data;
}Matrix;
ReduceTotal() appelle simplement la norme réduction NVIDIA , résume tous les éléments dans Dchunk et met la réponse dans DcolSum.
Je suis sur le point de faire tout cela sur la CPU si je ne peux pas trouver une réponse ...; (
Un grand merci à l'avance,