2010-01-28 7 views
4

J'alloue des matrices flottantes (assez grandes, soit 9 000 000 éléments) sur le GPU en utilisant cudaMalloc((void**)&(storage->data), size * sizeof(float)). À la fin de mon programme, je libère cette mémoire en utilisant cudaFree(storage->data);.Libérer la mémoire CUDA lentement lente

Le problème est que la première désallocation est vraiment lente, environ 10 secondes, alors que les autres sont quasi instantanées.

Ma question est la suivante: qu'est-ce qui pourrait causer cette différence? La mémoire de désallocation sur un GPU est-elle généralement lente?

Répondre

3

Comme indiqué sur les forums NVIDIA, il est presque certainement un problème avec la façon dont vous chronométrer les choses plutôt qu'avec cudaFree.

+0

Oui, c'était le problème. J'ai demandé à la fois sur les forums SO et nVidia de s'assurer que quelqu'un de compétent répondra, et j'ai envie de vouloir sur les deux;)! Des types impressionnants ! Merci ! – Wookai

1

ne devrait pas être si lent, sous Linux avec cuda 2.2, il prend une fraction de seconde. Avez-vous essayé d'exécuter des profileurs d'hôte et d'appareil pour voir exactement pourquoi un ralentissement? combien d'allocation séparée exécutez-vous ?, qui a une certaine pénalité mais pas si grande.

Questions connexes