显卡内存和进程的虚拟地址空间

Mon*_*nku 0 linux opengl memory-management gpu

假设我有一个游戏,在openGL方面做了很多图形,我有一个安装了Linux 32位的桌面,配有4GB内存和1G Nvidia显卡.我的游戏应用程序虚拟地址空间如何?显卡内存是否映射在此虚拟地址空间中?

此外,RAM和显卡内存之间是否存在某种关系?linux是否为显卡分配了相同的RAM,任何进程都无法使用?也就是说,它导致我的游戏进程只有3GB的RAM可用?

dat*_*olf 6

我的游戏应用程序虚拟地址空间如何?

无法分辨.OpenGL将这个细节完全公开给供应商实现.允许满足规范的任何内容.

显卡内存是否映射在此虚拟地址空间中?

也许,也许不是.这取决于实际的实施.

此外,RAM和显卡内存之间是否存在某种关系?

通常是的.到目前为止,大多数OpenGL实现都关注显卡的RAM本质上是实际存在于系统内存中的缓存(CPU RAM +交换空间+从存储映射的内存).但是,这并不是规范,并且允许满足OpenGL规范的任何内容.

Linux是否为显卡分配了相同的RAM,任何进程都无法使用?

不,因为Linux(内核)并不关心这些事情.不过,你的显卡驱动程序是.驾驶员可以按照自己认为合适的方式进行操作.它可以通过物理地址扩展(PAE)将OpenGL上下文数据映射到单独的地址空间,也可以将其放在不同的进程中,或者将其保存在游戏的地址空间中,或者......,或......,或.......这方面没有减记的计划.

也就是说,它导致我的游戏进程只有3GB的RAM可用?

如果是这样,那么更喜欢(3GB - 1GB) - x这里0 < x,因为你的进程的地址空间的顶部1GB保留给内核,当然你的程序的文本(由CPU执行的二进制文件),它的使用图书馆的文本需要一些地址空间,以及.