如何将字符串转换为cl_uchar*
How to convert a string into cl_uchar *?
如何转换(强制转换)字符串
char* password = "C & OpenCL is cool";
至
cl_uchar *
将其传递给cl内核函数
__kernel void foobar(__global const uchar * input_data) {...}
不能直接将char
指针传递到OpenCL内核中,因为内核不知道该如何处理该指针。内核中有一个指向__global
内存的指针。因此,您需要做的是创建一个OpenCL缓冲区对象,将字符串写入其中,并将该缓冲区的句柄作为参数传递给内核。如果你不知道这是怎么做到的,请查阅适当的OpenCL学习资源。在C++中,它将类似于以下内容:
cl::Buffer input_buffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
sizeof(cl_uchar) * (strlen(password)+1), password);
...
kernel.setArg(0, input_buffer);
同样,您不必实际将char*
转换为const cl_uchar*
,因为您只是将其复制到缓冲区中,并且在支持OpenCL的平台上,可以假设char
和cl_uchar
具有相同的位表示,尽管对于字符串文字,您应该首先使用const char*
而不是char*
。
顺便说一句,由于内核中的数据无论如何都是const
,并且字符串可能没有那么大,因此您可能需要考虑使用__contant
而不是__global
内存,这可能具有性能优势(至少在较旧的硬件上,__constant
内存是缓存的,而__global
不是缓存的)。
这应该在没有警告的情况下工作错误:
const char* pwd = "C & OpenCL is cool";
cl_uchar * password = (cl_uchar*) &pwd;
cl::Buffer bufferA(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(cl_uchar) * keyBytes, password);
kernel.setArg(0, bufferA);
相关文章:
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 使用 mat.at<uchar>(i,j) 的 opencv C++中的矩阵赋值错误
- 使用 cl 构建代码并连接到 sqlite 库
- MSYS2 MinGW64 在 Windows 上构建 GMP/MPFR 作为静态库,并将它们链接到使用 CL 编译的
- NMAKE:致命错误 U1077:cl.exe 和 nmake.exe 返回代码'0x2'
- Clang-CL 警告 strnicmp 已弃用,请使用 ISO C 并C++符合标准的名称_strnicmp
- 在 OpenCL 库中找不到 cl::Error 类
- visual MSVC cl.exe尝试使用C++标头范例(定义与声明)
- cl::Event::waitForEvents returns -7 (CL_EXEC_STATUS_ERROR_ F
- 警告C4018,包含int和UINT32,但不包含int和UCHAR
- gcc中cl/NODEFAULTLIB的替代方案是什么
- cl.exe在哪里?(MS 构建工具 '13)
- cmake 将 clang-cl 检测为 clang
- 如何在 Azure 应用服务中使用 cl.exe 编译 C++ 代码并生成可执行文件
- Visual Studio not finding cl.exe
- Visual Studio 2017 无法找到 cl.exe
- CMake 和 Visual Studio 2015 - C 编译器 cl.exe 无法编译简单的测试程序
- 如何使用 PPM 格式的 uchar* 数组填充 QPixmap
- 如何阻止 cmake 使用 cl 编译?