global M,constant M,texture M的理解

GPU板载显存包括global M,constant M,texture M,在主函数中cudaMalloc()的显存默认为global M,constant M和texture M在片上都有cache,并且各自支持不同的读取方式,但都是只读的。

constant M:如果将一块数据定义为constant M,那么读取这个数据时数据会先传到相应的片在cache上,如果half-warp中的16个线程都读取同一个地址的数据,那么可以进行广播,即,只需对板载显存进行一次读操作,其余的16的线程可以从告诉缓存中读取。但是如果16个线程读取不同的地址的数据,就需要读16次,这样效率不如global M,因为global M可以让多个线程进行读操作,但是constant M在一个时刻只能有一个线程进行读操作,这是一把双刃剑~要考虑到具体的问题的特点~

texture M:将global M上的一块数据区域与texture引用绑定后,如果使用global M通常的使用方法,它就是可读写的,如果通过tex1Dfetch()就是当作textureM来使用,只能进行读(因为这时候数据时先传到cache上再读取)。texture M的特点是读取一个地址的数据时会将“附近”的数据一同取到相应的cache上。如果是二维的texture M,则需要定义channelformat什么什么的(我忘了),可能是定义了从显存读到cache上的方式(我还没使用过)。

你可能感兴趣的:(CUDA,显存)