Opengl 合并内存访问性能
我已经读过有关联合内存访问()及其性能重要性的内容。然而,我不知道当发生非合并内存访问时,典型的GPU会做什么。当一个线程“请求”位置P中的一个字节,而其他线程请求距离它很远的某个字节时,GPU会为该线程获得一个128字节的完整块?如果读数对齐,我是否可以读取“空闲”的其他127字节?一般规则:Opengl 合并内存访问性能,opengl,cuda,gpu,gpgpu,Opengl,Cuda,Gpu,Gpgpu,我已经读过有关联合内存访问()及其性能重要性的内容。然而,我不知道当发生非合并内存访问时,典型的GPU会做什么。当一个线程“请求”位置P中的一个字节,而其他线程请求距离它很远的某个字节时,GPU会为该线程获得一个128字节的完整块?如果读数对齐,我是否可以读取“空闲”的其他127字节?一般规则: 内存访问指令与其他任何指令一样,都是以扭曲方式发出的 扭曲中的每个线程都提供一个可读取的地址 假设这些地址在任何缓存中都没有“命中”,内存控制器将收集所有地址并确定DRAM需要多少“段”(大致类似于缓
- 内存访问指令与其他任何指令一样,都是以扭曲方式发出的
- 扭曲中的每个线程都提供一个可读取的地址
- 假设这些地址在任何缓存中都没有“命中”,内存控制器将收集所有地址并确定DRAM需要多少“段”(大致类似于缓存线)。“段”是32字节或128字节,具体取决于缓存和设备规格
- 然后,内存控制器从DRAM请求这些线/段
int
或float
),因此最终仍然需要四个二级缓存线。(没有免费的午餐。)这将是有益的。特别是,幻灯片17显示了一个“完美”合并的示例,而幻灯片25显示了一个“完全未校准”负载的示例。@Robert的答案非常准确。真正简短的回答是:非合并读取被序列化,内核只有在它们全部完成后才能继续。因此,您可以看到合并您的阅读的好处!比最坏的情况快32倍。