体系结构论文导读(三十一)(下):Soft errors in DNN accelerators: A comprehensive review
第五部分:DNN加速器中的软错误
本部分回顾和分析了有关人工神经网络(ANN)可靠性的研究。特别是关注通过DNN加速器解决DNN可靠性的研究,从软错误的角度进行探讨。许多前期工作声称ANN本身对故障具有固有的容错能力。然而,在硬件(加速器)层面,单事件翻转(SEU)和单事件瞬变(SET)等错误可能发生在执行硬件中,削弱DNN的固有容错能力。因此,加速器比其他电子设备更容易受到瞬态故障的影响,因为其并行性会将单个故障传播到多个输出元素。
5.1 GPU
研究人员在提高GPU的可靠性方面做了很多努力。然而,尽管以前的工作关注了GPU在高性能计算(HPC)应用中的可靠性,但却忽视了DNN模型的可靠性。DNN算法在计算特性上与HPC应用有显著不同,例如训练阶段的非结构化数据和处理激活和可学习权重的大量内存。此外,由于ANN算法预测的是特定百分比的准确性,DNN本身并非完全准确。因此,先前的可靠性研究不能扩展到高级DNN案例中。
以下是一些代表性研究及其主要发现:
-
Santos等人评估了著名的实时目标检测系统“YOLO”的可靠性,重点利用GEMM(通用矩阵乘法)作为主要指标评估系统的韧性。研究考虑了三种不同的GPU架构,提出了一种基于算法的容错策略(ABFT)来检测和缓解这些错误,从而提高DNN的可靠性。
- 主要发现:不同GPU的晶体管布局对软错误率的影响不同;GPU之间的架构差异对错误传播过程有不同影响。
- 结论:DNN的可靠性依赖于具体的加速器,不能将特定加速器的情况推广到同类的所有加速器。
-
Lunardi等人研究了在GPU中使用ECC(错误纠正码)的有效性,发现ECC虽然是掩盖软错误影响的有效解决方案,但某些内存资源(如管道和队列中的触发器)并未受到ECC保护。
- 主要发现:YOLO和GEMM由于计算密集型数据处理,ECC的保护效果较差;采用FinFET技术比启用ECC更有效地减少SDC(静默数据损坏)率。
-
Arechiga等人研究了DNN架构在其参数(如位翻转)受到干扰时的稳健性,评估了三种基于CNN的模型:VGG16、ResNet50和Inception V3。
- 主要发现:即使只有极小比例的参数受到影响,也会导致显著的性能下降;VGG16在随机位翻转中表现出较低的可靠性,因为它缺乏批量归一化和快捷连接,这些技术有助于增强模型的稳健性。
-
Santos等人分析了GPU架构中的辐射引发错误如何影响CNN模型的可靠性,研究表明GPU中的单个故障倾向于传播到多个活跃线程,显著降低CNN的可靠性。
- 主要发现:通过设计特殊的Max-pooling层来替代CNN的常规Max-pooling层可以在运行时检测错误,显著提高可靠性;ECC显著减少了SDC的数量,但对关键错误的影响较小。
-
作者研究了CNN模型在NVIDIA GPU上实现时软错误的影响,特别是VGG-16、AlexNet和ResNet-18的错误韧性。
- 主要发现:19.7%的注入故障导致了错误;通过分析错误依赖性,我们发现RF模式下的错误生成DUE比SDC错误多,而IOA和IOV模式下的错误倾向于生成更多的SDC错误;硬化VGG-16的单个内核(Im2col)显著提高了模型的韧性,将Faulty SDC的率从19.7%降至约0.4%。
-
Santos等人研究了在不同浮点精度下执行基准测试时GPU的可靠性,发现降低精度(如从双精度到单精度到半精度)可以显著提高CNN模型的可靠性。
- 主要发现:检测错误比分类错误更少依赖数据格式,因为检测框的坐标表示为整数值;降低精度格式显著提高了CNN模型的可靠性,因为较低的精度需要较少的内存资源,从而提高了模型的性能。
5.2 ASIC(专用集成电路)
这一部分回顾并介绍了在DNN模型实现过程中评估ASIC加速器韧性的研究。每项研究可能会考虑DNN模型/加速器的各种元素。因此,表5和表6列出了这一类别的代表性工作以及每项工作中考虑的组件和指标。
代表性研究和主要发现
-
Li等人分析和评估了运行在专用ASIC加速器Eyeriss上的DNN模型的容错特性。研究了四种基于CNN的模型:AlexNet、CaffeNet、ConvNet和NiN。这项研究详细诊断了错误从加速器级别传播到DNN模型级别的方式。
- 主要发现:
- DNN的错误韧性取决于多个因素,包括网络拓扑、用于表示的数据格式(如FxP和FP)、DNN加速器数据流中的数据重用,以及DNN网络中的层数和位置。
- 使用相同数据格式的NiN、AlexNet和CaffeNet模型的SDC错误率大致相同,而ConvNet的错误率非常高。这是因为ImageNet数据集有1000个类,而CIFAR数据集只有10个类,错误更容易被传播到前五个元素中。
- 提出两种错误保护策略:
- 基于症状的错误检测器(SED):用于检测内存系统中的SDC错误,平均精度为90.21%,平均召回率为92.5%。
- 选择性锁存加固(SLH):用于检测和纠正数据路径中的SDC错误。
- 主要发现:
-
Pandey等人研究了基于TPU加速器的错误韧性,特别是评估TPU近阈值操作引起的定时错误。这项研究最初提出了一种称为GreenTPU的设计范式,主要目的是限制TPU的能耗。
- 主要发现:
- 通过预测激活序列模式,可以防止同一序列中的其他错误。
- 采用Razor触发器检测每个MAC单元中的定时错误,当任何行中的定时错误发生时,这个单元记录导致错误的输入模式,并增加后续MAC单元的供电电压以阻止未来的定时错误。
- 主要发现:
-
Jiao等人评估了ASIC类加速器中处理单元的软错误对DNN模型的影响。软错误是由温度和动态电压变化引起的时间错误。评估了三层全连接(MLP)和LeNet-5(CNN)架构。
- 主要发现:
- 对于MLP和CNN,Adder中的错误对模型精度的影响大于Multiplier中的错误。
- 随着错误率的增加,精度急剧下降。CNN比MLP对错误更敏感,因为CNN有更多的算术计算。
- 主要发现:
-
Choi等人引入了基于DNN过滤器和权重灵敏度差异的错误韧性技术,使用一阶泰勒展开来分析灵敏度。
- 主要发现:
- 通过将高灵敏度权重的计算映射到更可靠的MAC单元,可以显著提高DNN模型的分类精度。
- 主要发现:
-
Lee等人广泛研究了实现于CMOS数字电路上的DNN的容错性,特别是分析了固定点格式的数据表示。
- 主要发现:
- 通过“权重掉落”技术(随机断开权重连接)提高DNN对故障的容忍度,特别是在错误率低于10%的情况下,预测精度只会略有下降。
- 主要发现:
-
Zhang等人研究了基于时间错误电压缩放的软错误传播,提出了一种称为“时间错误丢弃(TE-drop)”的新技术。
- 主要发现:
- TE-drop通过为每个MAC单元提供“Razor触发器”来检测这些错误,并在不重新执行错误MAC操作的情况下屏蔽错误,从而提高了模型的可靠性。
- 主要发现:
FPGA和Others部分略去
六、讨论
6.1 各类别中的要点
GPU 类别
- 晶体管布局:不同GPU的晶体管布局有不同的错误率。因此,各种GPU微架构(如Maxwell、Volta和Turing)影响错误从一个层次传播到另一个层次,直到它到达输出。
- ECC 和 ABFT:虽然ECC已被证明是用于各种内存元素的非常有效的保护技术,但ABFT策略可以通过软件解决方案在GPU中更好地强化DNN。这是因为大多数DNN操作在GPU中都依赖于矩阵乘法,这是ABFT的基本任务。
ASIC 类别
- 灵活性:尽管ASIC逐渐发展为更小的结构、低功耗和高性能,但代价是不灵活性。从可靠性角度来看,不同于GPU,ECC策略不能直接应用于ASIC的缓冲区,因为矩阵乘法和卷积更适合使用没有本地内存的矩阵阵列来实现。因此,当提出可靠性解决方案时,可能需要修改底层DNN架构。此外,由于Google的TPU目前是这一类别中唯一突出的加速器,基准测试问题对于设计师来说是一个不小的挑战。
为什么ECC不能直接应用于ASIC的缓冲区
对于ASIC(专用集成电路),尤其是专门用于DNN加速的ASIC(如TPU、Eyeriss),其设计和架构与GPU有很大不同。
1. 矩阵乘法和卷积操作的实现方式
在DNN计算中,矩阵乘法和卷积是非常重要的操作。这些操作通常通过矩阵阵列(systolic array)来实现。矩阵阵列是一种高度并行的硬件结构,可以高效地执行矩阵乘法和卷积操作。
- 矩阵阵列的特点:
- 高度并行:矩阵阵列由许多处理单元组成,这些单元可以同时进行计算。
- 流水线操作:数据从一个处理单元传递到下一个,像流水线一样,直到计算完成。
- 没有本地内存:每个处理单元通常没有独立的本地存储,而是通过直接的数据传递实现高效计算。
2. 没有本地内存的影响
因为矩阵阵列通常没有独立的本地存储空间(如缓存或寄存器文件),所以ECC无法直接应用于这些处理单元之间的数据传递。
- 没有本地存储:在矩阵阵列中,数据在处理单元之间直接传递,而不是存储在本地内存中。这意味着ECC无法在数据传递过程中进行错误检测和纠正。
- 实时性要求:矩阵阵列需要高效的实时计算,增加ECC会引入额外的延迟和复杂性,不利于实现高效的DNN计算。
FPGA 类别
- 灵活性和重配置:与其他加速器相比,FPGA的灵活性和重配置功能使其更容易评估DNN的韧性。大多数FPGA的DNN加速器设计仅针对一种数据流。例如,某些加速器仅针对CNN模型。因此,很难以相同的效率将DNN的各种层映射到这些加速器上。
- SRAM基FPGA:SRAM基FPGA是最常用的一种类型。当遇到故障时,例如粒子撞击配置位,可能导致LUT、BRAM或路由连接的配置发生变化。为解决这一类别中的瞬态错误影响,通常采用硬件冗余解决方案。
6.2 类别比较
DNN加速器之间的架构差异使得全面比较成为一项不公平且具有挑战性的任务。然而,可以突出表明每个类别在软错误可靠性方面的优缺点。
本文比较了两种常用的DNN加速器(即GPU和FPGA),作为首次尝试回答“哪种加速器在面对瞬态故障时更可靠?”的问题。目的是展示当相同模型在不同加速器中遇到瞬态故障时,其韧性可能有不同的表现。为此,选择了一种特定的DNN架构作为基准。选择CNN架构,因为它已在两种类别中执行,并且每种类别的可靠性研究已被分析。
6.2.1 硬件资源
在GPU中,主流CNN严重依赖于密集的浮点矩阵乘法(即GEMM)。大约76%的GPU操作用于CNN模型与GEMM相关的操作。GPU的硬件资源包括寄存器文件、缓存、SM、调度器等,都是为了执行这些操作。
在FPGA中,主流CNN依赖于LUT、FF、Carry逻辑、I/O块和DSP单元来进行MAC操作,并使用块RAM作为内存元素。此外,配置位用于功能和路由,故障会被注入其中。
6.2.2 浮点(FxP) vs. 定点(FP)
FPGA比GPU更倾向于使用定点(FxP)格式而非浮点(FP)格式。FP的范围比FxP格式更广,因此其指数中的故障会导致值的显著变化。因此,对于相同长度(即位数),FP比FxP更易受到影响。实验表明,通过降低精度(例如,从双精度到单精度再到半精度),硬件资源利用率降低,从而减少了暴露于辐射的面积,因此FIT率也降低。然而,较低精度会增加软错误的影响,因此FPGA更易受到关键错误的影响。
6.2.3 错误传播行为
在CNN计算中,数据从输入层传播到中间(隐藏)层再到输出层。一旦发生错误,它也会遵循相同的规则传播。GPU中的全连接层(FC层)倾向于传播SDC错误,但本身不会产生SDC错误。这是因为FC层具有高度并行(冗余)的连接,意味着神经元排列成矢量而不是矩阵。因此,数据重用性比卷积层少。
在FPGA中,FC层比卷积和池化层更容易产生SDC错误。FPGA是可编程加速器,可以具有空间和时间架构。此外,FPGA的设计由存储在配置内存中的位流确定。因此,FC层的密度越高,其易感性越高。
6.2.4 缓解技术
在GPU中,尽管ECC是一种硬件解决方案(用于内存元素),但最常见的提高GPU应用可靠性的方式是软件解决方案,用于保护内存或逻辑资源。这是因为GPU的预设计架构阻止研究人员访问低级布局(RTL)。提出的软件技术包括程序模块复制(如DMR和TMR)、ABFT等。然而,文献中没有提供用于训练阶段的缓解技术,所有提出的方法仅用于推理阶段。
在FPGA中,缓解技术通常是硬件解决方案,使用硬件描述语言(HDL)表示的RTL。现有的硬件策略是基于冗余的解决方案,即构建与原始模块相同的冗余硬件模块。这种冗余可以是比较复制(DWC)或TMR。与GPU不同,FPGA案例中提出了一些解决方案,特别是用于训练阶段的,如容错训练。
综上所述,要决定哪种加速器更具韧性,需要综合考虑上述四个因素,因为它严格依赖于底层架构。
七、未来的挑战与方向
未来深度学习的主要挑战之一是其算法在易受故障影响的加速器上实现时的可靠性问题。因此,DNN在高保证应用中的适用性受到来自DNN加速器上软错误引发的可靠性问题的限制。
其他DNN架构
现代定制的深度学习系统由混合DNN组成,以实现现实生活中的认知任务。换句话说,同一系统中可能包含多种DNN架构。例如,Parana架构包含CNN、MLP和其他两种架构。虽然Yin等人在设计过程中提出了一种仅解决DRAM热问题的技术,但尚未评估这种复杂系统的错误韧性。因此,现有技术无法简单地评估这种加速器的处理和控制元素的可靠性问题。因此,需要新的评估和缓解技术,这些技术能够顺利适应这些混合架构。
DNN错误韧性评估工具
许多回顾的研究报告了用于评估DNN组件错误韧性的故障注入器或DNN框架较慢。因此,必须优化这些工具的评估时间,以更真实地模拟可靠性影响。这些工具对于研究DNN加速器/算法在可靠性问题方面的独特特性非常有用。这可能是一个对研究社区有价值的研究方向。
领域的快速发展
正如我们的回顾所揭示的那样,AI模型的演变正在进行中。因此,用于加速这些计算密集型模型的硬件的可用性在设计层面是一个显著问题。因此,全部注意力都集中在AI加速器的吞吐量优化上,而可靠性问题却被大大忽视。因此,可靠性研究人员应填补这一空白,为每个类别(即加速器)提供有效的解决方案。
评估不同的DNN阶段
大多数工作都评估了DNN在推理阶段的可靠性。相反,只有少数研究研究了训练阶段。此外,训练有两种类型:在线训练(在每个训练数据点后更新参数)和离线训练(在整个训练数据集后一次性更新参数)。研究人员可能需要确定这两种类型的训练是否在可靠性方面留下不同的影响。
数据集的大小
正如其有助于忽略小噪声一样,影响DNN韧性的重要因素之一是用于训练模型的数据集。因此,使用更多的训练数据来训练模型会提高其准确性。然而,大多数文献中的可靠性研究都研究了使用较小数据集(如CIFAR-10和MNIST)训练的DNN的可靠性,特别是FPGA和其他类别。因此,研究在更大基准数据集(如ImageNet)上训练的DNN的可靠性可能会产生有益的影响。
相关文章:

体系结构论文导读(三十一)(下):Soft errors in DNN accelerators: A comprehensive review
第五部分:DNN加速器中的软错误 本部分回顾和分析了有关人工神经网络(ANN)可靠性的研究。特别是关注通过DNN加速器解决DNN可靠性的研究,从软错误的角度进行探讨。许多前期工作声称ANN本身对故障具有固有的容错能力。然而ÿ…...

Python在指定文件夹下创建虚拟环境
基于不同python版本和第三方包版本开发的项目,为了方便学习和管理python环境,可以在指定的文件夹里创建项目所需的虚拟环境。具体流程如下: (1) 以管理员身份打开Ananconda Prompt,查看当前虚拟环境,输入命令如下&…...

【SpringBoot】 定时任务之任务执行和调度及使用指南
【SpringBoot】 定时任务之任务执行和调度及使用指南 Spring框架分别通过TaskExecutor和TaskScheduler接口为任务的异步执行和调度提供了抽象。Spring还提供了支持应用程序服务器环境中的线程池或CommonJ委托的那些接口的实现。最终,在公共接口后面使用这些实现&…...

理解 Objective-C 中 +load 方法的执行顺序
在 Objective-C 中,load 方法是在类或分类(category)被加载到内存时调用的。它的执行顺序非常严格,并且在应用启动过程中可能会导致一些令人困惑的行为。理解 load 方法的执行顺序对调试和控制应用的初始化过程非常重要。 load 方…...

切面条问题算法的详解
切面条问题是一个经典的动态规划问题,也称为切钢条问题。问题描述为:给定一根长度为n的钢条和一个价格表P[i],表示长度为i的钢条的价格。求解如何切割钢条使得收益最大。 解决这个问题的关键是找到一个最优子结构和递推关系。 首先…...

JNDI注入
🎼个人主页:金灰 😎作者简介:一名简单的大一学生;易编橙终身成长社群的嘉宾.✨ 专注网络空间安全服务,期待与您的交流分享~ 感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️ 🍊易编橙终身成长社群&#…...

SQL Server数据库文件过大而无法直接导出解决方案
目录 1. 使用分割备份 (Split Backup) 2. 使用文件和文件组备份 (File and Filegroup Backup) 3. 使用压缩备份 (Compressed Backup) 4. 逻辑备份 (BCP工具) 5. 使用导出工具 (SQL Server Management Studio) 6. 部分备份 (Partial Backup) 7. 使用第三方工具 1. 使用分割…...

学习日志8.4--DHCP攻击防范
目录 DHCP饿死攻击 DHCP Sever仿冒攻击 DHCP攻击防范 DHCP动态主机配置协议,是给主机提供自动获取IP地址等配置信息的服务。在主机对DHCP服务器发送DHCP Discover请求之后,服务器回复offer,主机再回复request,最后服务器回复AC…...

解决多个Jenkins Master实例共享Jenkins_home目录的问题(加锁解锁机制)
在Jenkins的持续集成和持续部署(CI/CD)环境中,JENKINS_HOME目录扮演着至关重要的角色。它存储了Jenkins的配置、插件、作业历史记录等核心数据。然而,在某些场景下,我们可能面临多个Jenkins master实例需要共享同一个J…...

postgresql array 反向截取
postgresql array 反向截取 array_to_string((string_to_array(REPLACE(delcell.小区网管名称,‘‘,’-‘),’-‘))[:array_length(string_to_array(REPLACE(delcell.小区网管名称,’’,‘-’),‘-’),1)-1],‘-’) as 基站名称 在PostgreSQL中,如果你想要对数组进…...

最新口型同步技术EchoMimic部署
EchoMimic是由蚂蚁集团推出的一个 AI 驱动的口型同步技术项目,能够通过人像面部特征和音频来帮助人物“对口型”,生成逼真的动态肖像视频。 EchoMimic的技术亮点在于其创新的动画生成方法,它不仅能够通过音频和面部关键点单独驱动图像动画&a…...

程序设计基础(c语言)_补充_1
1、编程应用双层循环输出九九乘法表 #include <stdio.h> #include <stdlib.h> int main() {int i,j;for(i1;i<9;i){for(j1;j<i;j)if(ji)printf("%d*%d%d",j,i,j*i);elseprintf("%d*%d%-2d ",j,i,j*i);printf("\n");}return 0…...

8.4 day bug
bug1 忘记给css变量加var 复制代码到通义千问,解决 bug2 这不是我的bug,是freecodecamp的bug 题目中“ 将 --building-color2 变量的颜色更改为 #000” “ 应改为” 将 #000 变量的颜色更改为 --building-color2 “ bug3 又忘记加var(–xxx) 还去问…...

【Material-UI】Autocomplete中的禁用选项:Disabled options
文章目录 一、简介二、基本用法三、进阶用法1. 动态禁用2. 提示禁用原因3. 复杂的禁用条件 四、最佳实践1. 一致性2. 提供反馈3. 优化性能 五、总结 Material-UI的Autocomplete组件提供了丰富的功能,包括禁用特定选项的能力。这一特性对于限制用户选择、提供更好的用…...

Pytest测试报告生成专题
在 pytest 中,你可以使用多个选项生成不同格式的测试报告。以下是几种常用的生成测试报告的方法: 1. 生成简单的测试结果文件 你可以使用 pytest 的 --junitxml 选项生成一个 XML 格式的测试报告,这个报告可以与 CI/CD 工具集成。 pytest --junitxml=report.xml这将在当前…...

QT 笔记
HTTPS SSL配置 下载配置 子父对象 QTimer *timer new QTimer; // QTimer inherits QObject timer->inherits("QTimer"); // returns true timer->inherits("QObject"); // returns true timer->inherits("QAbst…...

【redis 第七篇章】动态字符串
一、概述 string 类型底层实现的简单动态字符串 sds,是可以修改的字符串。它采用预分配冗余空间的方式来减少内存的频繁分配。 二、SDS动态字符串 动态字符串 是以 \0 为分隔符。最大容量 是 redis 主动分配的一块内存空间,实际存储内容 是具体的存的数…...

rk3588 部署yolov8.rknn
本文从步骤来记录在rk3588芯片上部署yolov8模型 主机:windows10 VMware Workstation 16 Pro 硬件:RK3588 EVB板 模型: RK3588.rknn 软件开发环境: c cmake step1: 主机上执行: 将rknn_model_zoo 工程文件下载…...

【正点原子i.MX93开发板试用连载体验】中文提示词的训练
本文首发于电子发烧友论坛:【正点原子i.MX93开发板试用连载体验】基于深度学习的语音本地控制 - 正点原子学习小组 - 电子技术论坛 - 广受欢迎的专业电子论坛! 好久没有更新了,今天再来更新一下。 我们用前面提到的录音工具录制了自己的中文语音&#…...

WordPress资源下载类主题 CeoMax-Pro_v7.6绕授权开心版
CeoMax-Pro强大的功能 在不久的将来Ta能实现你一切幻想!我们也在为此而不断努力。适用于资源站、下载站、交易站、素材站、源码站、课程站、cms等等等等,Ta 为追求极致的你而生。多风格多样式多类型多行业多功能 源码下载:ceomax-pro7.6.zip…...

使用GCC编译Notepad++的插件
Notepad的本体1是支持使用MSVC和GCC编译的2,但是Notepad插件的官方文档3里却只给出了MSVC的编译指南4。 网上也没有找到相关的讨论,所以我尝试在 Windows 上使用 MinGW,基于 GCC-8.1.0 的 posix-sjlj 线程版本5,研究一下怎么编译…...

技术周总结 2024.07.29 ~ 08.04周日(MyBatis, 极限编程)
文章目录 一、08.01 周四1.1)mybatis的 xml文件中的 ${var} 和 #{var}的区别? 二、08.03 周六2.1)极限编程核心价值观核心实践实施极限编程的好处极限编程的挑战适用场景 三、08.04 周日3.1)《计算机信息系统安全保护等级划分准则…...

C语言调试宏全面总结(六大板块)
C语言调试宏进阶篇:实用指南与案例解析C语言调试宏高级技巧与最佳实践C语言调试宏的深度探索与性能考量C语言调试宏在嵌入式系统中的应用与挑战C语言调试宏在多线程环境中的应用与策略C语言调试宏在并发编程中的高级应用 C语言调试宏进阶篇:实用指南与案…...

unity万向锁代数法解释
unity的矩阵旋转乘法顺序是yxz 旋转x的90度的矩阵: 1 0 0 0 0 -1 0 1 0旋转y和z的矩阵假设角度为y和z,矩阵略不写了 按顺序乘完yxz之后结果是 cos(y-z) sin(y-z) 0 0 0 -1 -sin(y-z) cos(y-z) 0这个结果和Rx(pi/2) *Rz(某个角度)的结果是一个形式,Rx和…...

stm32入门学习10-I2C和陀螺仪模块
(一)I2C通信 (1)通信方式 I2C是一种同步半双工的通信方式,同步指的是通信双方时钟为一个时钟,半双工指的是在同一时间只能进行接收数据或发送数据,其有一条时钟线(SCL)…...

GDB常用指令
GDB调试:GDB调试的是可执行文件,在gcc编译时加入-g参数,告诉gcc在编译时加入调试信息,这样gdb才能调试这个被编译的文件。此外还会加上-Wall参数尽量显示所有警告信息。 GDB命令格式: 1、start:程序在第一…...

Nginx 高级 扩容与高效
Nginx高级 第一部分:扩容 通过扩容提升整体吞吐量 1.单机垂直扩容:硬件资源增加 云服务资源增加 整机:IBM、浪潮、DELL、HP等 CPU/主板:更新到主流 网卡:10G/40G网卡 磁盘:SAS(SCSI) HDD(机械…...

pythonflaskMYSQL自驾游搜索系统32127-计算机毕业设计项目选题推荐(附源码)
目 录 摘要 1 绪论 1.1研究背景 1.2爬虫技术 1.3flask框架介绍 2 1.4论文结构与章节安排 3 2 自驾游搜索系统分析 4 2.1 可行性分析 4 2.2 系统流程分析 4 2.2.1数据增加流程 5 2.3.2数据修改流程 5 2.3.3数据删除流程 5 2.3 系统功能分析 5 2.3.1 功能性分析 6 2.3.2 非功…...

C++ vector的基本使用(待补全)
std::vector 是C标准模板库(STL)中的一个非常重要的容器类,它提供了一种动态数组的功能。能够存储相同类型的元素序列,并且可以自动管理存储空间的大小,以适应序列大小变化,处理元素集合的时候很灵活 1. vector的定义 构造函数声…...

Java 属性拷贝 三种实现方式
第一种 List<OrederPayCustomer> orederPayCustomerList this.list(queryWrapper); List<CustomerResp>customerRespListnew ArrayList<>();for (OrederPayCustomer orederPayCustomer : orederPayCustomerList) {CustomerResp customerResp new Custome…...