Blender V5.0
cuda/device_impl.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#ifdef WITH_CUDA
6
7# include "device/cuda/kernel.h"
8# include "device/cuda/queue.h"
9# include "device/cuda/util.h"
10# include "device/device.h"
11
12# ifdef WITH_CUDA_DYNLOAD
13# include "cuew.h"
14# else
15# include <cuda.h>
16# include <cudaGL.h>
17# endif
18
20
21class DeviceQueue;
22
23class CUDADevice : public GPUDevice {
24
25 friend class CUDAContextScope;
26
27 public:
28 CUdevice cuDevice;
29 CUcontext cuContext;
30 CUmodule cuModule;
31 int pitch_alignment;
32 int cuDevId;
33 int cuDevArchitecture;
34 bool first_error;
35
36 CUDADeviceKernels kernels;
37
38 static bool have_precompiled_kernels();
39
40 BVHLayoutMask get_bvh_layout_mask(uint /*kernel_features*/) const override;
41
42 void set_error(const string &error) override;
43
44 CUDADevice(const DeviceInfo &info, Stats &stats, Profiler &profiler, bool headless);
45
46 ~CUDADevice() override;
47
48 bool support_device(const uint /*kernel_features*/);
49
50 bool check_peer_access(Device *peer_device) override;
51
52 bool use_adaptive_compilation();
53
54 string compile_kernel_get_common_cflags(const uint kernel_features);
55
56 string compile_kernel(const string &cflags,
57 const char *name,
58 const char *base = "cuda",
59 bool force_ptx = false);
60
61 bool load_kernels(const uint kernel_features) override;
62 void reserve_local_memory(const uint kernel_features);
63
64 /* All memory types. */
65 void mem_alloc(device_memory &mem) override;
66 void mem_copy_to(device_memory &mem) override;
67 void mem_move_to_host(device_memory &mem) override;
68 void mem_copy_from(
69 device_memory &mem, const size_t y, size_t w, const size_t h, size_t elem) override;
70 void mem_zero(device_memory &mem) override;
71 void mem_free(device_memory &mem) override;
72
73 device_ptr mem_alloc_sub_ptr(device_memory &mem, const size_t offset, size_t /*size*/) override;
74
75 /* Global memory. */
76 void global_alloc(device_memory &mem);
77 void global_copy_to(device_memory &mem);
78 void global_free(device_memory &mem);
79
80 /* Texture memory. */
81 void tex_alloc(device_texture &mem);
82 void tex_copy_to(device_texture &mem);
83 void tex_free(device_texture &mem);
84
85 /* Device side memory. */
86 void get_device_memory_info(size_t &total, size_t &free) override;
87 bool alloc_device(void *&device_pointer, const size_t size) override;
88 void free_device(void *device_pointer) override;
89
90 /* Shared memory. */
91 bool shared_alloc(void *&shared_pointer, const size_t size) override;
92 void shared_free(void *shared_pointer) override;
93 void *shared_to_device_pointer(const void *shared_pointer) override;
94
95 /* Memory copy. */
96 void copy_host_to_device(void *device_pointer, void *host_pointer, const size_t size) override;
97 void const_copy_to(const char *name, void *host, const size_t size) override;
98
99 bool should_use_graphics_interop(const GraphicsInteropDevice &interop_device,
100 const bool log) override;
101
102 unique_ptr<DeviceQueue> gpu_queue_create() override;
103
104 int get_num_multiprocessors();
105 int get_max_num_threads_per_multiprocessor();
106
107 protected:
108 bool get_device_attribute(CUdevice_attribute attribute, int *value);
109 int get_device_default_attribute(CUdevice_attribute attribute, const int default_value);
110};
111
113
114#endif
void BLI_kdtree_nd_ free(KDTree *tree)
unsigned int uint
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition btQuadWord.h:119
virtual void mem_move_to_host(device_memory &mem)=0
virtual void mem_zero(device_memory &mem)=0
virtual unique_ptr< DeviceQueue > gpu_queue_create()
virtual void const_copy_to(const char *name, void *host, const size_t size)=0
virtual bool load_kernels(uint)
virtual void set_error(const string &error)
virtual BVHLayoutMask get_bvh_layout_mask(const uint kernel_features) const =0
virtual bool should_use_graphics_interop(const GraphicsInteropDevice &, const bool=false)
virtual bool check_peer_access(Device *)
virtual void mem_free(device_memory &mem)=0
virtual void mem_copy_from(device_memory &mem, const size_t y, size_t w, const size_t h, size_t elem)=0
virtual void mem_copy_to(device_memory &mem)=0
virtual device_ptr mem_alloc_sub_ptr(device_memory &, size_t, size_t)
virtual void mem_alloc(device_memory &mem)=0
#define CCL_NAMESPACE_END
#define log
static void error(const char *str)
int BVHLayoutMask
Definition params.h:50
const char * name
virtual bool shared_alloc(void *&shared_pointer, const size_t size)=0
virtual void shared_free(void *shared_pointer)=0
virtual void get_device_memory_info(size_t &total, size_t &free)=0
virtual bool alloc_device(void *&device_pointer, const size_t size)=0
virtual void * shared_to_device_pointer(const void *shared_pointer)=0
virtual void copy_host_to_device(void *device_pointer, void *host_pointer, const size_t size)=0
virtual void free_device(void *device_pointer)=0
uint64_t device_ptr
Definition types_base.h:44