深入探索OpenCL:共享虚拟内存与弱一致性原子操作
1. 工作窃取与原子操作的性能优势
在特定情况下,工作窃取实现比其他实现更快。当工作项数量为32(采用工作窃取)或64(不采用工作窃取)时,工作窃取实现比Winterstein等人的实现快1.5倍。虽然原子操作本身成本较高,但它们能让工作项相互同步,在运行时平衡工作负载,从而提升应用程序的整体性能。
2. 共享虚拟内存(SVM)
2.1 为何需要SVM
在OpenCL 1.x中,主机和设备通信需显式地将数据从主机内存复制到设备内存,这会导致地址无法保留,不利于使用基于指针的数据结构。而OpenCL 2.0引入的SVM特性,提供了一个主机和所有设备都可访问的单一内存地址空间的假象。基于指针的数据结构可以在主机和设备之间无缝共享,只需显式传输数据结构的地址。这不仅减轻了异构编程的负担,还能显著提高速度,因为设备可以按需实时获取所需数据。并且,在适当的同步机制下,主机和设备可以同时修改SVM中的数据结构,进一步提高计算的并行度。
2.2 在CPU/FPGA系统中实现SVM
在异构CPU/FPGA系统中提供SVM需要实现以下三个功能:
- 虚拟地址到物理地址的转换 :CPU通常使用虚拟地址,因此在解引用主机地址空间的指针之前,必须将其转换为物理地址。这种映射关系存储在CPU的页表中。为了使主机上数据结构中使用的指针在传输到FPGA后仍然有意义,FPGA在每次SVM访问之前必须执行相同的虚拟到物理地址转换。可以通过允许FPGA直接访问主机内存中的页表来实现这一功能,例如在基于ARM的SoC中,可以通过ARM的加速器一致
超级会员免费看
订阅专栏 解锁全文
2518

被折叠的 条评论
为什么被折叠?



