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
相关产品推荐
相关产品推荐

