J'ai lu quelques threads sur stackoverflow sur les tableaux 2D et cudaMallocPitch et j'ai essayé d'utiliser cudaMallocPitch avec la petite documentation que j'ai trouvée. Cependant, je suis maintenant confronté à un problème.Tableau 2D avec CUDA et cudaMallocPitch
je besoin de passer par un tableau et faire quelque chose de similaire:
for(int k=0; k<100; ++k){
for(i=SID; i<SID+stride; ++i){
while(-1 < j && Driver[k][j] != Road[i]){
j = Pilot[j][k];
}
++j;
}
}
Je me demandais donc, comment dois-je adapter ce code pour le faire fonctionner avec le terrain, parce que j'ai lu que je devais mettre à jour le pointeur au début de la ligne. Bien sûr, mon noyau reçoit ce qui suit:
__global__ void driving(char *Driver, size_t pitch_driver,
char *Road, int *Pilot, size_t pitch_pilot)
Et je ne suis pas vraiment sûr de savoir comment faire les choses à travailler, je l'ai lu et d'essayer, mais il semble ne fonctionne pas à l'heure actuelle.
Merci.
Edit 1: Je lis ce fil en particulier: How to use 2D Arrays in CUDA? et suis tombé sur les lignes:
for (int row = 0; row < rowCount; row++)
{
// update the pointer to point to the beginning of the next row
float* rowData = (float*)(((char*)d_array) + (row * pitch));
for (int column = 0; column < columnCount; column++)
{
rowData[column] = 123.0; // make every value in the array 123.0
destinationArray[(row*columnCount) + column] = rowData[column];
}
}
qui est mise à jour le pointeur de la ligne suivante, I'am ne sais pas comment utiliser faire mes 2 boucles et tout en travaillant comme dans le code précédent. À l'heure actuelle, je ne peux accéder qu'à une dimension de ma matrice mais pas à l'autre.
il renvoie la valeur 2, mais lorsque j'essaie mes comparaisons multiples, il ne renvoie que 0, ou même comparer deux valeurs ne fonctionnent pas.
Qu'est-ce qui ne fonctionne pas exactement? Quelle partie du processus ne comprenez-vous pas? – talonmies
Cela ne fonctionne pas lorsque j'essaie de parcourir la matrice. Basé sur quelque chose de similaire à ce que j'ai édité. – Anoracx
Je pense que vos questions se résument à ceci: de vrais tableaux 2D posent des problèmes en C, et encore plus de problèmes en CUDA. Au lieu de cela, 'cudaMallocPitch()' représente le tableau 2D en tant que tableau 1D auquel vous accédez simplement comme: 'array [row * pitch + column];'. C'est tout. Si vous avez vraiment besoin d'un pointeur au début d'une ligne, vous pouvez utiliser 'ptr = & array [row * pitch];' – Peter