Memory 使用OpenCL在AMD GCN体系结构上触发二级缓存写入全局内存

Memory 使用OpenCL在AMD GCN体系结构上触发二级缓存写入全局内存,memory,opencl,gpu,gpgpu,amd,Memory,Opencl,Gpu,Gpgpu,Amd,我正在为GPU的DRAM(全局)内存编写一系列测试。专门针对AMD GCN架构的塔希提岛和夏威夷模型线。ARCH具有回写二级缓存 我想要的是确保在另一个线程进行读取之前,全局内存的存储确实已写入全局内存 规范中的屏障和mem_围栏文件规定: CLK_GLOBAL_MEM_FENCE-屏障功能将对内存围栏进行排队,以确保内存操作对全局内存的顺序正确。例如,当工作项写入缓冲区或图像对象,然后想要读取更新的数据时,这可能很有用 但是,这仅强制执行正确的顺序。我的问题是,这是否会触发对二级缓存数据的全局

我正在为GPU的DRAM(全局)内存编写一系列测试。专门针对AMD GCN架构的塔希提岛和夏威夷模型线。ARCH具有回写二级缓存

我想要的是确保在另一个线程进行读取之前,全局内存的存储确实已写入全局内存

规范中的屏障和mem_围栏文件规定:

CLK_GLOBAL_MEM_FENCE-屏障功能将对内存围栏进行排队,以确保内存操作对全局内存的顺序正确。例如,当工作项写入缓冲区或图像对象,然后想要读取更新的数据时,这可能很有用


但是,这仅强制执行正确的顺序。我的问题是,这是否会触发对二级缓存数据的全局内存的写入?

OpenCL 1.2对此几乎没有控制权。围栏的定义非常糟糕,如果仔细阅读,技术上只会影响工作组。因此,在内核完成之前,很可能没有任何东西会强制缓存刷新

OpenCL2.0为您提供了完整的订购控制。排序是您得到的全部,而不是显式缓存操作

如果您对所有设备范围进行发布写入,那么当您看到不同设备上的工作项时,您知道之前的每一次写入也必须可见。这可能意味着,如果缓存未使用基于所有权的标准一致性协议,则缓存已被刷新

如果您只发布到设备范围,并且L2在整个设备上共享,则无需刷新它以保证订购

内存模型完全是按照顺序定义的,不是按照缓存定义的,而是按照作用域定义的,它旨在允许在非常宽松的缓存层次结构上高效地实现