如何解决如何解决enqueueWriteBuffer上的错误-36?
我有一个教程中遵循的代码。我已经将vcpkg与Visual Studio 2019一起使用来设置opencl。
#include <CL/opencl.hpp>
#include <iostream>
int main()
{
std::vector<cl::Platform> all_platforms;
cl::Platform::get(&all_platforms);
if (all_platforms.size() == 0)
{
std::cout << "No platforms found. Check OpenCL installation!\n";
return -1;
}
cl::Platform default_platform = all_platforms[0];
std::cout << "Using platform: " << default_platform.getInfo<CL_PLATFORM_NAME>() << "\n";
std::vector<cl::Device> all_devices;
default_platform.getDevices(CL_DEVICE_TYPE_ALL,&all_devices);
if (all_devices.size() == 0)
{
std::cout << "No devices found. Check OpenCL installation!\n";
return -1;
}
cl::Device default_device = all_devices[0];
std::cout << "Using device: " << default_device.getInfo<CL_DEVICE_NAME>() << "\n";
cl::Context context(default_device);
cl::Buffer buffer_A(context,CL_MEM_READ_WRITE,sizeof(int) * 10);
cl::Buffer buffer_B(context,sizeof(int) * 10);
cl::Buffer buffer_C(context,sizeof(int) * 10);
int A[] = { 0,1,2,3,4,5,6,7,8,9 };
int B[] = { 0,0 };
cl::CommandQueue queue(context,default_device);
auto err = queue.enqueueWriteBuffer(buffer_A,CL_TRUE,sizeof(int) * 10,A);
if (err != 0)
{
std::cout << "error on writting to buffer_A,err=" << err << std::endl;
return err;
}
它在enqueueWriteBuffer(buffer_A,sizeof(int)*10,A)
上崩溃。似乎一切初始化正确。我想知道是否有人使用OpenCL C ++ API遇到此问题。谢谢。
图形卡:GTX1060 操作系统:Windows10
解决方法
错误代码-36是“无效的命令队列”,因此您应该检查CommandQueue创建的错误代码。 CommandQueue的构造函数可以为此使用一个附加的cl_int *err
参数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。