gpt4 book ai didi

java - 如何使用OpenCL put3DRangeKernel?

转载 作者:行者123 更新时间:2023-12-01 23:00:07 24 4
gpt4 key购买 nike

我想使用 Java 中的 Jogamp 库在 OpenCL 中处理图像。

CLCommandQueue queue = device.createCommandQueue();
queue.putWriteBuffer(input, true);
kernel.putArg(input)
.putArg(ouput)
.putArg(width)
.putArg(height)
.putArg(depth);

int groupSize = Math.min((int) kernel.getWorkGroupSize(device), 16);

queue.put3DRangeKernel(kernel, 0, 0, 0, width, height, depth, groupSize, groupSize, groupSize);

queue.flush();
queue.finish();
queue.putReadBuffer(output, true);
output.getBuffer().rewind();
queue.release();

但是,我不确定如何使用 put3DRangeKernel 并且总是以 InvalidWorkGroupSizeExceptions 结束。

Exception in thread "main" com.jogamp.opencl.CLException$CLInvalidWorkGroupSizeException: can not enqueue 3DRange CLKernel [id: 139725705923824 name: identity]
with gwo: null gws: {256, 256, 256} lws: {16, 16, 16}

网络缺乏示例。

如何正确使用put3DRangeKernel?

更新:device.getMaxImage3dWidth 显示 2048(与高度和深度相同),因此封装大小不是问题。

举个例子,我拍了一张256 x 256 x 256的图像,localGroupSize是16。所以globalWorkSize % localWorkSize是0。

最佳答案

查看JogAmp documentation for CLCommandQueue ,看来您正在尝试使用此功能:

public CLCommandQueue put3DRangeKernel(CLKernel kernel,
long globalWorkOffsetX,
long globalWorkOffsetY,
long globalWorkOffsetZ,
long globalWorkSizeX,
long globalWorkSizeY,
long globalWorkSizeZ,
long localWorkSizeX,
long localWorkSizeY,
long localWorkSizeZ)

您当前对此函数的调用是将组大小传递给全局工作大小参数,并将图像大小作为本地工作大小。这是错误的方式 - 全局工作大小是您希望处理的元素总数,而本地工作大小是工作组大小。你应该这样做:

queue.put3DRangeKernel(kernel, 0, 0, 0, width, height, depth, groupSize, groupSize, groupSize);

这将导致工作组大小为 groupSize*groupSize*groupSize,但这对于许多设备来说可能太大(最大工作组大小通常为 1024 甚至 256)。尝试使用较小的工作组大小,例如 16x16x1。您还需要确保本地工作大小恰好除以全局工作大小。

函数 kernel.getWorkGroupSize(device) 将显示您的特定内核的工作组中可以拥有的最大工作项数。您启动的工作组大小(localWorkSizeX*localWorkSizeY*localWorkSizeZ)不得大于此值。除了对工作组中工作项总数的限制之外,工作组的每个单独维度也有限制,您可以使用 device 进行查询.getMaxWorkItemSizes().

关于java - 如何使用OpenCL put3DRangeKernel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23493112/

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