我知道寄存器溢出是怎么回事,但是文章里说:
“每个多处理器有一级缓存,所有多处理器共享二级缓存,二者都用于缓存全局或本地的访问,包括临时寄存器溢出。缓存行为(如读是缓存在L1和L2还是只缓存在L2)能够基于访问使用读写指令修饰符部分配置。”
我想知道fermi架构的GPU在寄存器溢出的情况下,溢出的内容是放到local memory还是L1 cach?
ps:我采用反汇编方法去看,发现其中有STL指令,就是说编译的结果是将溢出的内容是放到local memory,但是运行时有可能放到L1缓存中?为什么采用cuobjdump的-cubin选项和-ptx选项对该cubin文件就没有任何输出,而采用-sass就输出了反汇编的指令呢?难道cuobjdump的-cubin选项和-ptx选项不能对release的cubin文件使用吗?
(1)
这个问题已经为您回复过了:(上个帖子中)
是将寄存器交换到local memory的。但local memory会被L1 cache缓冲。
而不是人为的交换到L1 cache(实际上,L1 cache是硬件管理的,你无法直接访问其中的内容)。
(2)
STL的确将数据写入local memory, 至于为何会被L1 cache缓冲,是因为硬件如此设计的。您不能禁用L1对local memory的caching的。
(3)-cubin(–dump-cubin)是用来dump出cubin的(例如从你的一包含多个cubin的exe文件),而–dump-sass是用来将cubin里的指令反编译dump出来。而您的的要求,从cubin里进行反汇编,显然您应该使用–dump-sass。 至于–dump-ptx为何不能对.cubin使用,因为它们不包含ptx。您可以对您的exe使用–dump-ptx来观看ptx指令,但您不能对一个.cubin这样干。
请勿重复发帖。谢谢合作。
多谢,看来我是对一些问题产生了误会,我还要继续追问:
(1)寄存器溢出之后,再次加载的时候是不是有可能命中L1 cach也有可能不命中,那么,加大L1 cach就能加大命中的概率是不是?所以将共享内存配置为L1 cach才会带来性能提升的吧?
(2)-cubin和-ptx能否对dll使用呢?
楼主您好,
(1)在shared memory的大小总不成为一个限制因素的情况下(例如你的kernel完全不使用shared memory), 加大L1 cache会提高对local traffic的命中率的。
(2)–dump-cubin和–dump-ptx可以对dll使用。实际上,dll和exe使用同样的文件格式。