GPU是可以直接读取内存的,因为GPU执行的命令,以及所使用的资源等等,一般都是CPU处理之后放在内存上,然后再由GPU直接读取或者转移到显存的。
在一些笔记本,特别是使用核显的笔记本当中,也往往并没有独立的显存,而只是将主存的一部分划分出来,作为显存使用。
所有这些都证明GPU物理上是具备访问主存的能力的。
但是,在一个实际的系统当中,GPU,特别是你所写的shader是否可以直接访问在内存里的数据,这个要看GPU当中的shader执行模块(这个和GPU的前端模块不是一个东西)是否有到内存的物理通路,以及,软件层面(操作系统和GPU驱动)是否将内存的这一部分映射到了GPU的地址空间。
也就是说,这个问题并不是shader如何写的问题,而是机器本身的物理结构(总线类型),以及操作系统和GPU驱动的问题。