OpenCL C++ 中的 SVM 分配
SVM allocation in OpenCL C++
在cl_context
和cl::Context
的情况下,我们可以这样做:
cl::Context context_ = cl::Context(device);
cl_context context = context_();
现在,我有一个 OpenCL 程序,其中包含以下代码片段:
...
void* svm_data = clSVMAlloc(context, svm_flags, svm_buffer_size, 0);
...
我想在这里做一些类似于我们在上面对 cl::Context
所做的事情(即从 header 中提取基础变量,或者在这种情况下,提取基础 void 指针):
cl::SVMAllocator svm_data_ = cl::SVMAllocator<int, cl::SVMTraitAtomic<>>(context);
void* svm_data = svm_data_();
但是翻了docs,一直没找到方法
有人有想法吗?
看起来您需要使用分配器分配共享虚拟内存以获取指向它的指针:
cl::SVMAllocator<int, cl::SVMTraitAtomic<>> svm_allocator(context);
std::size_t num_elements = 4;
int* svm_data = svm_allocator.allocate(num_elements);
SVM 分配器仅保存传递给clSVMAlloc()
的上下文和标志,如果要分配共享虚拟内存,需要直接调用allocate()
方法。另外,如果你想释放分配的内存,你也需要使用分配器:
svm_allocator.deallocate(svm_data, num_elements);
在cl_context
和cl::Context
的情况下,我们可以这样做:
cl::Context context_ = cl::Context(device);
cl_context context = context_();
现在,我有一个 OpenCL 程序,其中包含以下代码片段:
...
void* svm_data = clSVMAlloc(context, svm_flags, svm_buffer_size, 0);
...
我想在这里做一些类似于我们在上面对 cl::Context
所做的事情(即从 header 中提取基础变量,或者在这种情况下,提取基础 void 指针):
cl::SVMAllocator svm_data_ = cl::SVMAllocator<int, cl::SVMTraitAtomic<>>(context);
void* svm_data = svm_data_();
但是翻了docs,一直没找到方法
有人有想法吗?
看起来您需要使用分配器分配共享虚拟内存以获取指向它的指针:
cl::SVMAllocator<int, cl::SVMTraitAtomic<>> svm_allocator(context);
std::size_t num_elements = 4;
int* svm_data = svm_allocator.allocate(num_elements);
SVM 分配器仅保存传递给clSVMAlloc()
的上下文和标志,如果要分配共享虚拟内存,需要直接调用allocate()
方法。另外,如果你想释放分配的内存,你也需要使用分配器:
svm_allocator.deallocate(svm_data, num_elements);