J'utilise cudaMallocHost()
avec cudaFreeHost()
dans une classe. Un exemple de mon code:cudaFreeHost() erreur arguments invalides
#include "cuda.h"
#include "cuda_runtime.h"
class myClass{
public:
int* bitmap[5];
void Malloc(){
for (int i = 0 ; i < 5 ; i++){
cudaMallocHost(&bitmap[i], sizeof(int)*10000);
memset(bitmap[i], 0, sizeof(int)*10000);
}
}
void Delete(){
for (int i = 0 ; i < 5; i++){
cudaFreeHost(bitmap[i]);
}
}
};
int main(){
myClass mc;
mc.Malloc();
//copy 'bitmap[]' to gpu and call some kernel function
cudaDeviceSynchronize();
mc.Delete();
}
L'erreur de retour de code ci-dessus des arguments non valides (valeur 11) lors de l'appel cudaFreeHost()
, cudaFreeHost
ne renvoie aucune erreur.
J'ai essayé de changer de tableau de pointeur en variable différente mais les erreurs se produisent toujours. J'ai même mis le cudaFreeHost()
juste après cudaMallocHost()
mais il y a encore des erreurs.
J'ai vérifié que l'erreur ne se produit pas à chaque fois que j'appelle cudaFreeHost()
. Le cudaDeviceSynchronize()
est ajouté pour s'assurer que toutes les opérations de copie sont effectuées.
Si je change toute l'opération cudaHost en fonctionnement normal (c'est-à-dire nouveau et supprimer), le programme fonctionne correctement.
J'ai essayé de changer chaque variable dans bitmap à b1, b2, b3, b4, b5 comme suit, mais la même erreur se produit.
cudaMallocHost(&b1, sizeof(int) * 10000);
cudaFreeHost(b1);
Pouvez-vous fournir votre code original? l'exemple que vous fournissez n'est pas légal C++ – willkill07
try 'int * bitmap [5];' au lieu de 'int bitmap [5];' –
@ willkill07 Désolé pour le code bâclé. Je l'ai édité et il devrait être légal C++ maintenant – Edward