首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCL常量内存缓存

OpenCL常量内存缓存
EN

Stack Overflow用户
提问于 2012-05-29 15:47:12
回答 1查看 1.1K关注 0票数 1

如果我执行一个使用一小块常量内存的内核,然后在内核运行时写入该常量内存,内核是立即看到更改,还是在内核启动时将常量内存的内容“缓存”-或者OpenCL驱动程序是否无条件地延迟常量内存更新,直到内核运行完毕?

如果出现第一个或第三个选项,那么如何使用不同的常量内存数据同时执行相同的内核?我需要创建多个内核/常量缓冲区对象并使用它吗?注意,我不能预先计算任何东西,因为内核启动是外部信号的结果,这些外部信号可以在任何时间和速率发生。我也可以即时创建内核对象,但这似乎是一个丑陋的解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-29 16:20:45

这是OpenCL中的一个基本概念,即“入队”到同一命令队列的命令是按顺序执行的。这包括WriteBuffer和类似的命令。这意味着如果你这样做了

代码语言:javascript
复制
EnqueueNDKernalRange()
EnqueueWriteBuffer()
EnqueueNDKernalRange()

那么不管它们是阻塞的还是非阻塞的,写操作只会影响第二组内核。

如果你是通过一个映射指针来更新的,那么在运行任何内核之前,都应该取消映射。访问当前映射的缓冲区的运行内核未定义(规范1.1 -第5.4.2.1节)。

因为EnqueueMapBufferEnqueUnmapMemObject也被放在命令队列中,所以只要取消映射,更新的顺序仍然是有保证的。

这是否回答了你的问题,或者你正在以另一种方式更新你的缓冲区?

如何使用不同的常量内存数据同时执行同一内核?我需要创建多个内核/常量缓冲区对象并使用它吗?

是的,多个buffer对象。

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

https://stackoverflow.com/questions/10795031

复制
相关文章

相似问题

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