gpt4 book ai didi

c++ - cout在OpenCL HelloWorld问题中未在控制台或输出缓冲区上显示char数组(char buf)

转载 作者:行者123 更新时间:2023-12-01 14:52:31 24 4
gpt4 key购买 nike

enter image description here这是HelloWorld.cl内核文件。当我调试时,我可以看到buf带有helloworld\n,但是它没有显示在控制台上。

__kernel void HelloWorld(__global char* data)
{
data[0] = 'H';
data[1] = 'e';
data[2] = 'l';
data[3] = 'l';
data[4] = 'o';
data[5] = ' ';
data[6] = 'w';
data[7] = 'o';
data[8] = 'r';
data[9] = 'l';
data[10] = 'd';
data[11] = '!';
data[12] = '\n';
}

我是第一次尝试OpenCL。我能够编译代码,但输出未显示在控制台上。
CreateProgram设置初始上下文和程序。
cl::Program CreateProgram(const std::string& file)
{
std::vector<cl::Platform> platforms;
cl::Platform::get(&platforms);
auto platform = platforms.front();
std::vector<cl::Device> devices;
platform.getDevices(CL_DEVICE_TYPE_GPU, &devices);
auto device = devices.front();
std::ifstream helloWorldFile(file);
std::string src(std::istreambuf_iterator<char>(helloWorldFile),
(std::istreambuf_iterator<char>()));
cl::Program::Sources sources(1, std::make_pair(src.c_str(),
src.length() + 1));
cl::Context context(device);
cl::Program program(context, sources);
auto err = program.build("-cl-std=CL1.2");
return program;
}
int main()
{
auto program = CreateProgram("HelloWorld.cl");
auto context = program.getInfo<CL_PROGRAM_CONTEXT>();
auto devices = context.getInfo<CL_CONTEXT_DEVICES>();
auto device = devices.front();
char buf[16];// output buffer where helloWorld is stored
cl::Buffer memBuf = cl::Buffer(context, CL_MEM_WRITE_ONLY |
CL_MEM_HOST_READ_ONLY, sizeof(buf));
cl::Kernel kernel(program, "HelloWorld");
kernel.setArg(0, memBuf);
cl::CommandQueue queue(context, device);
queue.enqueueTask(kernel);
queue.enqueueReadBuffer(memBuf, CL_TRUE, 0, sizeof(buf), buf);
std::cout << buf << std::endl; //I want buf to display on console but it is always blank
std::cin.get();
return 0;
}

最佳答案

在内核中初始化字符串时,您缺少一个以零结尾的字符。

我不确定这个错误是否应该完全阻止任何输出;您的程序是否崩溃而不是打印输出?

无论如何,要修复此特定错误(可能还有其他错误),请添加

data[13] = '\0';

到您的内核。

关于c++ - cout在OpenCL HelloWorld问题中未在控制台或输出缓冲区上显示char数组(char buf),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62212638/

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