gpt4 book ai didi

c++ - `clEnqueueFillBuffer()` 仅随机正确填充缓冲区

转载 作者:太空狗 更新时间:2023-10-29 23:13:32 24 4
gpt4 key购买 nike

我正在尝试用默认值 ({-1, -2}) 填充 OpenCL cl_int2 缓冲区,但是 OpenCL 函数 clEnqueueFillBuffer() 每次运行它时都会用不同 值填充我的缓冲区 - 缓冲区仅随机填充预期值。该函数返回错误代码 0

多次运行时代码片段的输出示例:

  • 0 : -268435456
  • 0 : -2147483648
  • 0 : -536870912
  • 0 : 268435456
  • 0 : 0
  • 0 : -1342177280
  • -1: -2

我正在运行带有 Radeon HD 6750M 和 OpenCL 1.2 版的 OS X 10.11.6。

clbParticle_hashmap_lookup_table = clCreateBuffer(context,
CL_MEM_READ_WRITE,
sizeof(cl_int2)*this->CUBE_CELLS,
nullptr,
&err_code);

// ...

cl_int2 default_hashmap_pattern = { .s = {-1, -2} };

clEnqueueFillBuffer(queue,
clbParticle_hashmap_lookup_table,
&default_hashmap_pattern,
sizeof(cl_int2),
0,
sizeof(cl_int2)*this->CUBE_CELLS,
0,
nullptr, nullptr);

clFinish(queue);

// copy and print the data:
size_t hashmap_lookup_table_size = sizeof(cl_int2)*this->CUBE_CELLS;
cl_int2* hashmap_lookup_table_bytes = (cl_int2*) malloc(hashmap_lookup_table_size);

clEnqueueReadBuffer(queue,
clbParticle_hashmap_lookup_table,
CL_TRUE,
0,
hashmap_lookup_table_size,
hashmap_lookup_table_bytes,
0,
nullptr, nullptr);

clFinish(queue);

cout << endl << "Lookup table: " << endl;
for (int i=0; i<this->CUBE_CELLS; i++)
cout << setw(10) << hashmap_lookup_table_bytes[i].s[0] << " : "
<< setw(10) << hashmap_lookup_table_bytes[i].s[1] << endl;

最佳答案

问题是您的填充图案对于您的 GPU 来说太大了。我遇到了同样的问题,试图用 cl_double 填充一个模式,它是 64 位的,就像你的 cl_int2 一样。我认为 clEnqueueFillBuffer 正在调用一个不允许模式的内置内核

关于c++ - `clEnqueueFillBuffer()` 仅随机正确填充缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38556710/

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