Skip to content
Snippets Groups Projects
sfx_memory_processing.cu 1.73 KiB
Newer Older
  • Learn to ignore specific revisions
  • 数学の武士's avatar
    数学の武士 committed
    #include "../includeCU/sfx_memory_processing.cuh"
    
    数学の武士's avatar
    .
    数学の武士 committed
    #include <cuda.h>
    #include <cuda_runtime_api.h>
    
    namespace memproc
    {
        template<>
        bool dealloc<MemType::GPU>(void *&array, size_t &allocated_size)
        {
            if(allocated_size > 0)
            {
                cudaFree(array);
                allocated_size = 0;
            }
    
            return true;
        }
    
        template<>
        bool dealloc<MemType::GPU>(void *&array)
        {
            cudaFree(array);
            return true;
        }
    
        template <>
        bool alloc<MemType::GPU>(void *&array, const size_t new_size)
        {
            cudaMalloc ( (void **)&array, new_size);
            cudaMemset(array, 0, new_size);
    
            return true;
        }
    
        template <>
        bool realloc<MemType::GPU>(void *&array, size_t &allocated_size, const size_t new_size)
        {
            if(new_size > allocated_size)
            {
                if(allocated_size > 0) dealloc<MemType::GPU>(array, allocated_size);
                allocated_size = new_size;
                cudaMalloc ( (void **)&array, new_size);
                cudaMemset(array, 0, new_size);
            }
    
            return true;
        }
    
        template <>
        bool memcopy<MemType::GPU, MemType::CPU>(void *dst, const void* src, const size_t copy_elem_size)
        {
            cudaMemcpy ( dst, src, copy_elem_size, cudaMemcpyHostToDevice);
    
            return true;
        }
    
        template <>
        bool memcopy<MemType::CPU, MemType::GPU>(void *dst, const void* src, const size_t copy_elem_size)
        {
            cudaMemcpy ( dst, src, copy_elem_size, cudaMemcpyDeviceToHost);
            return true;
        }
    
        template <>
        bool memcopy<MemType::GPU, MemType::GPU>(void *dst, const void* src, const size_t copy_elem_size)
        {
            cudaMemcpy ( dst, src, copy_elem_size, cudaMemcpyDeviceToDevice);
            return true;
        }
    }