新闻详情

新闻详情

首页 / 资讯中心 / 详情

CPU底层原理与指令执行流程:从寄存器、缓存到HashMap与async/await的深度关联

发布时间:2026/9/25 23:18:15来源:尧图网络
CPU底层原理与指令执行流程:从寄存器、缓存到HashMap与async/await的深度关联
很多开发者写了好几年代码框架用得很熟接口设计也有心得。但一旦遇到线上 CPU 飙高、程序性能上不去、面试被追问“HashMap 为什么快”“async/await 为什么能并发”这些问题最终都会回到同一个源头——CPU 底层原理。本文想做的不是带你设计一颗 CPU也不是背计算机组成原理的教材而是用最直观的方式把 CPU 的核心组成、指令执行流程、存储体系以及它们与日常编程的关联讲清楚。如果你能抽出 10 分钟读完再花 20 分钟把文中的命令和代码亲手跑一遍你对 CPU 的认知基本就超过大多数只停留在“CPU 是电脑的大脑”这一层的开发者了。1. 背景与核心概念1.1 CPU 不是“大脑”而是“指令执行引擎”CPU 的全称是 Central Processing Unit中文叫中央处理器。很多人喜欢把它比作“电脑的大脑”这个比喻在直觉上没错但如果你想理解底层原理这个类比反而会误导你。大脑的特征是“思考”而 CPU 的特征是“执行”。程序员写的每一行代码不管是 Java、Python 还是 C最终编译成机器指令后都由 CPU 一条一条地取出并执行。CPU 本身不会“思考”业务语义它只认指令把某个地址的数据读进来做一个加法把结果写回某个位置然后跳到下一条指令。所以更准确的说法是CPU 是一台高速的、可以执行有限指令集合的执行引擎。它负责回答的核心问题是当前要执行哪一条指令指令要操作的数据在哪里指令做完运算后结果存到哪里这三个问题构成了 CPU 底层原理的骨架。1.2 CPU、核心、线程到底是什么关系热词里经常出现“cpu 多核设置”“cpu 智能核心调度”很多人会把“核”和“线程”混为一谈这里先做一个最基本的区分。一个物理 CPU 插槽上可能有多个物理核心Core。每个物理核心可以独立执行指令流。操作系统会把每个核心看作一个可以调度的执行单元。超线程Hyper-Threading技术则把一个物理核心模拟成两个逻辑处理器。换句话说一个物理核心同时维护两套执行状态寄存器组、中断控制等让操作系统以为有两个核心可以调度从而提高指令流水线的利用率。所以你会看到这样一组关系物理 CPU 数量主板上实际插了几颗 CPU 芯片。物理核心数一颗 CPU 芯片内部有几个独立运算核心。逻辑处理器数操作系统实际看到的可调度单位可能大于物理核心数。在 Linux 中可以用一条命令查看lscpu输出中的CPU(s)是逻辑处理器数量Core(s) per socket是每颗 CPU 的物理核心数Thread(s) per core是每个核心的超线程数。如果你发现逻辑 CPU 数量是核心数的两倍不必惊讶那基本就是超线程开启的结果。2. 环境与工具准备2.1 阅读本文需要准备什么这是一篇偏原理讲解的文章核心概念不依赖任何编程语言或框架。但为了让原理“落地”我建议你准备一台安装了 Linux、Windows 或 macOS 的电脑用于执行验证命令和编译示例代码。不需要安装重型 IDE也不需要配置 Java 或 Python 环境。只需要两样东西一个终端Linux/macOS 自带 TerminalWindows 可以用 CMD、PowerShell 或 WSL。一个 C 编译器推荐 gcc。Linux 一般自带macOS 可以用clang代替Windows 可以安装 MinGW-w64 或者用 WSL 里的 gcc。如果你手头暂时没有编译器也没关系本文的原理部分仍然可以完整阅读实战案例部分可以放到以后慢慢验证。2.2 查看 CPU 信息的常用命令了解一台电脑的 CPU 信息是理解底层原理的第一步。下面分别给出三个平台常用的命令。Linuxlscpu cat /proc/cpuinfomacOSsysctl -n machdep.cpu.brand_string sysctl -n hw.ncpuWindowsCMD 或 PowerShellwmic cpu get caption在这些输出中你可以看到 CPU 型号、核心数、线程数以及重要的缓存参数。特别值得关注的是缓存大小这一列后面第 5 章会详细解释为什么缓存对 CPU 性能影响如此之大。3. CPU 的核心组成ALU、寄存器与控制单元把 CPU 拆开看不管 Intel、AMD、ARM 还是 RISC-V核心都离不开三大部件控制单元、算术逻辑单元、寄存器组。再加上现代 CPU 必有的缓存就构成了一个可以工作的最小系统。3.1 控制单元CUCPU 的“调度员”控制单元负责取指令、解析指令并生成对应的控制信号。你可以把它理解为一条流水线上的“工长”它自己不算数但是指挥其他部件干活。当一条指令进入 CPU 后控制单元会判断这条指令是要做加法还是从内存读数据还是跳转到某个地址。然后它会把 ALU、寄存器、内存接口等部件设置到正确的状态。3.2 ALU 算术逻辑单元CPU 的“计算器”ALU 全称 Arithmetic Logic Unit专门负责算术运算加、减、乘、除和逻辑运算与、或、非、异或。ALU 本身是一堆组合逻辑电路输入两个操作数输出一个结果同时产生几个标志位比如结果是否为零、是否溢出。比如执行a b时ALU 的两个输入分别是 a 和 b 的二进制表示输出就是和的二进制表示。高级语言里的、-、*、/、、最终都会被编译器映射成一条或若干条 ALU 能够执行的机器指令。如果你学习过数字电路会知道 ALU 的核心就是全加器与选择器如果没学过也不影响理解只需要记住ALU 是真正干“计算”这个体力活的地方。3.3 寄存器CPU 的“草稿纸”寄存器是 CPU 内部容量极小、速度极快的内存单元。一次加法指令的数据来源通常不是内存而是寄存器。为什么不用内存因为内存太慢了。CPU 访问一次寄存器的耗时大概是 1 个时钟周期以内而访问一次内存可能需要几十到几百个时钟周期。所以 CPU 在执行运算时会先把操作数从内存加载到寄存器ALU 从寄存器取数算完后再把结果写回寄存器。每个物理核心内部都有一组通用寄存器比如 x86-64 架构下的rax、rbx、rcx、rdx、rsp、rbp等。在后续讲解汇编代码时你会频繁看到它们。3.4 缓存CPU 的“临时工作台”寄存器的容量太小了通常只有几十到几百字节。当程序需要访问大量数据时CPU 不可能把所有数据都塞进寄存器。这时候就需要缓存。缓存是位于 CPU 和内存之间的一层高速存储通常分为 L1、L2、L3 三级。L1 离核心最近、最快、容量最小L3 是所有核心共享的比内存快但比 L1 慢。缓存的意义在于程序具有局部性一段程序在执行时往往会在短时间内反复访问同一批数据。把这些数据提前复制到缓存里CPU 就不必每次都去慢速内存取。关于缓存如何影响代码性能第 5 章和第 9 章还会详细展开。4. 一条指令的生命周期取指、译码、执行、写回现在我们把 CPU 的工作过程串起来。一条指令从进入 CPU 到执行完毕大体经历五个阶段。这也是“多周期 MIPS CPU 设计”“理想流水线 CPU 设计”这些计算机组成原理实验的理论基础。4.1 指令周期的五个阶段取指IFInstruction Fetch根据程序计数器PCProgram Counter指向的地址从内存中取出当前指令。译码IDInstruction Decode控制单元解析指令确定操作码和操作数来源。执行EXExecuteALU 或相关部件完成实际运算。访存MEMMemory Access如果需要读写内存在这个阶段完成。写回WBWrite Back把结果写回寄存器。以一句高级语言c a b为例。如果 a 和 b 已经存在寄存器eax、ebx中CPU 执行加法可能只需要经历“取指 → 译码 → 执行 → 写回”四个阶段没有访存。但如果 a 在内存里就要先从内存加载到寄存器再由 ALU 相加最后把结果写回目标寄存器。4.2 从汇编指令到控制信号下面是一条典型的 x86-64 加法指令addl %ebx, %eax这条指令的含义是把寄存器ebx的值与寄存器eax的值相加结果保存到eax。addl是操作码告诉 CPU“我要做加法”。%ebx和%eax是操作数告诉 CPU“对谁做加法”。控制单元译码后会打开 ALU 的加法功能同时让ebx和eax的数据送入 ALU 输入端等 ALU 输出稳定的结果后再把这个结果写回eax。你可能注意到这里没有出现“内存地址”。这就是寄存器的好处如果操作数都在寄存器里指令执行时连一次内存访问都不需要这也是现代编译器特别喜欢把热点变量优化进寄存器的原因。4.3 流水线为什么 CPU 可以“边取边算”如果 CPU 严格按照“取指 → 译码 → 执行 → 写回”的串行顺序执行一条指令完成后才开始下一条那么每个阶段只有一个部件在干活其他部件都在空等。流水线的思路很简单让不同指令的不同阶段重叠执行。当第一条指令进入执行阶段时第二条指令可以同时进入译码阶段第三条指令可以同时进入取指阶段。这样虽然单条指令的延迟没有变短但 CPU 每个时钟周期都能完成一条指令的吞吐。现代 CPU 的流水线已经非常深甚至会乱序执行、分支预测。但在理解底层原理时用上面这个五级流水线模型就足够了。顺带一提热词里反复出现的“理想流水线 CPU 设计”“多周期 MIPS CPU 设计”本质就是在验证这个模型——当你亲手在 Logisim 中连接寄存器、ALU 和控制逻辑那种打通原理的豁然感比单纯看书强十倍。5. 存储器与 CPU 的连接缓存、内存与总线5.1 存储层次结构CPU 速度极快内存速度相对慢磁盘更慢。为了平衡成本和性能计算机的存储体系是一个金字塔结构寄存器几十到几百字节速度约 1 个时钟周期。L1 缓存几十 KB速度约 4-5 个时钟周期。L2 缓存几百 KB速度约 10-20 个时钟周期。L3 缓存几 MB 到几十 MB速度约 30-50 个时钟周期。内存几十 GB速度约 200-400 个时钟周期。磁盘几百 GB 到几 TB速度以毫秒计。越往上速度越快但容量越小、成本越高。这也是为什么 CPU 内部的缓存做得如此复杂——它在用硬件层面的“预判”掩盖内存访问的巨大延迟。5.2 缓存命中与局部性原理当 CPU 要访问一个内存地址时会先查缓存。如果数据在缓存中称为缓存命中Cache Hit如果不在称为缓存未命中Cache MissCPU 必须到内存中取数据并把这块数据连同邻近数据一起搬进缓存。这里有个关键点缓存是按“块”加载的。CPU 访问某个地址时不光会把目标地址的数据缓存下来还会把周围一片数据一起加载。这就是为什么遍历数组比遍历链表快得多数组在内存中是连续存储的遍历时缓存命中率极高。链表的节点通常分散在内存各处每次访问都可能遇到缓存未命中。程序员口口相传的“局部性原理”本质上就是对 CPU 缓存行为的利用。热词里面“存储器与 cpu 的连接”频繁出现其实要理解的核心就是CPU 与内存之间不是直接连接而是通过多层缓存与总线连接每一次内存访问都是一次成本不低的“远程调用”。5.3 内存总线与 CPU 的交互CPU 与内存之间的通路称为内存总线。总线的位宽决定了每次传输的数据量。如果总线是 64 位意味着 CPU 一次最多从内存读取 8 个字节。在缓存加载、内存带宽受限的场景里总线带宽往往成为性能瓶颈。这也是为什么现代 CPU 都强调三级缓存够不够大、内存通道够不够多。单纯的核数多、频率高并不一定能弥补内存访问的延迟缺口。你在看 CPU 天梯图时如果只看跑分不看缓存和内存带宽很容易踩坑。6. CPU 与编程语言底层原理的关联这一节可能是全文和日常开发关系最紧密的部分。热词里频繁出现“hashmap 底层实现原理”“generator / async await 底层原理”它们看似是数据结构或语法特性但根子都埋在 CPU 的执行模型里。6.1 HashMap 为什么是数组 链表JDK 8 之后的 HashMap 底层是数组加链表加红黑树这个知识点几乎人人都会背。但很少有人问为什么数组能快速定位为什么冲突时要拉链表答案就在 CPU 的存储体系里。数组是一段连续的内存空间。给定下标 i可以通过“起始地址 i × 元素大小”直接计算出目标地址CPU 只需要一次内存访问很可能命中缓存就能取到值。哈希表的基本思想就是把 key 哈希成数组下标从而把“查找”变成“计算地址读取”时间复杂度 O(1)。但哈希冲突无法避免。多个 key 映射到同一个下标时最简单的办法就是在数组槽位上挂一个链表。问题在于链表节点是分散在内存各处的遍历链表时缓存命中率极低一旦冲突严重性能下降得很快。JDK 8 引入红黑树就是为了把极端情况下的 O(n) 降为 O(log n)本质上是在缓解缓存不友好带来的连锁反应。所以HashMap 的面试题如果往深了问最后一定会落到内存布局和 CPU 缓存的讨论上。6.2 generator / async await 的“暂停”原理普通函数调用时CPU 会沿着函数调用栈一路执行下去函数返回后从调用点继续。但生成器和协程不同它们可以在函数中间挂起之后再从挂起点继续执行。挂起的本质是什么就是保存当前函数的执行现场。一个函数执行到一半时现场包括指令指针下一条要执行的指令在内存中的位置。函数栈帧局部变量、参数、返回地址。寄存器的值。当 Python 生成器执行到yield时解释器会把这些现场保存起来当调用next()时解释器恢复这些现场让 CPU 从之前暂停的位置继续执行。async/await 也是类似的机制。协程的挂起并不释放线程而是在用户态切换执行上下文省去了内核态线程切换的巨大开销。你不需要深入 V8 引擎源码也能理解为什么 async/await 能高效处理大量 I/O 等待——因为它把“保存现场”这件事做得足够轻量。6.3 为什么循环比递归更容易被优化编译器对循环的优化往往更积极因为循环的代码块集中、边界清晰CPU 的分支预测器更容易猜中下一轮的方向指令流水线可以保持满载。递归则依赖不断压栈、弹栈每一次函数调用都要保存和恢复现场栈操作本身也增加了内存访问次数。当然尾递归在优秀编译器的处理下可以被改写成循环这也从侧面说明递归带来的额外开销并非计算本身而是频繁的栈操作和现场切换。理解了这一点你就知道为什么一些高性能场景中手动改成迭代是值得的。7. 实战案例将一段 C 代码翻译成 CPU 执行过程理论讲了不少下面通过一个完整的实战案例把“高级语言 → 汇编 → CPU 执行”的全过程走一遍。7.1 创建示例代码先准备一个最简单的 C 文件路径随意比如/tmp/cpu_demo/test.c。// 文件路径test.c #include stdio.h int add(int a, int b) { return a b; } int main() { int result add(1, 2); printf(%d\n, result); return 0; }这段代码的逻辑非常简单定义一个返回两数之和的函数并在 main 中调用它。7.2 编译并查看汇编在终端进入该文件所在目录执行gcc -S test.c -o test.s这条命令会生成汇编文件test.s但不生成可执行文件。打开它cat test.s你会看到很多以.开头的伪指令大部分是给汇编器和链接器看的辅助信息真正需要关注的是add函数对应的汇编代码。以 x86-64 Linux 环境为例核心片段大致如下不同编译器版本可能有细节差异但逻辑一致add: pushq %rbp # 保存调用者的栈基址 movq %rsp, %rbp # 建立新的栈帧 movl %edi, -4(%rbp) # 把参数 a 保存到栈上局部变量 movl %esi, -8(%rbp) # 把参数 b 保存到栈上局部变量 movl -4(%rbp), %eax # 把 a 加载到寄存器 eax addl -8(%rbp), %eax # eax eax b popq %rbp # 恢复调用者的栈基址 ret # 返回ret 的返回地址来自栈7.3 逐行解释 CPU 的动作现在我们把汇编和 CPU 原理对应起pushq %rbp把栈基址寄存器rbp压入调用栈。CPU 的栈指针寄存器rsp会相应减小。movq %rsp, %rbp把当前栈指针保存到rbp建立新函数的栈帧。movl %edi, -4(%rbp)x86-64 调用约定规定前两个整数参数放在edi、esi寄存器里。这里把它们临时存到栈上的局部变量位置。注意 CPU 现在完全在寄存器与栈之间搬运数据没有发生真正意义上的“内存随机访问”。movl -4(%rbp), %eax从栈上取回 a 的值加载到eax寄存器。这一步是访存指令但访问的是栈内存大概率已在 L1 缓存中。addl -8(%rbp), %eaxALU 把eax的值与-8(%rbp)地址处的值相加结果写回eax。这是真正由 ALU 完成的运算。popq %rbp恢复栈基址。ret把栈顶保存的返回地址弹出到指令指针寄存器CPU 跳回 main 调用 add 的下一条指令。可以看到一段简单的a b在 CPU 层面经历了多次寄存器读写、栈内存访问、算术执行和跳转。现代 CPU 之所以能每秒执行几十亿条这样的指令靠的就是前面的流水线和缓存机制。7.4 运行与验证如果想验证代码逻辑再执行gcc test.c -o test ./test预期输出3这个案例的价值在于它把“CPU 如何执行代码”从抽象概念变成了肉眼可见的指令序列。以后你觉得一段代码性能有问题不要只盯着高级语言的复杂度可以先编译出汇编看看热点到底在哪些指令上。8. 常见问题与排查思路下面整理几个与 CPU 相关的高频问题偏实战排查方向。问题现象常见原因解决思路应用 CPU 跑满 100%响应变慢代码存在死循环、热点计算、锁竞争或 GC 频繁先用top/htop定位高 CPU 进程再用perf或 jstack 分析线程栈不要盲目加机器多核 CPU 很空闲但某个程序还是卡单线程程序只能吃满一个核心或者存在共享锁竞争确认是单线程瓶颈还是锁竞争前者考虑并行/异步后者考虑锁粒度优化Idea 等 IDE 经常卡顿CPU 飙高大量索引扫描、插件冲突、内存不足导致频繁 GC排除插件冲突、调大 IDE 堆内存、关闭不必要的文件索引服务器 CPU 使用率很低但请求超时瓶颈可能在磁盘 I/O、网络、数据库或锁等待查看iostat、网络延迟、慢查询日志不要只盯 CPU虚拟机提示 CPU 已禁用或调度异常宿主机 CPU 虚拟化设置、资源超分或 BIOS 虚拟化未开启检查 BIOS 中的 VT-x/AMD-V确认虚拟化软件版本与宿主机兼容性排查 CPU 问题一条核心原则是先分清楚是 CPU 密集、内存密集、I/O 密集还是锁竞争。不同瓶颈的优化方向完全不一样。CPU 飙高不等于真的需要加 CPU很多时候是代码绕了远路。9. 最佳实践与工程建议9.1 利用缓存局部性优化代码理解了缓存你就掌握了一把性能优化的钥匙。下面两条经验非常常用第一遍历二维数组时尽量按行遍历而不是按列遍历。因为二维数组在内存中是行优先连续的按行遍历能极大地提高缓存命中率。// 高效按行遍历 for (int i 0; i N; i) { for (int j 0; j N; j) { sum matrix[i][j]; } }// 低效按列遍历会频繁缓存未命中 for (int j 0; j N; j) { for (int i 0; i N; i) { sum matrix[i][j]; } }第二高频访问的热点数据要尽量集中存放避免用大量分散的小对象消耗缓存行。这不仅是优化技巧更是 Java 对象布局、Go 结构体字段排列等话题的底层原理。9.2 合理使用多线程不是线程越多越好很多同学以为 CPU 核数多线程数就应该无限增加结果反而遇到大量上下文切换开销。并发策略要基于任务类型CPU 密集型任务线程数通常接近物理核心数即可多了反而因为切换导致性能下降。I/O 密集型任务可以在等待 I/O 期间让出 CPU线程数可以适当多于核心数但也不能无限增加。从 CPU 底层来看线程切换意味着保存和恢复寄存器、栈指针、指令指针等现场。这个开销虽然比协程切换重但比进程切换轻。真正合理的做法是结合压测结果动态调节线程池大小。9.3 选型与排错时不要迷信天梯图热词里“cpu 天梯图”每年都很火包括“电脑 cpu 天梯图”“手机 cpu 天梯图”“服务器 cpu 天梯图”。天梯图适合快速了解综合性能梯度但真实业务场景中选 CPU 更应关注单核性能很多业务是串行逻辑单核频率和 IPC 更重要。缓存大小对数据处理类应用影响巨大。指令集支持比如是否支持 AVX 等向量指令对深度学习、科学计算影响明显。TDP 与散热笔记本、服务器等场景下功耗墙往往比峰值跑分更现实。如果在生产环境遇到 CPU 调度或虚拟化相关告警优先检查宿主机 BIOS 虚拟化设置、虚拟机 vCPU 与物理核心的分配比例以及超分是不是太高而不是简单地把 vCPU 数量调大。10. 总结与延伸学习如果你读到这里建议现在打开终端执行一次lscpu用 10 秒钟确认自己的 CPU 缓存大小和核心数再编译运行一次第 7 章的 C 代码亲眼看一遍汇编指令。这两件小事做完你对 CPU 底层原理的掌握就已经从“知道”变成“体会”了。本文的核心收获可以浓缩成四句话CPU 是执行指令的引擎核心由控制单元、ALU、寄存器和缓存组成。一条指令要经历取指、译码、执行、访存、写回流水线让这些阶段重叠执行。CPU 与内存之间有巨大的速度差距缓存和局部性原理是性能优化的关键。HashMap、协程、多线程性能本质上都受 CPU 执行模型约束。想继续深入的话下一步建议按这个顺序学习计算机组成原理中关于 MIPS 或 RISC-V 流水线的章节最好用 Logisim 动手搭一个小 CPU。编译原理课中关于寄存器分配、指令选择的内容理解编译器如何把高级语言映射成指令。操作系统的线程调度与进程切换理解系统层面如何管理和分配 CPU 资源。如果本文对你有帮助欢迎收藏备用如果你在执行命令或理解某个概念时遇到问题也可以在评论区说说你的疑惑我会尽量继续展开。下一篇打算写“如何用 perf 定位 CPU 热点”到时候见。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

烟火识别算法落地:图片、RTSP、mp4三种输入源与告警叠框实现 2026/9/25 23:59:08

烟火识别算法落地:图片、RTSP、mp4三种输入源与告警叠框实现

简介:LNTON羚通烟火识别算法与烟雾检测工具面向安防监控、智慧消防及视频分析方向的开发者与工程人员,解决图片、RTSP实时流和mp4视频中烟火目标自动检测与告警输出的问题。资源包共874个文件,约324.75MB,以843张jpg样本图片为主体…

阅读更多 →
UE 常用功能笔记:用 TaoToken 统一 Key 打通命令调用与文本格式转换 2026/9/25 23:59:08

UE 常用功能笔记:用 TaoToken 统一 Key 打通命令调用与文本格式转换

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
5G载波聚合中A5测量开关的配置与优化实战 2026/9/25 23:58:42

5G载波聚合中A5测量开关的配置与优化实战

简介:这份文档面向5G网络优化工程师与无线维护人员,聚焦载波聚合A5测量事件开关的开启与验证,帮助解决CA终端在异频切换中因A5门限设置不当导致的切换延迟与感知下降问题。压缩包内为1个docx文件,约987KB,内容以操作说…

阅读更多 →
Gradle 7.2 离线包配置指南:国内镜像与手动放置 2026/9/25 23:58:29

Gradle 7.2 离线包配置指南:国内镜像与手动放置

简介:gradle-7.2-all.zip 是 Gradle 7.2 版本的完整发行包,面向使用 Android Studio 进行 Java 与 Android 项目开发的工程师,尤其适合网络环境不稳定、在线下载 Gradle 速度过慢的开发者。该包内含 Gradle 运行时、库文件及相关工具&#xf…

阅读更多 →
The Concise TypeScript Book 精读:函数返回类型推断(Type from Func Return)——原理、边界与进阶运用 2026/9/25 23:58:10

The Concise TypeScript Book 精读:函数返回类型推断(Type from Func Return)——原理、边界与进阶运用

文档教程 【免费下载链接】typescript-book The Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Open Source. 项目地址: https://gitcode.com/gh_mirrors/typ/typescript-book 点击查看 免费下载 本篇技术指南以开源…

阅读更多 →
Atlas 300V 24G部署YOLOv5全流程:从AI推理加速卡到检测框 2026/9/25 23:58:03

Atlas 300V 24G部署YOLOv5全流程:从AI推理加速卡到检测框

从“Atlas 300V 24G是运算加速卡吗”这个问题开始说起。我刚接触这张卡的时候也是在搜索框里输入了类似的话,毕竟名字里带着“300V”“24G”,又是插在服务器PCIe插槽上的一块大卡,很容易让人下意识拿它跟GPU比。拆开包装装进机器后你会发现&a…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉