gpt4 book ai didi

OpenCL:如何在上下文中选择 GPU

转载 作者:行者123 更新时间:2023-12-02 11:54:39 25 4
gpt4 key购买 nike

我从多个 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 个选择:

  1. 查看 OpenCL 供应商文档,了解运行时如何为共享上下文执行内存分配。
  2. 为每个设备创建单独的 cl::Context

关于OpenCL:如何在上下文中选择 GPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48359046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com