揭秘Tensor Core黑科技:如何让AI计算速度飞跃

  dbb7de9af4ef26b8a2cd9795e430c3be.jpeg

揭秘 Tensor Core 底层:如何让AI计算速度飞跃


Tensor Core,加速深度学习计算的利器,专用于高效执行深度神经网络中的矩阵乘法和卷积运算,提升计算效率。

Tensor Core凭借混合精度计算与张量核心操作,大幅加速深度学习模型的训练和推理。它采用半精度(FP16)作为输入输出,全精度(FP32)存储中间结果,确保精度同时最大化效率。这种高效计算方式,使Tensor Core能在短时间内完成大量矩阵运算,为深度学习带来质的飞跃。

Tensor Core 显著超越传统CUDA Core,每个时钟周期可执行高达4x4x4的GEMM运算,即同步完成64次浮点乘法累加(FMA),实现前所未有的计算效率。

Tensor Core的并行计算大幅加速深度学习模型的训练与推理,显著提升计算效率,引领人工智能领域迈向革命性新篇章。

TensorCore 计算原理

下面我们首先来回顾一下 Tensor Core 的计算原理。

fa0b8a3f179936adcba77b97628a718a.jpeg

Tensor Core 计算

深绿色4x4矩阵A与紫色4x4矩阵B相乘,再与绿色矩阵C相加。混合精度技术在此应用中大放异彩,计算时采用FP16提高速度,而存储时则灵活选择FP32或FP16以保持数据精度,实现高效与准确性的完美融合。

数学计算中,D矩阵的元素由矩阵A的一行与矩阵B的一列相乘,再与矩阵C的对应元素相加得出,公式精准呈现这一计算过程。

2753e32bd9af407f7ca3a569ae12d8a7.jpeg

NVIDIA的GPU Tensor Core通过矩阵计算而非逐行处理,大幅提升计算效率。其计算模拟图展示了其高效能力,展现了其专业性和创新力。

c05f231d792ec742fa07ac3116d112c2.jpeg

Tensor Core FMA

Pascal架构(无Tensor Core)如图左,每时钟周期以元素乘行的方式,4次相乘得一列数据。而Volta架构(含Tensor Core)如图右,其Tensor Core直接计算矩阵A与B的乘积,一次性输出完整矩阵。Volta的高效性在矩阵运算中尤为显著,展现了显著的性能优势。

Volta V100 GPU相较于Pascal P100,在AI吞吐量上实现了飞跃,每个SM的AI吞吐量激增8倍。更值得一提的是,Volta架构在SM数量和核心设计上的精妙优化,使得整体性能飙升,总提升高达12倍。

TensorCore 指令流水

指令流水技术显著提升处理器效率,它将指令分解为多个精细步骤,各由专用电路并行处理。这种流水线式的连续执行方式,实现了指令的高效并行处理,极大提升了执行效率。

0a46219190dbf9c7e1e4c3932393182c.jpeg

Tensor Core 模拟电路

Tensor Core模拟电路图展示了矩阵计算的核心操作。加号代表矩阵加,乘号则代表矩阵乘,这两者是矩阵计算的基础。图中绿色长方块为寄存器,其中16位横置寄存器用于存储输入与中间数据,而32位竖向寄存器则用于累积结果或高精度数据存储,确保计算高效精确。

在Tensor Core中实现矩阵相乘,即A行乘B列(假设长度均为4),其电路示意图详细展示了计算过程。无需考虑矩阵切分,我们聚焦于这一核心运算的精准实现。

Tensor Core 计算中,输入为16bit数据,乘加后需32位寄存器存储中间数据。高精度存储寄存器紧邻实际计算单元,实现A矩阵行与B矩阵列的乘法操作,简洁高效,确保计算精确性。这一设计优化了矩阵运算的效率和准确性。

GPU V100中,计算核心为矩阵间直接相乘生成新矩阵。模拟电路演示仅展示其中行列间FMA运算,生成单一元素的过程,凸显GPU强大计算能力。

那么一个矩阵中更多元素的是如何进行计算的呢?

007deaae7b51bed39c7d78b6b4c0961b.jpeg

Tensor Core 矩阵模拟电路

矩阵A的行与矩阵B的列通过FMA运算生成一个元素,如首个蓝色方块所示。整体计算过程犹如电路拼接,简单地将A矩阵的每一行与B矩阵的每一列相乘,从而构建出整个矩阵的每个元素。

在此时,A、B矩阵的寄存器应各自构成一组阵列,实现并行读取与计算。这种阵列布局使矩阵的每个元素都能执行FMA计算,显著提升计算效率。

下面我们再来了解下指令流水的 Pipline 是如何组织起来的。

当我们进行一个 Fp32 标量元素乘加操作的指令时,就像下面图所示。

b4165593cdc1978d428286d3ace8b85a.jpeg

Tensor Core 标量流水线

Tensor Core内乘法运算仅支持Fp16,而存储与加法运算则采用Fp32,巧妙地实现了乘法运算的精简,显著提升计算效率。

c2e0f6e84f5c7fda5297b3e012122519.jpeg

Tensor Core 两个元素流水线

Tensor Core计算时,输出单个元素需A的一行与B的一列相乘,高效实现依赖四条并行Pipeline流水线,确保高效能处理。

279331e162345e6d860490fb810527f8.jpeg

Tensor Core 一行 x 一列流水线

图示中,绿色指令流水与黄色流水线共同完成了部分计算。为全面计算所有元素,需高效拼接大量指令流水,确保计算流畅无阻。

eb7d7a819b4bce8c29e6ca72227d4c3b.jpeg

Tensor Core 矩阵流水线

数据在流水线中的读写遵循明确规律:乘法计算时,从存储单元读取两数据;计算完成后,Round阶段将结果写回单元。在特定时刻,流水线涉及四个数据:两个用于计算,两个存储回寄存器。这一流程确保了数据的高效处理与准确存储。

Tensor Core的高效运算得益于精心设计的指令流水线处理。这种设计使数据读取、计算和写入无缝交替,最大化硬件资源利用率,显著提升计算效率。流水线技术不仅加速Tensor Core运算,更为深度学习应用提供强大动力,实现快速、高效的计算体验。

TensorCore 线程执行

在整体 CUDA 软件设计方面,其目的是与 GPU 计算和存储分层结构相匹配。

NVIDIA CUDA定义Tensor Core为通用编程(General Programming)范式,旨在通过CUDA平台最大化Tensor Core的硬件效能。CUDA让开发者能够运用通用编程模型,精准调用Tensor Core功能,实现并行计算的高效运行,从而显著提升计算效率。

Tensor Core 的计算简化为 C = A * B,但面对大矩阵时,由于 Tensor Core 仅支持4x4的运算,需将矩阵切片并分配到 Thread Block 中。这种分片处理策略确保了大规模矩阵运算的高效执行,充分发挥了 Tensor Core 的计算能力。

fc662a0b184408c3a95f0282928aca6c.jpeg

在软件层面,我们定义Warp以分配切片矩阵至不同线程束。通过线程并行执行,实现矩阵乘法的高效计算,充分利用Tensor Core的计算潜能。此分块、分配与并行化策略有效释放硬件资源,极大提升计算效率,为深度学习及科学计算等应用带来显著加速效果。

下面我们将详细展开 Tensor Core 是如何完成大的矩阵计算的。

Block-level 矩阵乘

Tensor Core中,GEMM(矩阵乘)每次仅处理小矩阵块。实际操作时,需将矩阵A、B分别切分为小块,以计算出小矩阵C。此过程高效且精准,如图所示。

3f72ef0413c1ab89ec00aad33e217581.jpeg

Block-level 的矩阵乘

for&nbsp;(int&nbsp;mb&nbsp;=&nbsp;O;&nbsp;mb&nbsp;<&nbsp;M;&nbsp;mb&nbsp;+=&nbsp;Mtile)
&nbsp;&nbsp;for&nbsp;(int&nbsp;nb&nbsp;=&nbsp;O;&nbsp;nb&nbsp;<&nbsp;N;&nbsp;nb&nbsp;+=&nbsp;NtiLe)
&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;kb&nbsp;=&nbsp;O;&nbsp;kb&nbsp;<&nbsp;K;&nbsp;kb&nbsp;+=&nbsp;Ktile)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//compute&nbsp;Mtile-by-Ntile-by-Ktile&nbsp;matrix&nbsp;product
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;k&nbsp;=&nbsp;O;&nbsp;k&nbsp;<&nbsp;Ktile;&nbsp;++k)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=&nbsp;O;&nbsp;i<&nbsp;Mtile;&nbsp;++i)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;j=&nbsp;O;&nbsp;j<&nbsp;Ntile;++j)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;row&nbsp;=&nbsp;mb&nbsp;+&nbsp;i;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;col&nbsp;=&nbsp;nb&nbsp;+&nbsp;j;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C[row][col]&nbsp;+=,A[row][kb&nbsp;+&nbsp;k]&nbsp;*&nbsp;B[kb&nbsp;+&nbsp;k][col];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}

如代码所示,我们沿维度将循环嵌套划分为块,进而分解为Mtile-by-Ntile的独立矩阵乘。最终,通过累加Mtile-by-Ntile-by-Ktile的矩阵乘积,高效计算每个乘积,确保性能与效率的双赢。

在GPU计算中,CUDA kernel grid将线程块精准映射至输出矩阵D的各分区,实现高效的并行计算。线程块并行执行Mtile-by-Ntile-by-Ktile矩阵乘法,并在K维上迭代,累积计算结果。这种基于Thread Block的并行策略,确保了计算资源的高效利用,显著提升了矩阵乘法的性能。

Warp-level 矩阵乘

e25a8878fe3a38ce270dc70784087b2c.jpeg

Warp-level 的矩阵乘

CUDA编程模型中,矩阵乘法操作在线程块内执行,实则由Warp单元分配执行。Warp作为GPU的执行单元,由32个线程协同工作,共同执行指令,显著提升矩阵乘法的执行效率。

矩阵乘法中,为提升计算速度和降低内存访问延迟,我们常将矩阵A、B的部分数据载入共享内存(SMEM)。SMEM是线程块内共享的快速内存,支持线程间数据交换和协作,减少了对全局内存的频繁读取,显著提升了计算效率。

在矩阵乘法中,Warp负责高效计算结果矩阵C的部分或全部。通过将C的不同块分配给不同的Warp,实现并行处理。Warp内的线程同步执行,协同工作,共享内存数据以完成计算任务,确保计算效率与准确性并存。

矩阵乘法中,Warp内线程协同操作,通过共享内存(SMEM)加载数据至寄存器(RF)进行乘加运算,结果再存入寄存器或全局内存,高效完成一系列计算任务。

b1c20a424050543579c8c97df1ccf64c.jpeg

Warp-level 的矩阵乘展开

下面我们详细解释一下这个过程:

Warp由多线程组成,协同工作以高效处理矩阵乘法。线程间紧密合作,通过精准乘加运算,迅速得出准确结果,大幅提升计算效率。

Warp线程在计算时,需从共享内存迅速加载矩阵A、B的片段至寄存器,确保数据快速访问与计算。加载速度需足够快,避免线程等待,维持计算高效性。这一优化确保计算流程的高效流畅,为数据处理提供强大支持。

随后,各线程在寄存器上并行执行矩阵乘法,计算矩阵C的元素,暂存于寄存器中直至所有乘加操作完成。计算中,我们对共享内存数据实施K维排序,旨在优化线程的数据访问效率,显著减少内存访问延迟,确保线程高效获取所需数据,从而最大化计算效率。

Thread-level 矩阵乘

Tensor Core 高效并行执行核心操作:矩阵A乘以矩阵B,直接得出C矩阵,展现计算的高效与简洁。

Tensor Core作为NVIDIA GPU的核心硬件,通过CUDA编程模型的WMMA(Warp级矩阵乘加)API得到完美支持。该API专为Tensor Core设计,让开发者在CUDA程序中直接解锁硬件加速潜力。利用WMMA API,开发者不仅能高效执行矩阵乘法累积操作,还能轻松管理数据加载、存储及同步,实现性能与效率的双重飞跃。

在GEMM软硬件分层中,数据复用至关重要。面对庞大矩阵数据,高效复用能显著提升计算效率。通过全局内存、共享内存和寄存器等不同内存层次结构,我们精心管理和复用数据,确保每一层都能充分发挥数据价值,实现高效计算。

31d38573f05a9a17f803252680199a2e.jpeg

Thread-level 的矩阵乘

大矩阵高效计算的核心在于将其分割并存储于全局内存。计算时,小块数据被迅速加载至共享内存或寄存器,大幅减少内存访问延迟,提升计算效率。完成每块矩阵乘法后,结果即刻累积,涉及中间结果从寄存器或共享内存回流至全局内存,并适时同步与累加,确保最终矩阵乘法结果的完整性。这一流程,确保计算速度与精度的双重优化。

通过精心设计的计算和数据管理操作,我们高效完成了GEMM计算任务,并将结果精准地写回输出矩阵C。此过程充分利用了Tensor Core的硬件加速和CUDA编程模型的灵活性,显著提升了矩阵乘法的计算效率。

累积矩阵结果

118d8f291012ea1d456787399c1eb6b3.jpeg

Tensor Core 累积矩阵并写出最终结果

Tensor Core中的WMMA API支持register file中临时结果的快速回传。特别地,store matrix sync API能将数据高效搬移至共享内存(SMEM),确保数据处理的流畅与高效。这一机制显著提升了计算效率,为深度学习等应用提供了强大支持。

SMEM内高效累积数据,存储至全局内存。通过全局内存,实现数据块的无缝拼接,快速回传并输出结果,确保高效处理。

整体计算过程

下面我们来总结一下整个的计算过程:

ceb5ab4b03abaaf3aa8d76767eee4177.jpeg

Tensor Core 计算全流程

矩阵进行GEMM计算前会先分块,并存储在GPU的全局内存中,这是GPU上最大的内存区域,专为处理计算中需频繁访问的海量数据而设计,确保高效的数据处理速度。

计算前,程序将矩阵分块加载至共享内存,确保低延迟访问。共享内存是线程块内所有线程可访问的数据池,实现数据的高效共享与重用,优化计算性能。

在矩阵乘法运算中,线程高效地将共享内存数据加载至其私有寄存器,这是GPU上速度最快的内存空间。每个线程拥有独立寄存器文件,确保运算的独立性。在Tensor Core中,数据直接存储于其寄存器文件,并进行高速计算,极大提升了矩阵乘法的执行效率。

计算完成后,结果直接写回共享内存,而非滞留于Tensor Core寄存器。此举旨在优化中间结果存储与线程间数据交互。CUDA的WMMA API提供了如store matrix sync等函数,确保数据同步累积准确无误,从而高效利用共享内存资源,提升数据处理效率。

在共享内存中累积结果后,将自动写回全局内存。此过程需多线程块协同,因矩阵乘法需多线程块合力完成。全局内存确保各线程块结果无缝拼接,形成完整的矩阵乘法结果,高效且精准。

总结

深度学习中的GEMM计算涵盖矩阵分块、数据加载至共享内存与寄存器、Tensor Core内计算、结果存回共享内存并写入全局内存,实现高效数据处理。

Tensor Core,精通数学的计算专家,擅长深度学习的矩阵乘法和卷积运算。其采用FP16计算,FP32存储中间结果,确保高效且精确。Tensor Core能一次性处理4x4矩阵乘法,相较于CUDA Core,计算速度显著提升,为深度学习领域带来革命性变革。

借助WMMA API与CUDA编程技术,我们高效利用GPU资源,实现矩阵乘法运算性能飞跃,轻松应对高性能计算需求。


-对此,您有什么看法见解?-

-欢迎在评论区留言探讨和分享。-

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/334404.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

element ui 下拉框Select 选择器 上下箭头旋转方向样式错乱——>优化方案

目录 前言1、问题复现2、预期效果3、input框样式修改解析4、修改方案 &#x1f680;写在最后 前言 测试A&#xff1a;那啥&#xff01;抠图仔&#xff0c;样式怎么点着点着就出问题了。 前端&#xff1a;啥&#xff1f;css样式错乱了&#xff1f;你是不是有缓存啊&#xff01…

高效编写大模型 Prompt 提示词,解锁 AI 无限创意潜能

随着 ChatGPT 的出现&#xff0c;AI 成为新的焦点&#xff0c;有人说过“未来 50%的工作将是提示词工作”&#xff0c;目前很多公司也在开始招聘 Prompt 提示词工程师。Prompt&#xff08;提示词&#xff09;成为了连接创意与技术的桥梁&#xff0c;它不仅是简单的指令&#xf…

ubuntu22.04安装调节显示器亮度工具

1 介绍 软件名叫 DDC/CI control&#xff0c;官网 2 安装方法 sudo apt install intltool i2c-tools libxml2-dev libpci-dev libgtk2.0-dev liblzma-dev3 效果 进入软件&#xff0c;忽略告警信息

MySQL 数据类型和搜索引擎

文章目录 【 1. 数据类型 】1.1 数值类型1.1.1 整型1.1.2 小数1.1.3 数值类型的选择 1.2 日期和时间YEAR 年TIME 时间DATE 日期DATETIME 日期时间TIMESTAMP 时间戳日期和时间的选择 1.3 文本字符串CHAR 固定字符串、VARCHAR 可变字符串TEXT 文本ENUM 枚举SET 集合字符串类型的选…

“2024 亚马逊云科技中国峰会,挑战俱乐部 Hands On 动手实验课程正在直播中,点击链接畅享生成式AI建构之旅,赢心动好礼

只看不过瘾&#xff1f;别急&#xff01;我们为您准备了【生成式AI助手 Amazon Q 初体验】动手实验&#xff0c;一款生成式人工智能 (AI) 支持的对话助理&#xff0c;可以帮助您理解、构建、扩展和操作 Amazon 应用程序&#xff0c;您可以询问有关 Amazon 架构、最佳实践、文档…

OrangePi AIpro (8T)使用体验,性能测试报告

前言 这段时间收到了CSDN和香橙派的邀请&#xff0c;对OrangePi AIpro进行体验测评&#xff0c;在此感谢CSDN对我的信任&#xff0c;也感谢香橙派能做出如此优秀的开发板。 可喜可贺&#xff0c;周三晚上我收到了官方寄出的OrangePi AIpro。出于对国产芯片的好奇&#xff0c…

数据结构的希尔排序(c语言版)

一.希尔排序的概念 1.希尔排序的基本思想 希尔排序是一种基于插入排序算法的优化排序方法。它的基本思想如下: 选择一个增量序列 t1&#xff0c;t2&#xff0c;......&#xff0c;tk&#xff0c;其中 ti > tj, 当 i < j&#xff0c;并且 tk 1。 按增量序列个数k&#…

接口测试及接口测试常用的工具详解

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 首先&#xff0c;什么是接口呢&#xff1f; 接口一般来说有两种&#xff0c;一种是程序内部的接口&#xff0c;一种是系统对外的接口。 系统对外的接口&#xff1a;比如你要从别的网站或服务器上获取资源或信息…

智能界面设计:数字孪生与大数据结合的美学典范

智能界面设计&#xff1a;数字孪生与大数据结合的美学典范 引言 在数字化浪潮的推动下&#xff0c;智能界面设计成为了连接用户与技术的重要桥梁。数字孪生技术与大数据的结合&#xff0c;不仅为UI设计带来了前所未有的创新机遇&#xff0c;更成为了美学与功能性融合的典范。…

[Android]将私钥(.pk8)和公钥证书(.pem/.crt)合并成一个PKCS#12格式的密钥库文件

如下&#xff0c;我们有一个platform.pk8和platform.x509.pem。为了打包&#xff0c;需要将私钥&#xff08;.pk8&#xff09;和公钥证书&#xff08;可能是.pem或.crt文件&#xff09;合并成一个PKCS#12 格式的密钥库文件 1.准备你的私钥和证书文件 确保你有以下两个文件&…

rk3568_mutex

文章目录 前言1、什么是mutex?1.1mutex互斥体API函数二、实验2.1实验目的2.2源码2.3结果图前言 本文记录的是rk3568开发板基础上做的mutex实验 1、什么是mutex? mutex是互斥体,它是比信号量semaphore更加专业的机制。 在我们编写Linux驱动的时候遇到需要互斥的地方建议使用…

JMH304-剑侠情缘2网络版+2017纹饰端+翅膀+单机+外网整理+各种副本

资源介绍&#xff1a; 藏剑-太虚-梁山-杀手堂种树地宫师门纹饰装备长流云阳套等等———– 做登录器联系站长 资源截图&#xff1a; 下载地址

springcloud-服务拆分与远程调用

一 微服务 1.1简单了解 SpringCloud SpringCloud是目前国内使用最广泛的微服务框架。官网地址&#xff1a;Spring Cloud。 SpringCloud集成了各种微服务功能组件&#xff0c;并基于SpringBoot实现了这些组件的自动装配&#xff0c;从而提供了良好的开箱即用体验&#xff1a…

泰达克TADHE uv胶水在粘接聚酰亚胺(Polyimide,PI)时具有一些优势,并在各行业中得到了广泛应用,尤其是在特定应用中

泰达克TADHE uv胶水在粘接聚酰亚胺&#xff08;Polyimide&#xff0c;PI&#xff09;时具有一些优势&#xff0c;并在各行业中得到了广泛应用&#xff0c;尤其是在特定应用中。以下是一些使用UV胶水粘接PI的优势&#xff1a; 1.快速固化&#xff1a; UV胶水通过紫外线照射进行固…

材料物理 笔记-9

原内容请参考哈尔滨工业大学何飞教授&#xff1a;https://www.bilibili.com/video/BV18b4y1Y7wd/?p12&spm_id_frompageDriver&vd_source61654d4a6e8d7941436149dd99026962 或《材料物理性能及其在材料研究中的应用》&#xff08;哈尔滨工业大学出版社&#xff09; ——…

央视网视频下载和花屏问题处理

央视网(www.cctv.com)视频下载往往是花屏的&#xff0c;如何处理呢&#xff1f; 如果您是IT技术开发者&#xff0c;那么您可以通过下面步骤自己实现。 用chrome浏览器&#xff0c;F2打开开发者工具&#xff0c;找到当前页面的network 然后找一个接口&#xff1a;https://vdn.a…

详解Java ThreadLocal

个人博客 详解Java ThreadLocal | iwts’s blog Java ThreadLocal ThreadLocal提供了线程内存储变量的能力&#xff0c;这些变量不同之处在于每一个线程读取的变量是对应的互相独立的。通过get和set方法就可以得到当前线程对应的值。 TreadLocal存储模型 ThreadLocal的静态…

MySQL 重启之后无法写入数据了?

数据库交接后因 persist_only 级别的参数设置引发的故障分析。 作者&#xff1a;不吃芫荽&#xff0c;爱可生华东交付服务部 DBA 成员&#xff0c;主要负责 MySQL 故障处理及相关技术支持。 爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系…

听说部门来了个00后测试开发,一顿操作给我整麻了

公司新来了个同事&#xff0c;听说大学是学的广告专业&#xff0c;因为喜欢IT行业就找了个培训班&#xff0c;后来在一家小公司实习半年&#xff0c;现在跳槽来我们公司。来了之后把现有项目的性能优化了一遍&#xff0c;服务器缩减一半&#xff0c;性能反而提升4倍&#xff01…

装机必备——360压缩安装教程

装机必备——360压缩安装教程 软件下载 软件名称&#xff1a;360压缩 软件语言&#xff1a;简体中文 软件大小&#xff1a;3.38M 系统要求&#xff1a;Windows7或更高&#xff0c; 32/64位操作系统 硬件要求&#xff1a;CPU2GHz &#xff0c;RAM4G或更高 下载通道①迅雷云盘丨…