You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCL主机端创建缓冲区时如何指定输入输出数组大小

OpenCL主机端clCreateBuffer大小参数正确写法

你当前编写的主机端代码中sizeof(int) * [4344][20]属于非法C语法,不能直接将数组定义的方括号语法用在算术表达式中。

  • 对于输入特征矩阵X_train:共4344个样本,每个样本包含20个int类型特征,总字节数为4344 * 20 * sizeof(int),对应创建代码:
cl_mem dev_X_train = clCreateBuffer(context, CL_MEM_READ_ONLY, 4344 * 20 * sizeof(int), NULL, NULL);
  • 对于标签数组Y_train:共4344个int类型标签,总字节数为4344 * sizeof(int),对应创建代码:
cl_mem dev_Y_train = clCreateBuffer(context, CL_MEM_READ_ONLY, 4344 * sizeof(int), NULL, NULL);

内核代码潜在问题提示

  • 你在内核中定义了大小为4344的私有数组array_dist和index_arr,绝大多数OpenCL设备的私有(栈)内存空间极小,这个大小的数组会直接导致栈溢出,建议将其迁移到全局内存/局部内存,或者优化算法逻辑减少内存占用。
  • 当前内核循环中计算距离的代码存在逻辑错误:distance(X_train,data_point)每次都只取第一个训练样本和待预测点计算距离,没有按样本索引偏移,要计算所有样本的距离需要修改为distance(X_train + i * 20, data_point)。

内容的提问来源于stack exchange,提问作者user16767585

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:09:01