【问题标题】:OpenCL : Write to an existing cl::Buffer?OpenCL:写入现有的 cl::Buffer?
【发布时间】:2018-01-30 06:18:28
【问题描述】:

我碰巧有一个库,它已经在内部为我提供了 OpenCL 中的 GPU Ptr。

auto* gpuImagePtr = upImpl->upCaffeNet->blobs().at(0)->mutable_gpu_data();
cl::Buffer imageBuffer = cl::Buffer((cl_mem)gpuImagePtr);

我想将数据写入 imageBuffer 指向的指针,而不分配新内存。我该怎么做呢?如果我实例化一个 cl::Buffer,它只会写入一个新地址。我不想写一个内核来做这个。

在 CUDA 中我会这样做

auto* gpuImagePtr = upImpl->upCaffeNet->blobs().at(0)->mutable_gpu_data();
cudaMemcpy(gpuImagePtr, inputData.getConstPtr(), inputData.getVolume() * sizeof(float),
                               cudaMemcpyHostToDevice);

在 OpenCL 中,我尝试这样做,但它只是段错误:

auto* gpuImagePtr = upImpl->upCaffeNet->blobs().at(0)->mutable_gpu_data();
cl::Buffer imageBuffer = cl::Buffer((cl_mem)gpuImagePtr);
op::CLManager::getInstance(upImpl->mGpuId)->getQueue().enqueueWriteBuffer(imageBuffer, true, 0, inputData.getVolume() * sizeof(float), inputData.getConstPtr());

【问题讨论】:

    标签: opencl


    【解决方案1】:

    好的,事实证明我需要使用保留标志:

    cl::Buffer imageBuffer = cl::Buffer((cl_mem)gpuImagePtr, true);
    

    现在它不再崩溃了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 2013-01-08
      相关资源
      最近更新 更多