/home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-composable-kernel/checkouts/develop/include/ck/library/utility/device_memory.hpp Source File

/home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-composable-kernel/checkouts/develop/include/ck/library/utility/device_memory.hpp Source File#

Composable Kernel: /home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-composable-kernel/checkouts/develop/include/ck/library/utility/device_memory.hpp Source File
device_memory.hpp
Go to the documentation of this file.
1 // Copyright (c) Advanced Micro Devices, Inc., or its affiliates.
2 // SPDX-License-Identifier: MIT
3 
4 #pragma once
5 
6 #include <hip/hip_runtime.h>
7 
8 namespace ck {
9 
10 template <typename T>
11 __global__ void set_buffer_value(T* p, T x, uint64_t buffer_element_size)
12 {
13  for(uint64_t i = threadIdx.x; i < buffer_element_size; i += blockDim.x)
14  {
15  p[i] = x;
16  }
17 }
18 
23 struct DeviceMem
24 {
25  DeviceMem() : mpDeviceBuf(nullptr), mMemSize(0) {}
26  DeviceMem(std::size_t mem_size);
27  void Realloc(std::size_t mem_size);
28  void* GetDeviceBuffer() const;
29  std::size_t GetBufferSize() const;
30  void ToDevice(const void* p) const;
31  void ToDevice(const void* p, const std::size_t cpySize) const;
32  void FromDevice(void* p) const;
33  void FromDevice(void* p, const std::size_t cpySize) const;
34  void SetZero() const;
35  template <typename T>
36  void SetValue(T x) const;
38 
39  void* mpDeviceBuf;
40  std::size_t mMemSize;
41 };
42 
43 template <typename T>
44 void DeviceMem::SetValue(T x) const
45 {
46  if(mMemSize % sizeof(T) != 0)
47  {
48  throw std::runtime_error("wrong! not entire DeviceMem will be set");
49  }
50 
51  set_buffer_value<T><<<1, 1024>>>(static_cast<T*>(mpDeviceBuf), x, mMemSize / sizeof(T));
52 }
53 
54 } // namespace ck
Definition: ck.hpp:270
__global__ void set_buffer_value(T *p, T x, uint64_t buffer_element_size)
Definition: device_memory.hpp:11
unsigned __int64 uint64_t
Definition: stdint.h:136
Container for storing data in GPU device memory.
Definition: device_memory.hpp:24
void FromDevice(void *p) const
std::size_t GetBufferSize() const
void SetZero() const
void * mpDeviceBuf
Definition: device_memory.hpp:39
DeviceMem()
Definition: device_memory.hpp:25
void ToDevice(const void *p, const std::size_t cpySize) const
DeviceMem(std::size_t mem_size)
void SetValue(T x) const
Definition: device_memory.hpp:44
void FromDevice(void *p, const std::size_t cpySize) const
void Realloc(std::size_t mem_size)
std::size_t mMemSize
Definition: device_memory.hpp:40
void * GetDeviceBuffer() const
void ToDevice(const void *p) const