cuvinte cheie funcțională pentru o alocare de memorie unificată CUDA

voturi
0

Sunt incepand cu programare CUDA și ca un început pentru implementarea unui integrator de particule, am făcut o clasă de integrator care deține date despre particule și ar trebui să fie capabil să-l integreze. Datele provin dintr-o altă clasă de container, și vreau să aloce aceste date pe memoria unificată. În acest scop, am o funcție de membru „_allocate“, tot ce face este apela cudaMallocManaged pentru variabilele membre. Acum, mă întrebam în ce fel de cuvinte cheie funcționale ar trebui să înfășurați această funcție.

Am citit că nu puteți utiliza „globală“ într-o definiție de clasă, chiar acum eu sunt, folosind atât gazdă și dispozitiv, deoarece memoria unificată ar trebui să fie disponibilă atât gazdă și dispozitiv, dar nu sunt sigur dacă acest lucru este modul corect.

Aceasta este clasa aș vrea să pună în aplicare acest lucru în:


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));
}

Nu știu dacă acest lucru este relevant pentru cuvântul cheie funcțional, dar, de asemenea, doresc să verifice cudaError după alocarea pentru a vedea dacă acesta a avut succes

Întrebat 24/10/2019 la 12:57
sursa de către utilizator
În alte limbi...                            

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