Java OpenCL 与 JOCL : What is a direct buffer?

标签 java opencl jocl

当我在 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/

相关文章:

java - java中访问列表元素

c++ - 在 C++ 中使用 cout 以十六进制格式打印 OpenCL cl_uchar?

memory-management - 在 OpenCL 内核中创建本地数组动态

java - 如何在 Jocl 中使用 cl_khr_gl_sharing?

java - 需要帮助添加 OpenCL(GPU 使用)

java - FileInputStream 和 FileNotFoundException

java - 无法获取时间戳值

检查宏参数是否为文字

HADOOP Map 任务失败 : No protocol specified

java - 你如何有效地处理 maven-3 时间戳快照?