28#ifndef SPLA_CL_ACCELERATOR_HPP
29#define SPLA_CL_ACCELERATOR_HPP
42 #define CL_HPP_ENABLE_EXCEPTIONS
45#define CL_HPP_MINIMUM_OPENCL_VERSION 120
46#define CL_HPP_TARGET_OPENCL_VERSION 120
47#include <CL/opencl.hpp>
49#define VENDOR_CODE_NVIDIA "nvidia"
50#define VENDOR_CODE_INTEL "intel"
51#define VENDOR_CODE_AMD "amd"
52#define VENDOR_CODE_IMG "img"
54#define SPLA_OPENCL_PLATFORM "SPLA_OPENCL_PLATFORM"
55#define SPLA_OPENCL_DEVICE "SPLA_OPENCL_DEVICE"
77 const std::string&
get_name()
override;
90 [[nodiscard]]
const std::string&
get_vendor_name()
const {
return m_vendor_name; }
91 [[nodiscard]]
const std::string&
get_vendor_code()
const {
return m_vendor_code; }
100 [[nodiscard]]
bool is_nvidia()
const {
return m_is_nvidia; }
101 [[nodiscard]]
bool is_amd()
const {
return m_is_amd; }
102 [[nodiscard]]
bool is_intel()
const {
return m_is_intel; }
103 [[nodiscard]]
bool is_img()
const {
return m_is_img; }
106 cl::Platform m_platform;
108 cl::Context m_context;
109 std::unique_ptr<class CLProgramCache> m_cache;
110 std::unique_ptr<class CLCounterPool> m_counter_pool;
111 std::unique_ptr<class CLAllocLinear> m_alloc_linear;
112 std::unique_ptr<class CLAllocGeneral> m_alloc_general;
113 class CLAlloc* m_alloc_tmp =
nullptr;
115 std::string m_name =
"OpenCL";
116 std::string m_description;
117 std::string m_suffix =
"__cl";
118 std::string m_vendor_name;
119 std::string m_vendor_code;
120 uint m_vendor_id = 0;
123 uint m_max_local_mem = 0;
124 uint m_addr_align = 128;
125 uint m_default_wgs = 64;
126 uint m_wave_size = 32;
127 uint m_num_of_mem_banks = 32;
128 bool m_is_nvidia =
false;
129 bool m_is_amd =
false;
130 bool m_is_intel =
false;
131 bool m_is_img =
false;
133 ankerl::svector<cl::CommandQueue, 2> m_queues;
141 static inline CLAccelerator* get_acc_cl() {
Status of library operation execution.
Interface for an computations acceleration backend.
Definition accelerator.hpp:58
Single-device OpenCL acceleration implementation.
Definition cl_accelerator.hpp:68
uint get_max_cu() const
Definition cl_accelerator.hpp:93
cl::CommandQueue & get_queue_default()
Definition cl_accelerator.hpp:84
const std::string & get_vendor_name() const
Definition cl_accelerator.hpp:90
const std::string & get_description() override
Definition cl_accelerator.cpp:210
class CLAllocGeneral * get_alloc_general()
Definition cl_accelerator.hpp:87
bool is_intel() const
Definition cl_accelerator.hpp:102
uint get_max_local_mem() const
Definition cl_accelerator.hpp:95
bool is_amd() const
Definition cl_accelerator.hpp:101
uint get_default_wgs() const
Definition cl_accelerator.hpp:97
uint get_num_of_mem_banks() const
Definition cl_accelerator.hpp:99
uint get_max_wgs() const
Definition cl_accelerator.hpp:94
cl::Platform & get_platform()
Definition cl_accelerator.hpp:81
const std::string & get_vendor_code() const
Definition cl_accelerator.hpp:91
class CLCounterPool * get_counter_pool()
Definition cl_accelerator.hpp:86
class CLAlloc * get_alloc_tmp()
Definition cl_accelerator.hpp:88
bool is_img() const
Definition cl_accelerator.hpp:103
cl::Device & get_device()
Definition cl_accelerator.hpp:82
Status set_platform(int index) override
Definition cl_accelerator.cpp:66
uint get_vendor_id() const
Definition cl_accelerator.hpp:92
const std::string & get_suffix() override
Definition cl_accelerator.cpp:213
cl::Context & get_context()
Definition cl_accelerator.hpp:83
Status init() override
Definition cl_accelerator.cpp:42
uint get_wave_size() const
Definition cl_accelerator.hpp:98
const std::string & get_name() override
Definition cl_accelerator.cpp:207
Status set_device(int index) override
Definition cl_accelerator.cpp:89
class CLProgramCache * get_cache()
Definition cl_accelerator.hpp:85
bool is_nvidia() const
Definition cl_accelerator.hpp:100
uint get_addr_align() const
Definition cl_accelerator.hpp:96
~CLAccelerator() override
Status set_queues_count(int count) override
Definition cl_accelerator.cpp:181
Wrapper for default OpenCL buffer allcoation.
Definition cl_alloc_general.hpp:40
Base class for any device-local opencl buffer allocator.
Definition cl_alloc.hpp:39
Global pool with pre-allocated counters.
Definition cl_counter.hpp:75
Runtime cache for compiled opencl programs.
Definition cl_program_cache.hpp:49
static Library * get()
Access global library instance.
Definition library.cpp:218
class Accelerator * get_accelerator()
Definition library.cpp:198
std::uint32_t uint
Library index and size type.
Definition config.hpp:56
Definition algorithm.hpp:37