作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从多个 GPU 设备中选择了我的上下文,如下所示:
type = platforms[0].getDevices(CL_DEVICE_TYPE_GPU, &devices);
if(type == CL_SUCCESS)
{
//Create context and access device names
cl::Context ctx_(devices);
context = ctx_;
gpuDevices = context.getInfo<CL_CONTEXT_DEVICES>();
for(i=0; i<gpuDevices.size(); i++) {
deviceName = gpuDevices[i].getInfo<CL_DEVICE_NAME>();
queues.emplace_back(cl::CommandQueue(context, gpuDevices[i], CL_QUEUE_PROFILING_ENABLE));
op::log("Adding " + deviceName + " to queue");
}
}
else if(type == CL_INVALID_DEVICE_TYPE || type == CL_DEVICE_NOT_FOUND)
{
throw std::runtime_error("Error: GPU Invalid Device or Device not found");
}
break;
但是,当我创建一个 cl::Buffer
时,它只允许我传递一个上下文。如何选择将内存创建到哪个 GPU。
cl::Buffer 的构造函数是
Buffer(
const Context& context,
cl_mem_flags flags,
::size_t size,
void* host_ptr = NULL,
cl_int* err = NULL)
如您所见,它只需要 1 个上下文,而且我无法选择我的 GPU
最佳答案
当您为在多个设备之间共享的上下文创建缓冲区时,该缓冲区在这些设备之间“共享”,因此您可以使用相同的 cl_mem 对象在这两个设备上执行命令。保存此缓冲区的内存是否实际在两个设备上分配是由实现定义的。 OpenCL 驱动程序可能会推迟实际分配,直到在特定设备上执行的命令需要缓冲区为止,并且通常它足够智能来执行此操作,但这实际上取决于硬件和实现细节。
基本上,您有 2 个选择:
cl::Context
。关于OpenCL:如何在上下文中选择 GPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48359046/
我是一名优秀的程序员,十分优秀!