Caching 合并内存访问是一种特征还是现象?

Caching 合并内存访问是一种特征还是现象?,caching,opencl,gpgpu,coalescing,Caching,Opencl,Gpgpu,Coalescing,我目前正在用OpenCL编写一个较小的项目,我试图找出真正导致内存聚合的原因。关于GPGPU编程的每一本书都说GPGPU应该如何编程,但不是硬件为什么喜欢这样 那么,是某种特殊的硬件组件合并了数据传输吗?还是仅仅为了更好地利用缓存?还是完全不同的东西?内存合并使一些不同的东西更有效。这通常是在请求到达缓存之前完成的。与SIMT执行模型类似,它是一种架构权衡。它使GPU拥有更高效、高性能的内存系统,但也迫使程序员仔细考虑他们的数据布局 如果不合并,缓存需要能够同时处理大量请求,或者内存访问将花费更

我目前正在用OpenCL编写一个较小的项目,我试图找出真正导致内存聚合的原因。关于GPGPU编程的每一本书都说GPGPU应该如何编程,但不是硬件为什么喜欢这样


那么,是某种特殊的硬件组件合并了数据传输吗?还是仅仅为了更好地利用缓存?还是完全不同的东西?

内存合并使一些不同的东西更有效。这通常是在请求到达缓存之前完成的。与SIMT执行模型类似,它是一种架构权衡。它使GPU拥有更高效、高性能的内存系统,但也迫使程序员仔细考虑他们的数据布局

如果不合并,缓存需要能够同时处理大量请求,或者内存访问将花费更长的时间,因为不同的数据传输需要一次处理一个。这甚至在仅仅检查某个东西是命中还是未命中时都是相关的

合并请求相当容易,您只需选择一个传输,然后使用匹配的高位地址位合并所有请求。您只需在每个周期生成一个请求,并重播load或store指令,直到处理完所有线程

缓存还存储连续的字节,32/64/128字节,这非常适合大多数应用程序,非常适合现代DRAM,并减少了缓存簿记信息的开销:缓存以缓存线的形式组织,每个缓存线都有一个标记,指示缓存线中存储的地址

现代DRAM使用宽接口和长突发:GPU的内存通常组织在32位或64位宽通道中,GDDR5内存的突发长度为8。这意味着DRAM接口上的每个事务一次必须获取至少32位*8=32字节或64位*8=64字节,即使这些字节只需要一个字节。设计导致合并请求的数据布局有助于高效地使用DRAM接口


GPU同时也有大量活动的并行线程和相当小的缓存。CPU通常能够使用缓存将内存请求重新排序为DRAM友好模式。GPU上的线程数量较多,缓存较小,这使得GPU上的“基于缓存的合并”效率较低,因为数据通常不会在缓存中停留足够长的时间,无法在缓存中与对同一缓存线的其他请求合并

内存合并使几种不同的事情更加高效。这通常是在请求到达缓存之前完成的。与SIMT执行模型类似,它是一种架构权衡。它使GPU拥有更高效、高性能的内存系统,但也迫使程序员仔细考虑他们的数据布局

如果不合并,缓存需要能够同时处理大量请求,或者内存访问将花费更长的时间,因为不同的数据传输需要一次处理一个。这甚至在仅仅检查某个东西是命中还是未命中时都是相关的

合并请求相当容易,您只需选择一个传输,然后使用匹配的高位地址位合并所有请求。您只需在每个周期生成一个请求,并重播load或store指令,直到处理完所有线程

缓存还存储连续的字节,32/64/128字节,这非常适合大多数应用程序,非常适合现代DRAM,并减少了缓存簿记信息的开销:缓存以缓存线的形式组织,每个缓存线都有一个标记,指示缓存线中存储的地址

现代DRAM使用宽接口和长突发:GPU的内存通常组织在32位或64位宽通道中,GDDR5内存的突发长度为8。这意味着DRAM接口上的每个事务一次必须获取至少32位*8=32字节或64位*8=64字节,即使这些字节只需要一个字节。设计导致合并请求的数据布局有助于高效地使用DRAM接口

GPU同时也有大量活动的并行线程和相当小的缓存。CPU通常能够使用缓存将内存请求重新排序为DRAM友好模式。GPU上的线程数量较多,缓存较小,这使得GPU上的“基于缓存的合并”效率较低,因为数据通常不会在缓存中停留足够长的时间,无法在缓存中与对同一缓存线的其他请求合并

尽管“RAM”(随机存取存储器)上有“random access”(随机存取)名称,但双数据速率#3随机存取存储器(DDR3-RAM)在访问连续位置时比随机位置更快

例如:“是指当您访问一个新的“列”时,DDR3 RAM将暂停的时间量,因为您的RAM芯片实际上正在充电,以便从芯片上的另一个位置提供新数据

编辑:Jan Lucas认为RAS延迟在实践中更为重要。详情见他的评论

每次切换列时,大约有10ns的延迟。因此,如果您有一组内存访问,如果您让访问一组数据彼此“靠近”,那么您就不会调用CAS延迟

因此,如果在特定位置有20个字要访问,那么在移动到新的内存位置(调用CAS延迟)之前访问这20个字会更有效。否则,您将不得不调用另一个CAS延迟来在内存位置之间“切换回”

虽然“RAM”(随机存取存储器)上有“随机存取”的名称,但双数据速率的3随机存取存储器(DDR3-RAM)在访问连续位置时比随机位置更快

Ca