Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么将内存从VRAM复制到RAM要比从RAM复制到VRAM慢?(OpenGL)_C++_Opengl_Gpgpu - Fatal编程技术网

C++ 为什么将内存从VRAM复制到RAM要比从RAM复制到VRAM慢?(OpenGL)

C++ 为什么将内存从VRAM复制到RAM要比从RAM复制到VRAM慢?(OpenGL),c++,opengl,gpgpu,C++,Opengl,Gpgpu,我正在创建类似于CUDA的东西,但我看到将内存从RAM复制到VRAM的速度非常快,就像从RAM复制到自身一样。但从VRAM复制到RAM的速度比从RAM复制到VRAM的速度慢 顺便说一下,我正在使用glTexSubImage2D从RAM复制到VRAM,并使用glGetTexImage从VRAM复制到RAM 为什么??有没有办法像将RAM复制到VRAM那样提高它的性能?将数据从GPU传输到CPU总是一个非常缓慢的操作 readback引入了一个“同步点”,CPU必须等待GPU完成计算。在此期间,CP

我正在创建类似于CUDA的东西,但我看到将内存从RAM复制到VRAM的速度非常快,就像从RAM复制到自身一样。但从VRAM复制到RAM的速度比从RAM复制到VRAM的速度慢

顺便说一下,我正在使用
glTexSubImage2D
从RAM复制到VRAM,并使用
glGetTexImage
从VRAM复制到RAM


为什么??有没有办法像将RAM复制到VRAM那样提高它的性能?

将数据从GPU传输到CPU总是一个非常缓慢的操作

readback引入了一个“同步点”,CPU必须等待GPU完成计算。在此期间,CPU停止向GPU提供数据,导致GPU暂停

现在,请记住,现代GPU是以高度并行的方式设计的,在任何给定时刻都有上千个线程在运行。同步点必须等待所有这些线程完成处理,然后才能读取它们的计算结果。一旦回读完成,所有这些线程都必须从零开始重新启动执行。。。糟糕

异步读取结果(在几帧之后),允许GPU继续执行,而不会导致线程饥饿(上面概述的停止和恢复问题)。这极大地提高了性能-GPU越并行,性能改进就越高

根据您的图形芯片和驱动程序的不同,您可能会通过使用来获得更好的性能

顺便说一下,我正在使用glTexSubImage2D从RAM复制到VRAM,并使用glGetTexImage从VRAM复制到RAM

那你就不能复制数据了。您正在执行,这可能需要修改CPU,具体取决于您的设置、像素传输格式和像素传输类型参数

因为您没有提供实际的代码,所以无法知道您是否选择了错误的参数


如果您想测试直接复制性能,请使用。

@AxelGneiting GS7200。我认为312可以使用。但是RAM到VRAM的速度很快。(1600万浮动在50毫秒以下,但另一个大约500毫秒)顺便说一下,我需要纹理,因为我使用着色器来修改them@FijiWiji是的,它是超快的,但另一个方向是超慢的。“我想说500毫秒的另一条路是快的。”菲吉维吉:嗯,我回答了你的问题,为什么它慢。如果你的结果是修改纹理,你可以通过使用屏幕外缓冲区更快地得到它。谢谢。。。但我认为另一个答案也是答案。(使用BufferObject)嗯,像素传输操作被定义为从GPUCPU复制内存,甚至在链接的页面中也有说明。