我碰巧有一个库,它已经在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());
发布于 2018-01-29 22:18:29
好的,事实证明我需要使用保留标志:
cl::Buffer imageBuffer = cl::Buffer((cl_mem)gpuImagePtr, true);
现在它不再崩溃了
https://stackoverflow.com/questions/48510808
复制相似问题