Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
DirectX/Cuda/OpenGL提供的总/纹理可访问内存_Opengl_Directx_Cuda_Gpu_Gpgpu - Fatal编程技术网

DirectX/Cuda/OpenGL提供的总/纹理可访问内存

DirectX/Cuda/OpenGL提供的总/纹理可访问内存,opengl,directx,cuda,gpu,gpgpu,Opengl,Directx,Cuda,Gpu,Gpgpu,有人能解释一下Cuda上下文中使用的纹理内存与DirectX上下文中使用的纹理内存的区别吗。假设一个图形卡有512 MB的广告内存,如何将其划分为恒定内存/纹理内存和全局内存 例如,正如cudaGetDeviceProperties查询的那样,我有一张totalConstMem为64KB、totalGlobalMem为4GB的特斯拉卡,但没有变量告诉我需要多少纹理内存 另外,当通过DirectX等图形API访问时,“纹理内存”是多少。我没有在这些API中编程的经验,所以我不知道他们可以如何访问内

有人能解释一下Cuda上下文中使用的纹理内存与DirectX上下文中使用的纹理内存的区别吗。假设一个图形卡有512 MB的广告内存,如何将其划分为恒定内存/纹理内存和全局内存

例如,正如cudaGetDeviceProperties查询的那样,我有一张totalConstMem为64KB、totalGlobalMem为4GB的特斯拉卡,但没有变量告诉我需要多少纹理内存

另外,当通过DirectX等图形API访问时,“纹理内存”是多少。我没有在这些API中编程的经验,所以我不知道他们可以如何访问内存以及访问什么类型的内存。但顺便说一句,所有的内存访问都是硬件缓存的。如果我错了,请纠正我

在KoppeKTop的回答之后:那么在CUDA和DirectX都使用的情况下,共享内存是否充当纹理内存的自动缓存呢?我不认为拥有另一个h/w缓存会有任何意义。这是否也意味着如果我在内核中使用全部共享内存,纹理内存就不会被缓存


谢谢。

事实上,我从未处理过DirectX,但我可以用CUDA纹理解释这种情况。纹理是简单数组(cudaArray或pitched数组),具有缓存只读访问,存储在全局内存中。所以,512 MB卡上一个大纹理的最大大小是512兆(实际上稍微小一点,但还不够)。它优化为在2D空间中访问数据(缓存为2D切片)。还可以在访问时转换坐标和值(有关详细信息,请参阅CUDA编程指南)

不,并非所有内存都在访问时缓存(对于具有计算能力1.x的CUDA设备)。只有恒定和纹理记忆。计算能力>=2.0(费米)的设备使用L1和L2缓存(或仅L2-可配置)缓存所有内存访问

在KoppeKTop的回答之后:同样 共享内存充当自动缓存 用于CUDA情况下的纹理记忆和 都是DirectX吗?我想没有 另一个h/w缓存是有意义的 无论如何这是否也意味着如果我 将整个共享内存用于 内核,纹理内存无法获取 缓存

对于GF100之前的版本(G80),GPU有专用的全局常量和全局纹理缓存(都是只读的)。共享内存有自己的专用内存库

对于GF100代,您仍然有专用的纹理缓存,但现在共享内存和一级缓存(缓存全局内存)之间共享相同的片上内存。如果您使用CUDA,您可以配置如何拆分此内存。对于DirectX/OpenGL,图形驱动程序使用48KB共享内存/16KB一级缓存配置

在任何情况下,共享内存都是软件管理的(除非GF100上专用于一级缓存的部分),并且不会占用纹理缓存