簡體   English   中英

OpenCL C++ 中的 SVM 分配

[英]SVM allocation in OpenCL C++

對於cl_contextcl::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_();

但是,在瀏覽了文檔之后,我一直沒有找到一種方法。

有人有什么想法嗎?

看起來您需要使用分配器分配共享虛擬 memory 以獲取指向它的指針:

cl::SVMAllocator<int, cl::SVMTraitAtomic<>> svm_allocator(context);

std::size_t num_elements = 4;
int* svm_data = svm_allocator.allocate(num_elements);

SVM 分配器僅保存傳遞給clSVMAlloc()的上下文和標志,如果要分配共享虛擬 memory,則需要直接調用allocate()方法。 此外,如果要釋放分配的 memory,還需要使用分配器:

svm_allocator.deallocate(svm_data, num_elements);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM