首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JOCL的Java OpenCL :什么是直接缓冲区?

JOCL的Java OpenCL :什么是直接缓冲区?
EN

Stack Overflow用户
提问于 2012-08-31 22:15:31
回答 2查看 446关注 0票数 0

当我在clEnqueueReadBuffer上做实验时,我得到了一个异常:

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

在这一行上:

代码语言:javascript
运行
复制
    ec.add(clEnqueueReadBuffer(commandQueue, zCacheMem, false, 0, Sizeof.cl_int*numWords, zCachePtr, 0 , null, readEvents[0]));

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-12 02:08:32

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

如果将java分配的数组(如byte[]或int[] )包装到缓冲区中,它将无法工作。

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

非直接缓冲区是在java堆中分配的,并由JVM管理(并受制于垃圾收集器等)。

票数 3
EN

Stack Overflow用户

发布于 2012-08-31 22:17:29

直接ByteBuffer是一种在本机内存和Java之间高效交换数据的常用方法。它们实际上是malloc‘’ed内存的包装器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12217199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档