两个问题:
我正在使用生命游戏作为实验的载体,尝试使用gpgpu技术完成学校项目。我使用OpenCL和OpenGL进行实时可视化,目标是使其尽可能大且快速。在分析性能时,我发现帧时间被CL获取和释放GL缓冲区所占用,而时间成本与缓冲区的实际大小成正比。
1)这是正常的吗?为什么会这样?据我所知,缓冲区从未离开设备内存,而CL Acquire/Release的作用类似于互斥锁。OpenCL是否会逐个字节地锁定/解锁?
为了解决这个问题,我将颜色模式从24位RGBA(据我了解,这是OpenGL首选的颜色模式)缩小到8位RGB颜色。这导致速度显著提高,但在调整内核后,传输时间再次占主导地位。
如果没有任何想法可以完全消除传输时间(除非将内核从OpenCL移植到GLSL,这将超出项目的原始范围),那么我现在认为最好的办法是写入位图(而不是我当前使用的8位像素图),然后使用该位图和颜色索引来纹理化一个四边形。
2)我可以直接使用位图纹理化一个四边形吗?我考虑使用glBitmap绘制到辅助缓冲区,然后使用该缓冲区来纹理化我的四边形,但如果有更直接的方法,则更好。