parola chiave funzionale per un'allocazione CUDA memoria unificata

voti
0

Sto iniziando con programmazione CUDA e come inizio di attuazione di un integratore particella, feci una classe integratore che contiene i dati relativi particelle e dovrebbe essere in grado di integrare. I dati provengono da un'altra classe contenitore, e voglio allocare questi dati nella memoria unificata. A tal fine, ho una funzione membro '_allocate', tutto ciò che fa è chiamare cudaMallocManaged per le variabili membro. Ora mi chiedevo in che tipo di parola chiave funzionale dovrei avvolgere questa funzione.

Ho letto che non è possibile utilizzare 'globale' in una definizione di classe, in questo momento sto usando sia host e il dispositivo, in quanto memoria unificata dovrebbe essere disponibile sia per host e il dispositivo, ma non sono sicuro se questo è il modo corretto.

Questa è la classe mi piacerebbe implementare questo in:


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

Non so se questo è rilevante per la parola chiave funzionale, ma voglio anche controllare cudaError dopo l'assegnazione per vedere se ha avuto successo

È pubblicato 24/10/2019 alle 12:57
fonte dall'utente
In altre lingue...                            

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