gpt4 book ai didi

Java OpenCL 与 JOCL : What is a direct buffer?

转载 作者:行者123 更新时间:2023-12-01 17:29:49 25 4
gpt4 key购买 nike

当我在 clEnqueueReadBuffer 上进行实验时,出现了一个异常:

线程“main”中的异常 java.lang.IllegalArgumentException:非阻塞读取操作只能使用指向直接缓冲区的指针来执行

在这一行:

    ec.add(clEnqueueReadBuffer(commandQueue, zCacheMem, false, 0, Sizeof.cl_int*numWords, zCachePtr, 0 , null, readEvents[0]));

其中zCacheMem是cl_mem,zCachePtr指向int[]

我找不到任何解释此错误的文档。有人可以帮忙吗?

最佳答案

是的,您需要使用 ByteBuffer.allocateDirect() 来分配缓冲区,或者使用 JOCL 的分配器函数。

如果将 java 分配的数组(例如 byte[] 或 int[])包装到 Buffer 中,它将不起作用。

直接缓冲区可能会直接映射到设备的地址空间。这些在某种程度上位于 JVM“外部”。

非直接缓冲区在 java 堆中分配并由 JVM 管理(并受垃圾收集器等约束)

关于Java OpenCL 与 JOCL : What is a direct buffer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12217199/

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