我正在使用一个内核,它将一个图像作为java和JOCL的参数
df.limit(Int.MaxValue)
.write
.options(Map(HBaseTableCatalog.tableCatalog -> cat_matrice))
.format("org.apache.spark.sql.execution.datasources.hbase")
.save()
编译时,我收到错误:
指针可能不指向空对象
这是在行:
input ="12.jpg";
image = createBufferedImage(input);
image = createBufferedImage(input);
DataBufferInt dataBufferSrc = (DataBufferInt)image.getRaster().getDataBuffer();
int dataSrc[] = dataBufferSrc.getData();
inputImageMem = clCreateBuffer(context, CL_MEM_READ_ONLY| CL_MEM_USE_HOST_PTR,
dataSrc.length * Sizeof.cl_uint, Pointer.to(dataSrc), null);
clSetKernelArg(kernel, 0, Sizeof.cl_mem, Pointer.to(inputImageMem));
可能的问题是什么?我该如何解决?
PS:clSetKernelArg(kernel, 0, Sizeof.cl_mem, Pointer.to(inputImageMem));
是取自JOCL样本的函数
http://jocl.org/
答案 0 :(得分:1)
来自openCL clCreateBuffer documentation:
如果成功创建缓冲区对象,则返回有效的非零缓冲区对象,并将errcode_ret设置为CL_SUCCESS。 否则,它返回一个NULL值,并在errcode_ret中返回以下错误值之一......
clCreateBuffer
函数的最后一个参数是一个int指针(您希望返回错误代码)。您目前将其设置为null
。我的猜测是clCreateBuffer
失败了。我建议您检查errcode_ret
的值,它会包含一个错误代码,可以帮助您解决问题。