我正在创建类似于CUDA的东西,但我看到从RAM到VRAM的复制内存非常快,就像从RAM复制到自身一样.但是从VRAM复制到RAM比RAM到VRAM要慢.
顺便说一句,我glTexSubImage2D用来从RAM复制到VRAM并glGetTexImage从VRAM复制到RAM.
为什么?有没有办法提高它的性能,如将RAM复制到VRAM?
将数据从GPU传输到CPU始终是一个非常慢的操作.
GPU - > CPU回读引入了"同步点",CPU必须等待GPU完成计算.在此期间,CPU停止向GPU提供数据,导致其停止.
现在,请记住,现代GPU以高度并行的方式设计,在任何给定时刻都有数千条线程在飞行.同步点必须等待所有这些线程完成处理,然后才能回读计算结果.回读完成后,所有这些线程必须从零重新开始执行......糟糕!
异步读回结果(在几帧之后),允许GPU继续执行而不会使其线程匮乏(上面提到的停止和恢复问题).这极大地提高了性能 - GPU越平行,性能提升越高.
根据您的图形芯片和驱动程序,使用PBO可能会获得更好的性能.