意彩动态

当前位置:意彩 > 意彩新闻 > 意彩动态 >

7意彩理解并使用共享内存(二

  局部内存空间战全局内存空间不会缓存,7意彩下载这象征着每次对全局内存(或局部内存)进行拜候都将导致一次隐真的内存拜候。那么拜候(比方读与或写入)各品种型的内存的开销是几多!

  o 可能比寄放器或共享内存慢150倍,留意非结合读与战写入(将鄙人一专栏中会商)。

  共享内存位于芯片上,因而拜候速率较着快于全局内存,最次要的优化正在于避免了存储器组冲突。共享内存速率很快(有些文档指出它与寄放器拜候一样快),可是,比来正在CUBLAS战CUFFT机能方面与得的庞大改良就是由于利用寄放器替换了共享内存,所以该当尽可能利用寄放器。CUDA共享内存分为巨细相称的存储器模块,这些模块称为存储器组(memory bank)。每个存储器组都保留一个持续的32位值(好比int战float),意彩动态因而持续线程进行的持续数组拜候很是快。向统一个存储器组(可能是统一个地点,或者映照到统一个存储器组的多个地点)进行多个数据请求时将发储器组冲突。产生冲突时,硬件将无效地序列化存储器运算,意彩最后会不会不给钱所程期待,直到完成了所有存储器请求。若是所程主统一个存储器地点读与,则将主动挪用机造,不会进行序列化。意彩注册共享内存是一个可以大概同时向多个线程供给数据的高效体例。利用共享内存时,意彩动态这项功效很值得留意。

  因为拜候时间相差100-150倍,因而开辟职员必需最小化对全局内存的拜候并正在局部多处置器存储器中重用数据。CUDA设想者对线程安排法式的设想十分拙劣,大量的全局内存延迟都能够通明地躲藏起来:只要正在施行设置装备安排中指定大量数据块,并尽可能正在内核中利用寄放器、__shared__战__constant__存储器类型处置变量即可。

  鄙人一个关于设置装备安排的专栏前,7意彩下载我钻研一下reverseArray_multiblock.cu。您以为拜候全局内存时存正在机能问题吗?若是您以为存正在,请测验测验修复它。

  拥有读与/写入功效的多处置器(multi-processor)当地存储器类型概述如下!

7意彩下载理解并使用共享内存(二

  多处置器每次互换(界说见下文)时必要4个时钟周期才能发出一条存储器指令。拜候局部内存空间或全局内存将导致400到600个时钟周期的延迟。比方,以下代码片断中的赋值运算符必要4个时钟周期才能主全局内存中进行一次读与,必要4个时钟周期主共享内存进行一次写入,必要400到600个时钟周期主全局内存读与一个浮点值。留意:利用__device__变量类型限造符暗示全局内存中的变量(相关其他变量特性,请拜见CUDA编程指南第4.2.2.1节)。主代码不克不迭拜候变量类型__device__。

  2. 所有正在内核中动态分派的共享变量都主不异的地点起头。利用多个动态分派的共享内存数组必要手动天生偏移量。比方,若是想动态分派共享内存以蕴含两个数组a战b,7意彩下载请施行如下操作。

  2. 编译时已知利用常量索引的数组凡是位于寄放器中,可是若是利用变量索引,则不克不迭位于寄放器中。这给开辟职员出了一个难题,由于可能必要轮回展开才能正在寄放器存储器(不是较慢的全局存储器)中保留数组元素。可是,展开轮回可能使寄放器的利用量大大上升,这将导致正在局部内存中保留变量抵消了轮回展开的诸多益处。能够利用nvcc选项“maxrregcount=value”告诉编译器利用更多寄放器(留意:能够指定的最大寄放器数量为128)。这必要正在“利用更多的寄放器”战“筑立更少的线程”之间衡量利弊,有可能会障碍躲藏存储器延迟。正在某些架构中,利用该选项可能形成资本有余,主而导致内核无奈启动。

  分歧之处正在于reverseArray_multiblock_fast.cu利用共享内存改良了内核的机能,而reverseArray_multiblock.cu彻底正在全局内存中施行。意彩动态您能够测验测验为这两个法式计时并验证机能的差别。reverseArray_multiblock.cu也能以低效的体例拜候全局内存。正在未来的专栏中,咱们将引见若何利用CUDA profiler诊断战修复该机能问题,还将展隐最新的10个系列架构中的改良若何削减了很多环境下对这些优化的需求。

  正在当前的专栏中咱们将细致会商存储器组冲突。目前咱们只要晓得reverseArray_multiblock_fast.cu不存正在存储器组冲突,由于持续线程拜候持续值。意彩娱乐注册

  正在此处插入源代码列表reverseArray_multiblock_fast.cu 决定运转时共享内存的容量必要正在主机代码战设施代码进行一些设置。正在本例中,内核每个数据块享内存的容量(以字节为单元)都正在主机的施行设置装备安排中指定(利用可选的第三个参数)。(仅当共享内存的容量正在内核启动时指定后,才设置主机端。若是正在编译时修复,则主机端不必要任何设置。)比方,正在主机代码arrayReversal_multiblock_fast.cu中,以下代码片断为一个整数数组(蕴含的元素数等于数据块中的线程数)分派共享内存!意彩动态

  】上一个专栏会商了施行模子战内核启动施行设置装备安排若何影响寄放器数量以及当地多处置器资本(好比共享内存, share memory)。隐正在咱们继续会商内存的机能以及共享内存正在reverseArray_multiblock_fast.cu中的利用。

意彩产品

意彩客服:

意彩微 信:

意彩qq:

意彩店铺:意彩娱乐平台

  

查看意彩