SYCL的内存一致性模型基于C++核心语言的内存一致性模型。当使用SYCL提供的类和函数扩展影响内存一致性时,如果不使用这些扩展的默认行为始终与标准C++的行为相匹配。 SYCL实现必须保证在主机和设备代码之间使用相同的内存一致性模型。每个设备编译器必须支持在3.9.1节中描述的最低版本的C++中定义的内存模型;支持其他版本的C++的SYCL实现也必须支持相应的内存模型。 在工作项内部,操作根据C++核心语言定义的序列化关系进行排序。 确保不同工作项之间的内存一致性需要仔细使用组屏障操作,mem-fence操作和原子操作。跨不同工作项的操作顺序由C++核心语言定义的happens before关系确定,单个关系统治所有地址空间(内存区域)。 在任何SYCL设备上,可以通过使用组屏障操作使单个组内的本地和全局内存一致。在支持获取-释放或顺序一致内存排序的SYCL设备上,可以通过使用mem-fence和原子操作使一组工作项可见的所有内存一致。 通过主机应用程序中定义的同步,可以保证主机和SYCL设备之间或同一上下文中的不同SYCL设备之间的内存一致性,如3.9.8节所定义。在支持对USM分配进行并发原子访问并支持获取-释放或顺序一致内存排序的SYCL设备上,可以通过使用mem-fence和原子操作来强制执行跨设备内存一致性。可以应用于原子操作的最广泛的范围对应于可以访问相关内存位置的工作项集合。例如,在工作组本地内存中可以应用于原子操作的最广泛的范围是sycl::memory_scope::work_group。如果提供了更广泛的范围,则行为就像提供了包含所有可以访问关联内存位置的工作项的最窄范围一样。 将内存范围添加到C++内存模型会修改C++核心语言中某些概念的定义。例如:数据竞争,同步关系和顺序一致性必须以一种考虑具有不同(但兼容)范围的原子操作的方式进行定义,类似于OpenCL 2.0规范。形式化SYCL内存模型的工作正在进行中,并将在将来的SYCL规范版本中包括一个正式的内存模型。 原子操作可以在缓冲区和USM中的内存上执行。必须使用sycl::atomic_ref类来提供从设备代码安全地访问缓冲区或USM分配的原子访问。 内存一致性保证与任何前进保证无关。 SYCL实现必须同时执行工作项,并确保组中的工作项遵守组屏障的语义,但不需要提供任何额外的前进保证。 通过内存操作同步工作项通常是不安全的,但仅在以下条件为真时支持: •支持包含正在同步的工作项集合的获取-释放或顺序一致内存排序; •正在同步的工作项保证相互之间取得前进。 工作项相互之间取得前进的能力是实现定义的

请用中文重写下面这段话不改变原文的意思适当提取凝练重点知识减少字数:The SYCL memory consistency model is based upon the memory consistency model of the C++ core language Where SYCL offers extensions to classes and functions that may

原文地址: http://www.cveoy.top/t/topic/fQZP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录