gpt4 book ai didi

c++ - '__kernel' 没有命名类型

转载 作者:行者123 更新时间:2023-12-02 10:08:51 25 4
gpt4 key购买 nike

我正在尝试编译此处找到的代码:http://developer.amd.com/tools-and-sdks/opencl-zone/opencl-resources/introductory-tutorial-to-opencl/

我正在使用以下命令编译它:

g++ -Wall -O2 -lm -lOpenCL -g -Wno-unknown-pragmas foo.cpp -o foo

导致问题的代码部分是这样的:
#pragma OPENCL EXTENSION cl_khr_byte_addressable_store : enable
__constant char hw[] = "Hello World\n";

__kernel void hello(__global char * out) {
size_t tid = get_global_id(0);
out[tid] = hw[tid];
}

我收到以下错误:
foo.cpp:105:2: error: ‘__constant’ does not name a type
__constant char hw[] = "Hello World\n";

foo.cpp:107:2: error: ‘__kernel’ does not name a type
__kernel void hello(__global char * out) {

有人可以解释为什么会这样吗?标题与链接上的完全相同。

谢谢

最佳答案

你不能编译这样的 OpenCL 代码(没有更多的支持基础设施,例如支持 OpenCL 的编译器和用于 OpenCL 功能的库 - Clang 能够为 x86 编译 OpenCL,但随后提示没有支持库当它试图链接事物时)。

典型的 OpenCL 应用程序如下所示:

// Get platform, device and context - this is about 10-20 lines of "boilerplate" code. 
const char* source = "... your code goes here ...";
// But you could of course read it from a file, for example!
cl_int err;
clProgram prog = clCreateProgramWithSource(context, 1, &source, NULL, &err);
err = clBuildProgram(prog, 1, &device, NULL, NULL, NULL);
cl_kernel kern = clCreateKernel(prog, "hello", &err);
cl_mem out = clCreateBuffer(context, CL_MEM_READ_WRITE, 100, NULL, err);
err = clSetKernelArg(kernel, 0, sizeof(out), out);
size_t range = 1;
cl_command_queue queue = cl_create_command_queue( ... );
cl_event event;
err = clEnqueueNDRange(queue, kern, 1, NULL, &size, NULL, 0, NULL, &event);
clFlush(queue);
clWaitForEvent(event);
// Lots of lines of code to release everything.

[我刚刚手写了以上几行-我家没有CL环境,所以无法检查-它显示了一般原理,并且我跳过了相当多的设置/拆卸代码-和当然,每次调用 OpenCL 库时都应该进行错误检查,因为通常很容易出错并返回错误,这会导致下一步崩溃/出错]

有一些面向对象的变体,可以让你避免一些清理工作(析构函数为你做),但是因为我只写过几次这样的代码 [vs.多次使用上面显示的基本 C 版本],我必须阅读文档或查看我工作中的“OpenCL C++ 绑定(bind)卡”。

关于c++ - '__kernel' 没有命名类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29453351/

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