Funkcionális kulcsszót egységes memóriafoglalási CUDA

szavazat
0

Én kezdő ki CUDA programozási és a kezdetektől a végrehajtási részecske integrátor, tettem integrátor osztály, amely az előbbi adatokat részecskék és képesnek kell lennie arra, hogy integrálni. Az adatok származik egy másik tartályba osztály, és szeretnék kiosztani ezeket az adatokat az egységes memória. Erre a célra van egy tag függvény „_allocate”, annyit tesz, hívja cudaMallocManaged az elem változó. Most arra gondoltam, hogy milyen fajta funkcionális kulcsszó kéne lezárja ezt a funkciót.

Azt olvastam, hogy nem tudja használni a „globális” egy osztály definíció, most én vagyok a gazda- és a készülék, mivel az egységes memória kell rendelkezésre állniuk a gazda- és a készülék, de nem vagyok biztos abban, hogy ez a helyes út.

Ez az osztály szeretnék végre ezt:


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

Nem tudom, ha ez releváns funkcionális kulcsszó, de azt is szeretné, hogy ellenőrizze cudaError elosztása után, hogy ha ez sikeres volt

A kérdést 24/10/2019 11:57
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
0

Minden lehívható, hogy lehet nevezni a készüléket csak kell díszített __device__. és ha gazda csak kell díszített __host__.

Ön használja __host__ __device__csak lehívható, hogy fogják hívni a gazda- és a készüléket.

cudaMallocManaged fogadó csak kód:

__host__​cudaError_t cudaMallocManaged ( void** devPtr, size_t size, unsigned int  flags = cudaMemAttachGlobal )
Allocates memory that will be automatically managed by the Unified Memory system.

így a kód csak munka host.

Válaszolt 24/10/2019 18:42
a forrás felhasználó

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