当前位置: 首页 > article >正文

【IC】AI处理器核心--第二部分 用于处理 DNN 的硬件设计

第 II 部分 用于处理 DNN 的硬件设计

第 3 章 关键指标和设计目标

在过去的几年里,对 DNN 的高效处理进行了大量研究。因此,讨论在比较和评估不同设计和拟议技术的优缺点时应考虑的关键指标非常重要,这些指标应纳入设计考虑中。虽然效率通常仅与每瓦每秒的操作次数相关(例如,每秒每瓦特的浮点运算数为 FLOPS/W 或每秒每瓦万亿次操作数为 TOPS/W),但它实际上由更多指标组成,包括准确性、吞吐量、延迟、能耗、功耗、成本、灵活性和可扩展性。报告一组全面的这些指标非常重要,以便全面了解设计或技术所做的权衡。

在本章中,我们将
• 讨论这些指标中的每一个的重要性;
• 细分影响每个量度的因素。如果可行,提出描述因素和指标之间关系的方程;
• 描述如何将这些指标纳入DNN 硬件和DNN 模型(即工作负载)的设计考虑因素中
• 指定应为给定量度报告的内容,以便进行适当的评估。

最后,我们将提供一个案例研究,说明如何将所有这些指标整合在一起,以对给定的方法进行整体评估。但首先,我们将讨论每个指标。

3.1 准确性

准确性用于指示给定任务的结果质量。DNN 可以在各种任务上实现最先进的准确性,这是推动当今 DNN 普及和广泛使用的关键原因之一。用于测量准确性的单位取决于任务。例如,对于图像分类,准确率报告为正确分类图像的百分比,而对于对象检测,准确率报告为平均平均精度均值 (mAP),这与真阳性率和假阳性率之间的权衡有关。
影响准确性的因素包括任务和数据集的难度1。例如,ImageNet 上的分类比 MNIST 上的分类要困难得多,对象检测或语义分割比分类更难。因此,在 MNIST 上表现良好的 DNN 模型不一定在 ImageNet 上表现良好。
在困难的任务或数据集上实现高精度通常需要更复杂的 DNN 模型(例如,更多的 MAC操作和更不同的权重、层形状的多样性增加等),这可能会影响硬件处理 DNN 模型的效率。
因此,应根据任务和数据集的难度来解释准确性2。 使用经过充分研究、广泛使用的 DNN 模型、任务和数据集来评估硬件,可以更好地解释准确性指标的重要性。最近,在通用计算 [114] 的 SPEC 基准影响的推动下,一些行业和学术组织将一套广泛的 DNN 模型(称为 MLPerf)放在一起,作为一组经过充分研究的通用 DNN 模型,以评估性能并实现各种软件框架、硬件加速器和云平台的公平比较,以便对 DNN 进行训练和推理 [115]3。该套件包括各种类型的 DNN(例如 CNN、RNN 等)适用于各种任务,包括图像分类、对象识别、翻译、语音转文本、推荐、情感分析和强化学习。

1理想情况下,稳健性和公平性应与准确性一起考虑,因为这些因素之间也存在相互作用;然而,这些都是正在进行的研究领域,超出了本书的范围。
2打个比方,在高中考试中 10 个答案中答对 9 个与在大学考试中答对 10 个答案中的 9 个不同。人们必须超越分数,考虑考试的难度。
3早期的 DNN 基准测试工作,包括 DeepBench [116] 和 Fathom [117],现在已经被 MLPerf 归入其中。

3.2 吞吐量和延迟

吞吐量用于指示在给定时间段内可以处理的数据量或可以完成的任务执行次数。高吞吐量通常对应用程序至关重要。例如,以每秒 30 帧的速度处理视频对于提供实时性能是必要的。对于数据分析,高吞吐量意味着可以在给定的时间内分析更多的数据。随着视觉数据量呈指数级增长,高吞吐量大数据分析变得越来越重要,尤其是在需要根据分析采取行动时(例如,安全或恐怖主义预防;医疗诊断或药物发现)。吞吐量通常报告为每秒的操作数。在推理的情况下,吞吐量以每秒推理数报告,或以每次推理的秒数表示运行时间。
延迟(延时 Latency)是输入数据到达系统与生成结果之间的时间。低延迟对于实时交互式应用程序(如增强现实、自主导航和机器人技术)是必要的。延迟通常以秒为单位报告。
吞吐量和延迟通常被认为是可以直接相互派生的。然而,它们实际上是非常不同的。一个典型的例子是众所周知的对输入数据进行批处理的方法(例如,将多个图像或帧一起批处理以进行处理)以提高吞吐量,因为它会分摊开销,例如加载权重;但是,批处理也会增加延迟(例如,在每秒 30 帧和 100 帧的批处理中,某些帧将经历至少 3.3 秒的延迟),这对于实时应用程序(如高速导航)来说是不可接受的,因为高速导航会减少可用于航向校正的时间。因此,根据方法的不同,同时实现低延迟和高吞吐量有时可能会有所不同,并且两者都应该报告4
有几个因素会影响吞吐量和延迟。在吞吐量方面,每秒的推理次数受以下因素影响:
i n f e r e n c e s s e c o n d = o p e r a t i o n s s e c o n d ∗ 1 o p e r a t i o n s i n f e r e n c e ( 3.1 ) \frac{inferences}{second}=\frac{operations} {second} * \frac{1}{\frac{operations}{inference}} \quad (3.1) secondinferences=secondoperationsinferenceoperations13.1
其中,每秒的操作数由 DNN 硬件和 DNN 模型决定,而每次推理的操作数由 DNN 模型决定。

当考虑由多个处理元件 (PE) 组成的系统时,其中 PE 对应于执行单个 MAC作的简单或原始内核,每秒的作数可以进一步分解如下:
在这里插入图片描述

第一项反映单个 PE 的峰值吞吐量,第二项反映并行量,而最后一项反映由于架构无法有效利用 PE 而导致的退化。
由于处理 DNN 的主要作是 MAC,因此我们将互换使用操作数和 MAC操作数。

4这里描述的现象也可以使用队列理论中的利特尔定律 [118] 来理解,其中平均吞吐量和平均延迟之间的关系与飞行中的平均任务数有关,定义如下:
througnput ‾ = tasks-in-flight ‾ latency ‾ \overline {\text{througnput}}=\frac{\overline{\text {tasks-in-flight}}}{\overline{\text{latency}}} througnput=latencytasks-in-flight
以 DNN 为中心的利特尔定律版本的吞吐量以每秒推理数衡量,延迟以秒为单位,动态推理(相当于飞行任务数),以同时处理的批次中的图像数量来衡量。这有助于解释为什么增加动态推理数量以提高吞吐量可能会适得其反,因为一些增加动态推理数量的技术(例如批处理)也会增加延迟。

可以通过增加每秒的周期数(对应于更高的时钟频率)来提高单个 PE 的峰值吞吐量,方法是减少电路的关键路径或微架构级数,或每个作的周期数,这可能会受到 MAC 设计的影响(例如,非流水线多周期 MAC 每个作将有更多的周期)。
虽然上述方法增加了单个 PE 的吞吐量,但可以通过增加 PE 的数量来提高整体吞吐量,从而增加可以并行执行的最大 MAC作数。PE 的数量由 PE 的面积密度和系统的面积成本决定。如果系统的面积成本是固定的,那么增加 PE 的数量需要增加 PE 的面积密度(即减少每个 PE 的面积)或牺牲片上存储面积以换取更多的 PE。但是,减少片上存储会影响 PE 的利用率,我们接下来将对此进行讨论。
增加 PE 的密度也可以通过减少与向 MAC 提供作数相关的 logic 来实现。这可以通过用单个 logic控制多个 MACs 来实现。这类似于基于指令的系统(如 CPU 和 GPU)中的情况,这些系统通过使用大型聚合指令(例如,单指令、多数据 (SIMD)/矢量指令;单指令、多线程 (SIMT)/张量指令)来减少指令簿记开销,其中单个指令可用于启动多个操作。
PE 的数量和单个 PE 的峰值吞吐量仅表示所有 PE 都执行计算(100% 利用率)时的理论最大吞吐量(即峰值性能)。实际上,可实现的吞吐量取决于这些 PE 的实际利用率,该利用率受以下几个因素的影响:
在这里插入图片描述
第一个术语反映了将工作负载分配到 PE 的能力,而第二个术语反映了这些活动 PE 处理工作负载的效率。
活动 PE 的数量是接收工作的 PE 的数量;因此,最好将工作负载分配给尽可能多的 PE。分配工作负载的能力取决于架构的灵活性,例如片上网络,以支持 DNN 模型中的层形状。在片上网络的约束下,活动 PE 的数量也由映射过程对 PE 的特定工作分配决定。映射过程涉及将每个 MAC作(包括交付适当的作数)在空间和时间上放置和调度到 Pe 上。可以将映射视为 DNN 硬件的编译器。片上网络和映射的设计将在第 5 章和第 6 章中讨论。
活动 PE 的利用率在很大程度上取决于及时向 PE 交付工作,以便活动 PE 在等待数据到达时不会变为空闲状态。这可能会受到 (片上和片外) 内存和网络的带宽和延迟的影响。带宽要求可能会受到DNN 模型中数据可重用量以及内存层次结构和数据流可利用的数据重用量的影响。数据流确定作的顺序以及数据的存储和重用位置。还可以使用更大的批处理大小来增加数据重用量,这也是增加批处理大小可以提高吞吐量的原因之一。第 5 章和第 6 章讨论了数据传输和内存带宽的挑战。活动 PE 的利用率也会受到跨 PE 分配的工作不平衡的影响,这可能发生在利用稀疏性时(即,避免与乘以零相关的不必要工作);工作量较少的 PE 变为空闲状态,因此利用率较低。
在这里插入图片描述

PE 的数量和 PE 的利用率之间也存在相互作用。例如,降低 PE 需要等待数据的可能性的一种方法是在 PE 附近或内部本地存储一些数据。但是,这需要增加分配给片上存储的芯片面积,如果芯片面积固定,这将减少 PE 的数量。因此,一个关键的设计考虑因素是分配多少区域进行计算(这会增加 PE 的数量)与片上存储(这会增加 PE 的利用率)。
可以使用 Eyexam 捕获这些因素的影响,Eyexam 是一种系统的方法,用于理解 DNN 处理器的性能限制作为 DNN 模型和加速器设计的特定特征的函数。Eyexam包括并扩展了著名的车顶线模型[119]。如图 3.1 所示,roofline 模型将平均带宽需求和峰值计算能力与性能相关联。Eyexam 在第 6 章中介绍。
虽然公式 (3.1) 中每次推理的作数取决于 DNN 模型,但每秒作数取决于 DNN 模型和硬件。例如,如第 9 章所述,设计具有高效层形状(也称为高效网络架构)的 DNN 模型可以减少DNN 模型的MAC操作以及每次推理的操作。然而,这种 DNN 模型可能会导致各种各样的层形状,其中一些层的 PE 利用率可能很差,因此会降低每秒的总操作量,如公式 (3.2) 所示。
对每秒作数的更深入考虑是,并非所有作都是平等的,因此每个作的周期数可能不是恒定的。例如,如果我们考虑任何乘以 0 都是零的事实,那么某些 MAC作是无效的(即,它们不会改变累积值)。无效作的数量是 DNN 模型和输入数据的函数。这些无效的 MAC作可能需要更少的周期或根本不需要周期。相反,我们只需要处理有效(或非零)MAC作,其中两个 inputs 都非零;这被称为利用稀疏性,这将在第 8 章中讨论。
仅处理有效的 MAC作可以通过增加每个周期的(总)作数来增加每秒的(总)作数5。理想情况下,硬件将跳过所有无效的作;然而,在实践中,设计硬件以跳过所有无效的作可能具有挑战性,并导致硬件复杂性和开销增加,如第 8 章所述。例如,设计仅识别其中一个作数(例如权重)中的 0 而不是同时识别两者的硬件可能更容易。因此,无效的作可以进一步分为那些被硬件利用的作(即跳过)和那些未被硬件利用的作(即未跳过)。因此,硬件实际执行的作数是有效作数加上未利用的无效作数。
方程 (3.4) 显示了如何将每个周期的作分解为:

  1. 每个周期的有效作数加上未开发的无效作数,对于给定的硬件加速器设计,这在某种程度上保持不变;
  2. 有效作与有效作加上未开发的无效作的比率,这是指硬件开发无效作的能力(理想情况下,未开发的无效作应为零,并且该比率应为 1)
  3. (总)作中的有效作数,这与稀疏量有关,取决于 DNN 模型。

随着稀疏量的增加(即,(总)作中的有效作数减少),每个周期的作数增加,随后每秒作数增加,如公式 (3.2) 所示:
在这里插入图片描述
5总作是指有效和无效的作。

在这里插入图片描述
但是,利用稀疏性需要额外的硬件来识别输入何时为零,以避免执行不必要的 MAC作。额外的硬件可以增加关键路径,从而减少每秒的周期数,还可以降低 PE 的区域密度,从而减少给定区域的 PE 数量。这两个因素都会减少每秒作数,如公式 (3.2) 所示。因此,附加硬件的复杂性可能会导致在减少未开发的无效作数量与增加关键路径或减少 PE 数量之间进行权衡。
最后,设计支持降低精度(即每个作数和每个作的位数更少)的硬件和 DNN 模型(如第 7 章所述)也可以增加每秒的作数。每个作数的位数较少意味着支持给定作所需的内存带宽会减少,这可能会提高 PE 的利用率,因为它们不太可能缺乏数据。此外,可以减少每个 PE 的面积,从而增加给定区域的 PE 数量。这两个因素都会增加每秒的作数,如公式 (3.2) 所示。但请注意,如果需要支持多个级别的精度,则需要额外的硬件,这可以再次增加关键路径并降低 PE 的面积密度,这两者都可以减少每秒的作次数,如公式 (3.2) 所示。
在本节中,我们讨论了影响每秒推理次数的多个因素。表 3.1 对因素是由硬件、DNN 模型还是两者决定进行分类。
总之,仅 DNN 模型中的 MAC作数量不足以评估吞吐量和延迟。虽然 DNN 模型可以根据网络架构(即层形状)以及权重和激活的稀疏性影响每次推理的 MAC作数量,但对DNN 模型的吞吐量和延时的影响取决于硬件添加支持以识别这些方法的能力,而不会显著降低 PE 的利用率、PE 数量或每秒周期数。这就是为什么 MAC作的数量不一定是吞吐量和延迟的良好代理(例如,图 3.2),并且设计具有硬件在循环中的高效 DNN 模型通常更有效。第 9 章讨论了在循环中使用硬件设计 DNN 模型的技术。
在这里插入图片描述
同样,硬件中的 PE 数量及其峰值吞吐量不足以评估吞吐量和延迟。如公式 (3.2) 所示,报告硬件上 DNN 模型的实际运行时间以考虑其他影响(例如 PE 利用率)至关重要。理想情况下,应在明确指定的 DNN 模型上执行此评估,例如,作为 MLPerf 基准测试套件一部分的模型。此外,应将批处理大小与吞吐量一起报告,以便评估延迟。

3.3 能源效率和功耗

相关文章:

【IC】AI处理器核心--第二部分 用于处理 DNN 的硬件设计

第 II 部分 用于处理 DNN 的硬件设计 第 3 章 关键指标和设计目标 在过去的几年里,对 DNN 的高效处理进行了大量研究。因此,讨论在比较和评估不同设计和拟议技术的优缺点时应考虑的关键指标非常重要,这些指标应纳入设计考虑中。虽然效率通常…...

React历代主要更新

一、React 16之前更新 React Fiber是16版本之后的一种更新机制,使用链表取代了树,是一种fiber数据结构,其有三个指针,分别指向了父节点、子节点、兄弟节点,当中断的时候会记录下当前的节点,然后继续更新&a…...

常用查找算法整理(顺序查找、二分查找、哈希查找、二叉排序树查找、平衡二叉树查找、红黑树查找、B树和B+树查找、分块查找)

常用的查找算法: 顺序查找:最简单的查找算法,适用于无序或数据量小的情况,逐个元素比较查找目标值。二分查找:要求数据有序,通过不断比较中间元素与目标值,将查找范围缩小一半,效率…...

Linux性能分析工具Trace使用

Linux Trace是⼀种⽤于抓取和分析系统运⾏时信息的⼯具。允许开发⼈员跟踪和分析系统的各种活动,以便深⼊了解系统的性能、⾏为和故障。下⾯是关于Linux Trace数据抓取的说明: 1. 数据抓取范围:Linux Trace可以抓取各种级别的数据,包括系统级别、进程级别和内核级别的数据。…...

2024华为OD机试真题-简单的自动曝光(C++)-E卷B卷-100分

2024华为OD机试最新E卷题库-(C卷+D卷+E卷)-(JAVA、Python、C++) 目录 题目描述 输入 输出 备注 示例1 示例2 解题思路 考点 代码 c++ 题目描述 一个图像有n个像素点,存储在一个长度为n的数组img里,每个像素点的取值范围[0,255]的正整数。 请你给图像每个像素点值…...

【python】向Jira测试计划下,附件中增加html测试报告

【python】连接Jira获取token以及jira对象 # 往 jira 测试计划下面,上传测试结果html def put_jira_file(plain_id):# 配置连接jiraconn ConnJira()jira conn.jira_login()[2]path jira.issue(O45- plain_id)attachments_dir os.path.abspath(..) \\test_API…...

STM32自学记录(九)

STM32自学记录 文章目录 STM32自学记录前言一、DMA杂记二、实验1.学习视频2.复现代码 总结 前言 DMA 一、DMA杂记 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预&…...

【C++】C++-教师信息管理系统(含源码+数据文件)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 【C】C教师信息管理系统(含源码&#x…...

Java Swing-5.jar 使用 jpackage 打包成 windows 可安装应用(exe,msi,免安装版exe)

环境 jdk17 (jdk14 以后自带将jar 打安装包工具 jpackage,版本从1.8调整到17) Maven:3.2.5 效果 对比 exe4j :免费版在启动的时候总是先弹出一个弹框,告诉用户你在用他们的免费版Launch4j:无法把jre环境打到exe文件中,用户需要单独…...

ADC入门准备(十):信号与系统知识回顾

4.7系统函数零极点分布决定时域特性 4.7.1 H(s)极点分布与h(t)的对应图解 4.7.2 H(s)、E(s)极点分布与自由响应、强迫响应特征的对应 4.8 H(s)零极点分布决定频域特性 4.8.1 s平面几何分析法 4.8.2 高通滤波器的频率特性 4.8.3 低通滤波器的频率特性 4.9 二阶谐振系…...

wx060基于springboot+vue+uniapp的宿舍报修系统小程序

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…...

Spring Boot 配置 Mybatis 读写分离

JPA 的读写分离配置不能应用在 Mybatis 上, 所以 Mybatis 要单独处理 为了不影响原有代码, 使用了增加拦截器的方式, 在拦截器里根据 SQL 的 CRUD 来路由到不同的数据源 需要单独增加Mybatis的配置 Configuration public class MyBatisConfig {Beanpublic SqlSessionFactory…...

CCF-GESP 等级考试 2024年9月认证C++二级真题解析

2024年9月真题 一、单选题(每题2分,共30分) 正确答案:A 考察知识点:计算机存储 解析:磁心存储元件是早期计算机中用于存储数据的部件,它和现代计算机中的内存功能类似,都是用于临时…...

第二天:工具的使用

每天上午9点左右更新一到两篇文章到专栏《Python爬虫训练营》中,对于爬虫有兴趣的伙伴可以订阅专栏一起学习,完全免费。 键盘为桨,代码作帆。这趟为期30天左右的Python爬虫特训即将启航,每日解锁新海域:从Requests库的…...

HarmonyOS:使用List实现分组列表(包含粘性标题)

一、支持分组列表 在列表中支持数据的分组展示,可以使列表显示结构清晰,查找方便,从而提高使用效率。分组列表在实际应用中十分常见,如下图所示联系人列表。 联系人分组列表 在List组件中使用ListItemGroup对项目进行分组&#…...

Django5的新特征

Django是一个用Python编写的高级Web框架,它的目标是让开发人员能够快速高效地构建复杂的Web应用程序。自从2008年首次发布以来,Django已经成为开源Web框架中的佼佼者,被广泛应用于各种规模的项目中。Django 提供了一套强大且全面的工具&#…...

web自动化笔记(二)

文章目录 一、参数化测试1.pytest命令2.实现参数化测试3.填写地址测试4.生成Allure测试报告5.关键字驱动 二、案例1.实现后台登录1.1登录1.2.处理验证码1.3.封装识别验证码函数 2.通过cookie保持登录2.1给页面添加cookie2.2获取页面的cookie2.3自动化获取cookie 三、excel进行数…...

青少年编程与数学 02-009 Django 5 Web 编程 12课题、表单处理

青少年编程与数学 02-009 Django 5 Web 编程 12课题、表单处理 一、表单1. 表单类的定义示例:普通表单示例:模型表单 2. 字段类型3. 验证4. 渲染5. 表单处理示例:视图中的表单处理6. 自定义表单 二、验证1. 字段级验证示例2. 表单级验证示例3…...

JVM类加载和垃圾回收(详细)

文章目录 JVM介绍JDK/JRE/JVM的关系 内存结构堆程序计数器虚拟机栈本地方法栈本地内存 类文件字节码文件结构 类加载类的生命周期加载类加载器双亲委派模型 链接初始化类卸载 垃圾回收堆空间的基本结构内存分配和回收原则死亡对象判断方法垃圾收集算法垃圾收集器 JVM 介绍 JD…...

秘密信息嵌入到RGB通道的方式:分段嵌or完整嵌入各通道

目录 1. 将秘密信息分为三部分的理由 (1)均匀分布负载 (2)提高鲁棒性 (3)容量分配 2. 不将秘密信息分为三部分的情况 (1)嵌入容量 (2)视觉质量 &#…...

基于Flask的影视剧热度数据可视化分析系统的设计与实现

【FLask】基于Flask的影视剧热度数据可视化分析系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 随着互联网技术的飞速发展,影视剧行业的数据量呈爆炸性增长&#x…...

Docker Desktop如何恢复出厂设置

在测试dify、ragfow等几个模型过程中,各种拉镜像建容器,导致错误提示“AssertionError(Can t access Redis. Please check the Redis status.)”,两个模型都无法使用,如何清空重建?请参照下面操作: 1、Win…...

Go语言协程Goroutine高级用法(一)

什么协程 在Go语言中,协程就是一种轻量的线程,是并发编程的单元,由Go来管理,所以在GO层面的协程会更加的轻量、高效、开销更小,并且更容易实现并发编程。 轻量级线程 Go语言中协程(线程)与传…...

Android Studio:键值对存储sharedPreferences

一、了解 SharedPreferences SharedPreferences是Android的一个轻量级存储工具,它采用的存储结构是Key-Value的键值对方式,类似于Java的Properties,二者都是把Key-Value的键值对保存在配置文件中。不同的是,Properties的文件内容形…...

网络安全-攻击路径

以下是互联网场景下常见的攻击路径分类及详细说明,以分层结构呈现: 一、网络层攻击路径 DDoS攻击 原理:通过僵尸网络发起海量请求淹没目标服务器示例:SYN Flood攻击、HTTP洪泛攻击影响:服务不可用,带宽资源…...

记录阿里云CDN配置

网站接入CDN全流程,共4步!-阿里云开发者社区 1、开通阿里云CDN服务 2、添加加速域名 3、验证域名归属权 4、域名添加CDN生成的CNAME解析 按照官网描述增加。细节点: 1. 域名和泛域名区别 2.开启https,要用nginx的证书,和项…...

国自然专项项目申请:AI赋能的急性心肌梗死预警研究|基金申请·25-02-14

小罗碎碎念 急性心肌梗死严重威胁生命健康,因其起病隐匿、发病机制复杂,早期预警困难。现在,转机来了!国自然“AI赋能的急性心肌梗死预警研究”专项项目2025年度指南重磅发布。 该项目致力于攻克难题,通过多学科交叉…...

【鸿蒙开发】第二十八章 应用状态的讲解、状态持久化、网络管理、应用数据持久化、文件上传下载

目录 1 应用状态 1.1 LocalStorage:页面级UI状态存储 1.1.1 两个页面共享一个对象 1.1.2 页面间共享 1.1.3 应用逻辑中使用 1.2 AppStorage:应用全局的UI状态存储 1.2.1 概述 1.2.2 基本用法 1.2.3 经常使用的方法 1.3 PersistentStorage&#x…...

学习threejs,使用HemisphereLight半球光

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.HemisphereLight 二、…...

天童美语:观察你的生活

在孩子的认知里,世界宛如一片充满神秘色彩的未知之境,有着无尽的奥秘等待他们去探索。家长们,引导孩子用心观察世界,领略其中的美妙,这对孩子的成长进程有着极为关键的作用。贵阳天童教育相信:观察生活&…...