palavra-chave funcional para um cuda alocação de memória unificada

votos
0

Estou começando com programação CUDA e como um início para a implementação de um integrador de partículas, eu fiz uma classe integrador que mantém dados sobre partículas e deve ser capaz de integrá-lo. Os dados são de outra classe recipiente, e eu quero alocar esses dados na memória unificada. Para este fim, eu tenho uma função de membro '_allocate', tudo que faz é chamar cudaMallocManaged para as variáveis ​​de membro. Agora eu queria saber em que tipo de palavra-chave funcional I deve envolver esta função.

Eu li que você não pode usar 'global' em uma definição de classe, agora eu estou usando tanto host eo dispositivo, uma vez que a memória unificada deve estar disponível para ambos host e dispositivo, mas eu não tenho certeza se este é o caminho correto.

Esta é a classe que eu gostaria de implementar isso em:


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

Eu não sei se isso é relevante para a palavra-chave funcional, mas eu também querer verificar cudaError após a destinação para ver se ele foi bem sucedida

Publicado 24/10/2019 em 12:57
fonte usuário
Em outras línguas...                            

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