gpt4 book ai didi

c - OpenCL 内核无法编译

转载 作者:行者123 更新时间:2023-11-30 14:27:03 25 4
gpt4 key购买 nike

我一直在阅读这个矩阵乘法内核代码,但我只是不明白为什么对 clBuildProgram 的调用会返回 CL_BUILD_PROGRAM_FAILURE。这是我的内核代码:

__kernel void MatMulKernel(__global const float* A, 
__global const float* B,
float* C,
const int size1,
const int size2,
const int size3)
{
int k = get_global_id(0);
int i;

int line = k / size3;
int column = k % size3;

float partial = 0;

for(i = 0; i < size2; i++)
{
partial += A[line * size2 + i] * B[i * size3 + column];
}

C[k] = partial;
}

有人能发现问题吗?谢谢。

注意:执行初始化的代码是正确的,因为我已经使用其他内核进行了测试并且它们编译正确。

编辑:好吧,prunge 的答案成功了,但现在我遇到了另一个问题。内核执行实际上会导致崩溃。这是代码:

err = clSetKernelArg(hKernel, 0, sizeof(cl_mem), (void *)&hDeviceMemA);
err = clSetKernelArg(hKernel, 1, sizeof(cl_mem), (void *)&hDeviceMemB);
err = clSetKernelArg(hKernel, 2, sizeof(cl_mem), (void *)&hDeviceMemC);
err = clSetKernelArg(hKernel, 3, sizeof(cl_int), (void *)&s1);
err = clSetKernelArg(hKernel, 4, sizeof(cl_int), (void *)&s2);
err = clSetKernelArg(hKernel, 5, sizeof(cl_int), (void *)&s3);

cl_event events[1];
// execute kernel
start = clock();
err = clEnqueueNDRangeKernel(hCmdQueue, hKernel, 1, 0, (const size_t *)BENCH_SIZE_COMP, 0, 0, 0, &events[0]);
clWaitForEvents(1, events);

调用clSetKernelArg的所有错误值为CL_SUCCESS。当程序到达 clEnqueueNDRangeKernel 时,它会崩溃。

最佳答案

这是我得到的错误:

error: kernel pointer arguments must point to addrSpace global, local, or constant

float* C 参数可能应该是 __global。所有内核指针参数都需要地址空间限定符。

关于c - OpenCL 内核无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8204971/

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