00:05:00 在本节中,解释了延迟的概念及其在电路设计中的重要性。延迟是电路完成一个或多个操作所花费的时间,可以用时间或时钟周期来衡量。降低延迟通常是目标,但必须仔细平衡它与最大化 fmax。给出了针对延迟优化的设计和通过流水线使用针对 f max 优化的设计的示例。强调了流水线寄存器打破长的关键路径和提高速度的重要性。
00:15:00 在本节中,演讲者解释了 FPGA 中电路占用的概念。该电路有多个寄存器,其中一个是有效寄存器,用于确定输入数据是否有效。目标是通过最小化整个电路中的气泡来减少电路中的气泡以增加占用率。计算每个周期以查看资源的使用情况,电路中未占用的部分称为气泡。通过减少气泡和增加占用率,可以增加 f max 。
YouTube 视频“OpenCL 示例 (I)”介绍了在 C 编程中使用嵌套循环实现矩阵乘法及其作为 OpenCL 内核的实现。讲师解释了如何使用两级嵌套循环对矩阵中的结果元素进行点积计算,以及矩阵 C 的每个输出元素如何在 OpenCL 中被视为单独的工作项。该视频还介绍了为执行准备 OpenCL 内核所需的步骤,以及将结果矩阵从设备检索到主机,以及设置工作组大小和使用修改后的内核参数执行内核所需的步骤。此外,还提供了矩阵乘法的示例代码,演讲者演示了在 Mac OS 上获取设备和平台 ID 以及在不同平台上创建程序对象的过程。最后,视频解释了缓冲区管理、跟踪主机端分配的资源和使用的 OpenCL 资源,并提供了一个简单的乘法内核示例。
该视频涵盖了使用 OpenCL 的各种示例,包括矩阵乘法、图像旋转和图像过滤。对于图像旋转,演讲者解释了如何使用输入分解来分解问题,并演示了用于识别每个像素的原始位置和新位置的核函数。对于图像过滤,演讲者讨论了在设备端创建图像对象的概念以及使用 OpenCL 采样器来定义如何访问图像。他们还展示了带有两个嵌套 for 循环的图像卷积函数的示例实现。该视频最后演示了如何使用 OpenCL 对图像执行卷积滤波器并验证结果。
00:00:00 在本节中,讲师介绍了经典计算示例矩阵乘法,并解释了如何在C 编程中通过嵌套循环来实现它。他们还解释了矩阵中结果元素的点积计算,即矩阵 A 的一行和矩阵 B 的列的乘积。讲座解释了两级嵌套循环可以独立执行并且可以执行以一种随机的方式。
00:05:00 在本节中,讨论了工作项的概念以及如何应用它在 OpenCL 内核中实现矩阵乘法。矩阵 C 的每个输出元素都被视为一个单独的工作项,并且在 FPGA 或 GPU 处理元素的帮助下,二维范围的工作项可以映射到硬件实现中的其他 for 循环。为实现矩阵乘法,定义了一个名为“simple multiply”的内核函数和一个参数列表,它需要所有必要的输入矩阵及其维度。内核函数体使用全局 ID 计算工作项的二维位置并初始化求和以计算矩阵 C 的结果元素。
00:10:00 在本节中,演讲者使用 OpenCL 编程框架解释矩阵乘法的核函数。内核函数利用点积运算和 for 循环遍历 a 的行向量和 B 的列向量的元素。使用行号和列号计算二维输入矩阵的索引以找到行向量和列向量中的右元素。一旦计算出点积,结果元素就会分配给 C 中的相应元素。还讨论了计算环境,它与平台相关,涉及了解平台中的可用资源和重要参数。
00:25:00 在本节中,视频介绍了如何通过声明缓冲区和使用 OpenCL API 函数从输入矩阵 B 和 C 以及输出矩阵 C 创建和移动数据。他们假设矩阵 A、B 和 C 已经声明为浮点型数组,并将数据存储在物理内存的线性地址空间中。该视频演示了如何使用 CL 创建缓冲区函数为矩阵 A 和 B 声明缓冲区,以及您编写的 CL Inc 缓冲区函数将初始数据从矩阵 A 和 B 复制到创建的缓冲区中,缓冲区位于设备上。下一步是为矩阵 C 分配空间,它被声明为 CL 内存只写缓冲区,因为设备将计算结果写入它。
00:30:00 在 YouTube 视频“OpenCL 示例 (I)”的这一部分中,演讲者解释了从设备检索结果并将结果矩阵从缓冲区 C 复制到主机的过程。显示了 API C 定义,并解释了创建缓冲区的五个参数,包括上下文、标志、大小、主机指针和返回值。演讲者接着解释了 OpenCL 程序中的第三个主要步骤,即内核编译,使用 FPGA 设备的简单编译过程。该过程涉及创建和构建程序以及从源代码中选择正确的内核函数。最后,演讲者讨论了如何在运行内核程序之前使用 CL 设置内核参数 OpenCL API 来初始化内核参数。
00:45:00 在这部分视频中,演示者演示了如何在 Mac 操作系统上获取 OpenCL 的设备和平台 ID。通过调用获取平台 ID 和创建命令队列等各种 OpenCL 函数,演讲者创建 OpenCL 上下文并编译程序。他们还解释说,显示的代码同时支持 Mac OS 和 OpenCL SDK,如果在不同的平台上运行,将会报错。
00:50:00 在本节中,视频演示了如何在不同平台上使用 OpenCL 创建程序对象。在 Mac OS 上,程序对象是从内核源代码文件创建的,而在 Altera FPGA OpenCL SDK 上,它是从编译生成的二进制文件创建的。一旦创建了程序对象,就可以构建内核程序,并可以从该程序对象中选择特定的内核函数。到本节结束时,必要的对象和函数已准备好用于程序的下一部分。
01:05:00 在本节中,演讲者讨论了如何使用输入分解将图像旋转问题分解为更小的问题。他们解释说,图像的像素信息将通过 x 和 y 维度的独立计算被复制到一个新的位置。分配工作组以使用其全局 ID 计算每个像素的新位置。演讲者还详细介绍了如何确定工作项组和维度以及完成此操作所需的核函数。目标是为图像旋转计算创建一种更有效和可扩展的方法。
01:10:00 在本节中,视频演示者解释了如何使用 OpenCL 旋转图像。核函数用于识别像素的原始位置,使用旋转参数计算像素的新位置,检查边界检查以确保新坐标落在原始图像大小内,并从原始位置复制像素信息到新位置。该代码还包括 OpenCL API 的 C++ 绑定以及查询平台、获取设备和声明缓冲区以将数据从主机内存移动到设备缓冲区的步骤。还创建了只读缓冲区以确保原始数据的安全性。
01:15:00 在本节中,演讲者解释了使用 OpenCL 执行图像旋转所需的步骤。首先,必须将原始图像复制到图像缓冲区中。然后,通过初始化目标缓冲区并设置正确的内核参数(包括原始图片的尺寸和旋转参数)来编译和执行内核。内核以全局工作组大小和本地工作组大小执行。最后,使用 in Q 读缓冲区将结果读回主机。演讲者还演示了图像旋转的示例源代码,其中包括头文件、实用函数、平台和设备 ID、命令队列、程序和内核对象,以及原始图像和旋转图像的输入/输出缓冲区。
OpenCL allows a programmer to offload a sequence of commands to a heterogeneous accelerator, such as a GPU. For embedded devices the overhead of building a command sequence can be expensive, and many applications require the same pipeline of commands to be repeatedly enqueued in a loop. For example, in computer vision where the same command...
该视频讨论了如何使用 libclcxx 将 C++ 库集成到开源内核开发中。该项目集成了类型特征,这是 C++ 元编程的基本库,目的是向开发人员公开更多 C++ 功能。该视频展示了类型特征库如何通过其处理地址空间和矢量类型的能力来优化 OpenCL 内核的性能。该视频鼓励开发人员尝试使用该库,并为缩短开发周期做出贡献,同时获得与 C++ 的最大兼容性。该库以与 C++ 参考页面类似的风格提供氧气文档,使开发人员可以轻松浏览新功能。
00:00:00 在本节中,Anastasia 的 Stulova 讨论了使用 lipclcxx 来支持在开源内核开发中使用 C++ 库。虽然用于 OpenCL 内核语言的 C++ 具有 C++ 功能,但它缺乏库支持,因此解决所存在的限制非常重要。因此,创建了 leap clcxx 项目,集成了 lipcxcxx,目标是向开源内核开发人员公开更多 C++ 功能。此外,Tulva 认为 typetraits 是一个必不可少的库,可以促进 C++ 中的完全元编程,并扩展命名空间 std 为现有特征提供专业化,同时为开放单元向量类型添加新特征等。新库以与 C++ 参考页面类似的风格提供氧气文档,使开发人员更容易浏览新功能。
00:05:00 在本节中,视频讨论了类型特征库的使用如何提高 OpenCL 内核的性能,特别是在地址空间和矢量交易方面。该视频提供了示例,演示了如何使用该库为不同的指针类型创建模板函数,以及如何从类型中删除地址空间来解决 OpenCL 环境中的问题。此外,该视频还展示了包含向量大小交易如何使计算更高效,并强调了缩减算法的实施如何适用于向量类型。总的来说,在 OpenCL 内核中使用类型交换可以导致更丰富的 C++ 编程。
00:10:00 在本节中,演讲者解释了如何使用矢量大小作为条件在 OpenCL 内核中定义添加警报功能。他们阐明,对于不同的矢量大小,选择了不同的实现,如果传入的类型不是矢量类型,则将返回缓冲区中的一项。演讲者还邀请开发人员进行试验和贡献,并获得与 C++ 的最大兼容性以缩短开发周期。他们请求有关缺失功能或错误的反馈,并鼓励在项目页面上加入对现有问题的讨论。
Presented at: IWOCL / SYCLcon 2022.Additional Information and Slides: https://www.iwocl.org/iwocl-2022/programIWOCL NewsletterSignup to receive regular updat...
hipSYCL 项目是 SYCL 的开源实现,它通过 HIP 编程模型而不是 OpenCL 以 GPU 为目标。它由编译器组件、镰刀接口和安全运行时组成。安全编译器识别内核,处理本地内存分配,并实现信号机制。 dispatch 函数根据用户提供的内核创建特定的项目,优化函数可以用 rock prim 定义。未来的方向是允许多个后端并取消对静态编译模型的限制。操作提交模型正在过渡到批量提交以获得更高的任务吞吐量,并且 hipSYCL 在源代码级别具有互操作性,可以与 hip 和 CUDA 混合匹配。作为一个开源项目,欢迎贡献者。
00:00:00 在本节中,演讲者讨论了 hipSYCL 项目背后的动机,该项目是一个开源 SYCL 实现,它通过 HIP 编程模型而不是使用 OpenCL 直接以 GPU 为目标。目的是优化代码并使使用供应商提供的分析器和调试器变得更容易,同时避免与其他编程模型可能发生的采用摩擦。演讲者还将 hipSYCL 与可用于 SYCL 和 CUDA 互操作性的其他解决方案进行了比较,由于 hipSYCL 使用了 HIP 编程模型,因此将 hipSYCL 置于规模的 CUDA 互操作性端。
00:05:00 在本节中,视频解释了 hipSYCL 的工作原理及其三个主要组件:编译器组件、镰刀接口和安全运行时。编译器组件允许编译器同时理解 CUDA 和 sickle,使得在源代码级别具有互操作性成为可能。安全运行时负责数据管理和任务调度,而镰刀接口由镰刀命名空间中的类和函数组成。此外,该视频还提到 sickle 是一种灵活的解决方案,可用于构建涵盖所有可能用例的实现。为了以加速器为目标,需要一个专用的编译器组件,它可以识别内核并为加速器编译它们。
00:10:00 在视频的这一部分,演讲者讨论了 hipSYCL 中的安全编译器如何运行。他们解释说,编译器必须识别内核并确定哪些代码需要发送到设备,然后处理内核在本地内存中的分配方式。特定于镰刀的诊断功能也被提及为未来发展的优先事项。演讲者解释说,通过使用名为 Cycle CC 的编译器包装器,使用 hip secure 编译器组件相对简单,它隐藏了所涉及的复杂性,例如编译器的正确调用和链接,以及如何设置包含路径。他们讨论了调用内核如何需要一些技巧并解释了它是如何完成的。此外,目前在 hipSYCL 中使用协程和 Hip 事件的信号机制用于动态乱序处理,但讨论了其缺点。
00:15:00 在本节中,演讲者讨论了如何使用调度函数创建基于用户提供的内核的特定项目,以及如何通过实例化用户提供的调度函数来实现并行和安全核心。然而,最初,所有代码都作为主机代码传递,其中用户提供的内核是主机 lambda,不能直接调用,因此他们添加了一个名为 HIP 内核的虚拟属性,只有在一旦初始解析完成并且 hipSYCL 插件接管了该属性。他们为 hipSYCL 和 CUDA 实现了良好的内存性能,并且使用 hipSYCL,他们可以在源代码级别实现 hip 和 CUDA 互操作性。
00:20:00 在本节中,演讲者讨论了如何使用带 epsilon 的 rock prim 来实现优化缩减。他们建议使用 macro zip secure platform cuda 或 hips a good platform rockem 定义优化函数,标记为主机和设备。如果针对目标平台进行编译,则调用优化函数,否则调用回退函数。演讲者解释说,像 rock prim 这样的供应商优化库可以实现更快的性能,因为它们对目标硬件有更多的了解,尽管 hipSYCL 仍然是预一致性并且缺少图像和开放状态互操作性等一些功能,但它仍然可以用于实际-世界应用。但是,由于纯库循环实现的问题,CPU 包上安排的并行下降速度很慢。
00:25:00 在本节中,演讲者讨论了在 CPU 上使用基本并行形式或分层并行形式与使用 nd 范围并行形式与 hipSYCL 的性能差异。后者会导致巨大的性能损失,因为它需要启动与每个工作组中的工作项一样多的威胁。演讲者随后谈到了 hipSYCL 的未来发展方向,即创建一个新的运行时,允许任意后端同时处于活动状态,并消除对静态编译模型的限制。他们还正在过渡到端到端映射,其中 n 循环使用映射到 M 后端队列来优化硬件利用率。此外,新运行时和现有 SYCL 接口之间将严格分离,以便于维护和试验。
00:35:00 在本节中,解释了 hipSYCL 是针对 CPU、视频 GPU 和 AMD GPU 的 SICL 的实现。它建立在低级供应商 API hip 和 CUDA 之上,这使得它可以在源代码级别进行互操作。这允许开发人员混合搭配 hip 和 CUDA,使其适用于一系列 HPC 和其他需要访问最新的低级硬件优化或供应商优化库的用例。此外,它允许为特定硬件创建高度优化的代码路径,并且内核性能有望与常规 hip 或 CUDA 相当。作为一个开源项目,始终欢迎贡献者,感兴趣的人可以在 GitHub 页面上了解更多信息。
This video was presented at the online version of IWOCL / SYCLcon 2020.Authors: Aksel Alpay and Vincent Heuveline (Heidelberg University) Additional Informat...
00:00:00 在本节中,演讲者讨论了提高抽象级别以提高生产力和吸引更多开发人员的必要性。随着模型变得越来越复杂,对计算能力的需求迅速增加。演讲者提到了忍者差距,指的是难以找到和雇用较低级别的专家,例如汇编或 Cuda 开发人员。提高抽象级别会导致性能损失,这就是为什么需要 GPU 和 GAUDI 等 AI 加速器来满足日益增长的计算能力需求。
00:10:00 在本节中,演讲者讨论了使用基于 OneAPI 的工具包的强大功能以及 Data Policy++ 编译器的概念,该编译器旨在为 C++ 库添加异构性。通过使用预定义的策略,您可以轻松访问 CPU 或 GPU,而无需了解太多关于 OpenCL 或 CUDA 的底层细节。编译器提供了控制和分离周围内存、处理异常代码和创建并行计算的能力。
00:15:00 在视频的这一部分中,演讲者解释了要具有良好的异构计算能力,需要具备三个条件。第一个是发现设备并获取有关它的信息的能力。这是演讲者展示一段简单代码的地方,它检测并列出所有连接到系统的设备。第二个需求是关于设备状态的实时信息,它允许使用率和温度监控,还允许用户在 CPU 和 GPU 之间切换。第三个要求是能够在设备和主机之间高效无缝地交换内存,这是通过SYCL中的两种主要方式实现的——缓冲区和统一图表内存。
This lecture introduces PyOpenCL and PyCUDA to define and run functions on General Purpose Graphics Processing Units (GPUs). The running example is a basic ...
This video was presented as part of the panel discussion at the online version of IWOCL / SYCLcon 2020, and was presented by Neil Trevett, Khronos Group Pres...
EECE.6540 异构计算(马萨诸塞大学洛厄尔分校)- 46. 基本 FPGA 概念
46. FPGA 基本概念
该视频涵盖了现场可编程门阵列 (FPGA) 的基本概念。与 CPU 不同,FPGA 可以通过编程来适应特定的硬件资源,这意味着它们是高度可定制的。该视频讨论了延迟在电路设计中的重要性,以及如何通过最大化 fmax 来平衡延迟。它引入了流水线设计的概念,以提高执行计算的频率,并讨论了电路中的数据路径和控制路径。最后,该视频讨论了 FPGA 中的电路占用以及减少气泡和增加占用如何增加 fmax。
47.设计分析(一):分析FPGA早期图像
47.设计分析(一):分析FPGA早期图像
视频的这一部分重点介绍了为 DPC++ 设计分析 FPGA 早期图像的过程。演讲者解释了所涉及的步骤,例如编译程序、生成 FPGA 二进制文件和运行分析。该视频包括如何生成报告和解释报告中提供的各种信息面板的演示。演讲者还分析了 b2 模块的 FPGA 早期图像,并讨论了各种逻辑块、循环、加载单元和展开因子。他们还讨论了内核函数的设计如何显着影响 FPGA 的内部设计,并提供了如何展开内部和外部循环以提高吞吐量的示例。这些示例说明了高级语言编程在影响 FPGA 硬件资源方面的灵活性。
48. DPC++ FPGA设计分析(二):Runtime Profiling
48. DPC++ FPGA设计分析(二):Runtime Profiling
在此视频中,演示者讨论了使用工具分析程序运行时性能的过程,这些工具通过将分析仪器寄存器添加到 FPGA 比特流来收集性能数据。他们演示了如何使用带有用户添加的性能计数器的英特尔 FPGA 动态分析器来编译分析和解释集体分析结果。它们展示了 V2 分析器如何显示用于分析运行时分析结果的内核函数和可执行文件,以及如何识别分区瓶颈并对其进行优化。使用的例子是一个矩阵修改内核,它对全局内存有很多内存访问,通过使用本地内存进行优化,减少与全局内存的通信,提高设计效率。
EECE.6540 异构计算(马萨诸塞大学洛厄尔分校)- 49. OpenCL 示例
49. OpenCL 示例(一)
YouTube 视频“OpenCL 示例 (I)”介绍了在 C 编程中使用嵌套循环实现矩阵乘法及其作为 OpenCL 内核的实现。讲师解释了如何使用两级嵌套循环对矩阵中的结果元素进行点积计算,以及矩阵 C 的每个输出元素如何在 OpenCL 中被视为单独的工作项。该视频还介绍了为执行准备 OpenCL 内核所需的步骤,以及将结果矩阵从设备检索到主机,以及设置工作组大小和使用修改后的内核参数执行内核所需的步骤。此外,还提供了矩阵乘法的示例代码,演讲者演示了在 Mac OS 上获取设备和平台 ID 以及在不同平台上创建程序对象的过程。最后,视频解释了缓冲区管理、跟踪主机端分配的资源和使用的 OpenCL 资源,并提供了一个简单的乘法内核示例。
该视频涵盖了使用 OpenCL 的各种示例,包括矩阵乘法、图像旋转和图像过滤。对于图像旋转,演讲者解释了如何使用输入分解来分解问题,并演示了用于识别每个像素的原始位置和新位置的核函数。对于图像过滤,演讲者讨论了在设备端创建图像对象的概念以及使用 OpenCL 采样器来定义如何访问图像。他们还展示了带有两个嵌套 for 循环的图像卷积函数的示例实现。该视频最后演示了如何使用 OpenCL 对图像执行卷积滤波器并验证结果。
用于大规模并行支持向量分类的 SYCL、OpenCL、CUDA 和 OpenMP 的比较 ( WOCL / SYCLcon 2022 )
用于大规模并行支持向量分类的 SYCL、OpenCL、CUDA 和 OpenMP 的比较
该视频比较了 SYCL、OpenCL、CUDA 和 OpenMP 在不同硬件平台上用于大规模并行支持向量机分类的性能。演讲者使用称为并行斐波那契的实现解释了矩阵向量乘法的并行化,它支持多 GPU 执行,但仅支持二进制分类和密集计算。用于测试的硬件包括 Nvidia A100 和 RTX 380 GPU、AMD Radeon Pro 7 GPU 和 Intel Core E9-10-09020X CPU。结果表明,CUDA 是 Nvidia GPU 最快的后端,而 OpenCL 是 CPU 最快的后端。 SYCL 是用户友好的,而 Hipsicle 比 DPC++ 和 OpenCL 更快,使用成本低。此外,演讲者还讨论了未来的工作,例如调查 FPGA 的性能、通过 MPI 添加对分布式系统的支持,以及使用混合精度计算和特殊的机器学习硬件,如 NVIDIA 的张量核心。
使用 libclcxx 在 OpenCL 内核中实现更丰富的 C++ ( WOCL / SYCLcon 2022 )
使用 libclcxx 在 OpenCL 内核中实现更丰富的 C++
该视频讨论了如何使用 libclcxx 将 C++ 库集成到开源内核开发中。该项目集成了类型特征,这是 C++ 元编程的基本库,目的是向开发人员公开更多 C++ 功能。该视频展示了类型特征库如何通过其处理地址空间和矢量类型的能力来优化 OpenCL 内核的性能。该视频鼓励开发人员尝试使用该库,并为缩短开发周期做出贡献,同时获得与 C++ 的最大兼容性。该库以与 C++ 参考页面类似的风格提供氧气文档,使开发人员可以轻松浏览新功能。
SYCL beyond OpenCL:hipSYCL 的架构、现状和未来方向(IWOCL / SYCLcon 2020)
SYCL beyond OpenCL:hipSYCL 的架构、现状和未来方向
hipSYCL 项目是 SYCL 的开源实现,它通过 HIP 编程模型而不是 OpenCL 以 GPU 为目标。它由编译器组件、镰刀接口和安全运行时组成。安全编译器识别内核,处理本地内存分配,并实现信号机制。 dispatch 函数根据用户提供的内核创建特定的项目,优化函数可以用 rock prim 定义。未来的方向是允许多个后端并取消对静态编译模型的限制。操作提交模型正在过渡到批量提交以获得更高的任务吞吐量,并且 hipSYCL 在源代码级别具有互操作性,可以与 hip 和 CUDA 混合匹配。作为一个开源项目,欢迎贡献者。
SYCL:未来是开放的、并行的和异构的(Core C++ 2022 )
SYCL:未来是开放的、并行的、异构的
在这段关于 SYCL 编程的视频中,演讲者强调了提高抽象级别以提高生产力和吸引更多开发人员的必要性,因为复杂的模型需要更高的计算能力,而加速器系统可以满足这一要求。强调了软件可移植性和 OneAPI 的重要性,因为它允许设备在 CPU、GPU 和其他设备上工作。还讨论了 SYCL 的好处,这是一种开放、并行和异构的编程模型,演讲者强调了可用于优化代码和提高性能的众多在线资源和工具。演讲者鼓励观众访问 oneapi.io 及其 YouTube 频道以获取资源和支持。
Python 中的 GPU 加速
Python 中的 GPU 加速
该视频解释了如何利用图形处理单元的强大功能在 Python 编程中实现 GPU 加速,这可以通过数据并行性提供高达 10 倍的加速。简单介绍了GPU计算的两个标准OpenCL和CUDA,视频演示了使用Pi OpenCL和CUDA在Python中进行矩阵乘法。演讲者解释了全局内存和矩阵乘法内核的使用,还讨论了用于计算矩阵-矩阵乘积中的一个元素的算法。讨论了 C 和 Python 中的 GPU 加速代码,重点是理解矩阵的内部表示和内存分配。讲座中的习题为进一步探索GPU计算提供了基础。
OpenCL 3.0 发布演示(IWOCL / SYCLcon 2020)
OpenCL 3.0 发布演示
本视频讨论了 OpenCL 3.0 的推出,重点是它对行业低级并行编程的重要性。 OpenCL 3.0 并没有为 API 增加新的功能,而是提供了生态系统的重新调整,使 OpenCL 能够接触到更多的开发者和设备。演示者还讨论了 DSP 光处理器扩展的添加、未来功能的路线图,以及可以为 OpenCL Vulcan 生成精神内核的开源内核语言编译器不断发展的生态系统。在工作组为未来几个月的第一波实施做准备时,鼓励用户提供反馈以帮助完成规范。