mot-clé fonctionnel pour une allocation mémoire unifiée cuda

voix
0

Je commence avec la programmation CUDA et en début de la mise en œuvre d'un intégrateur de particules, j'ai fait une classe d'intégrateur qui contient des données sur les particules et devrait être en mesure de l'intégrer. Les données proviennent d'une autre classe de conteneur, et je veux affecter ces données sur la mémoire unifiée. A cet effet, j'ai une fonction membre « _allocate », tout ce qu'il fait est d'appeler cudaMallocManaged pour les variables membres. Maintenant, je me demandais dans quel genre de mot-clé fonctionnelle j'envelopper cette fonction.

Je lis que vous ne pouvez pas utiliser « global » dans une définition de classe, en ce moment je suis en utilisant à la fois hôte et périphérique, étant donné que la mémoire unifiée devrait être disponible à la fois hôte et périphérique, mais je ne suis pas sûr que ce soit la bonne façon.

C'est la classe que je voudrais mettre en œuvre ce dans:


template <typename T>
class Leapfrog : public Integrator<T> {
  public:

   ...

  private:
    T *positions; 
    T *masses; 
    T *velocities; 
    T *types; 
    __device__ __host__ bool _allocate();
    __device__ __host__ bool _free();
    __device__ __host__ bool _load_data();
};

// allocates space on the unified memory for the 
// private variables positions, masses, velocities, types

template <typename T>
__host__ __device__ void Leapfrog<T>::_allocate(){
  cudaMallocManaged(&positions, particleset.N*3*sizeof(T));
  cudaMallocManaged(&masses, particleset.N*sizeof(T));
  cudaMallocManaged(&velocities, particleset.N*3*sizeof(T));
  cudaMallocManaged(&types, particleset.N*sizeof(T));
}

Je ne sais pas si cela est pertinent pour le mot-clé fonctionnel, mais je veux également vérifier cudaError après l'attribution pour voir si elle a réussi

Créé 24/10/2019 à 12:57
source utilisateur
Dans d'autres langues...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more