【发布时间】:2012-11-22 21:39:28
【问题描述】:
两部分问题:
我正在开展一个学校项目,使用生命游戏作为试验 gpgpu 的工具。我正在使用 OpenCL 和 OpenGL 进行实时可视化,目标是让这个东西尽可能大和快。分析后,我发现帧时间主要由 CL 获取和释放 GL 缓冲区控制,时间成本与缓冲区的实际大小成正比。
1) 这正常吗?为什么会这样?据我所知,缓冲区永远不会离开设备内存,而 CL Acquire/Release 就像互斥锁一样。 OpenCL 是否单独锁定/解锁每个字节?
为了解决这个问题,我已从 24 位 RGBA 颜色模式(据我了解是 OpenGL 的首选颜色模式?)缩小为 8 位 RGB 颜色。这导致了显着的加速,但是在调整我的内核之后,传输时间再次占主导地位。
在没有关于如何完全消除传输时间的任何想法(没有将我的内核从 OpenCL 移植到 GLSL,这将超出项目的原始范围),我现在认为我最好的选择是写信给一个位图(与我目前使用的 8 位像素图相反),然后使用该位图和一个颜色索引来纹理一个四边形。
2) 我可以直接使用位图对四边形进行纹理处理吗?我曾考虑使用 glBitmap 绘制到辅助缓冲区,然后使用此缓冲区对我的四边形进行纹理处理,但如果可用的话,我更愿意使用更直接的路线。
【问题讨论】: