- 博客(50)
- 资源 (21)
- 收藏
- 关注
原创 静态路由优缺点
把上述案例放在一起,可以得出一个比“小型网络用静态、大型网络用动态”更具体的判断:静态路由真正适合的场景,是那些拓扑变化本身就应该被人工控制、或者变化频率极低的位置:末梢网络和单一出口的默认路由、安全场景中的 null0 黑洞与流量牵引、对路径有强制要求的策略性转发、以及作为动态路由的浮动备份(且必须配合可靠的链路探测)。在这些场景中,静态路由的“不自动变化”不是缺陷,而是可预测性和可控性的来源。静态路由不适合的场景,则是故障恢复速度和拓扑适应性本身构成业务要求。
2026-11-06 09:15:00
258
1
原创 进程间通信(IPC
本文系统解析了进程间通信(IPC)的必要性与核心机制,指出隔离与协作的张力催生了多样化的IPC方案。共享内存以极致速度实现高效数据交换,但需自行处理同步;管道提供简单可靠的字节流通信,适用于父子进程;消息队列支持结构化消息与类型选择,适合异步协作;信号轻量级通知,不传数据;套接字则以通用性兼容跨机器通信。通过量化对比与选型框架,强调应根据延迟、吞吐、复杂度与拓扑需求,在“拷贝开销”“同步成本”与“灵活性”间权衡,选择最匹配场景的机制。
2026-11-05 20:15:00
168
原创 中断与轮询
中断与轮询是处理外部事件的两种核心机制,本质区别在于“谁主动”。中断由设备触发,CPU被动响应,适合低频、低功耗场景;轮询由CPU主动查询,虽浪费空转时间,但在高频、高吞吐场景下可避免上下文切换开销,实现低延迟与确定性。现代系统普遍采用混合策略:如Linux NAPI在低负载时用中断,高负载时转轮询;SPDK则以轮询为主、中断兜底,兼顾性能与能效。选型需权衡延迟、吞吐、功耗与资源占用,最终目标是在动态负载下实现最优平衡。
2026-11-04 09:30:00
293
原创 详解DMA
现代计算机体系结构中,几乎每一个高速数据通路的背后都站着一个沉默的搬运工。网卡收发包、NVMe 固态硬盘读写、摄像头图像采集、GPU 与系统内存之间的模型权重传输——这些场景的数据量动辄每秒数 GB,如果每一字节都要 CPU 亲自经手,处理器的计算周期将被数据搬运彻底吞噬。直接内存访问(Direct Memory Access,DMA)正是为解决这一矛盾而生的技术:它把“搬砖”的体力活从 CPU 手中拿走,交给专用的硬件控制器,让处理器得以专注于它真正擅长的事情。然而,DMA 并非没有代价的魔法。
2026-10-24 21:17:13
224
原创 详解volatile
如果要在 C++ 中评选一个“被误解最深”的关键字,大概率会高票当选。它的名字暗示着“易变的”,许多开发者因此直觉地认为它能在多线程环境中保证变量的“可见性”——就像 Java 中的 `volatile` 那样。这个直觉在 Java 中大致成立,但在 C++ 中,它会导致完全错误的代码和难以复现的未定义行为。这篇文章试图做一件事:把 `volatile` 放回它原本的位置,说清楚它做什么、不做什么,以及为什么“不做什么”那部分才是理解它的关键。
2026-10-24 21:01:16
388
原创 人工智能发展历程
人工智能作为一个独立学科的概念,其诞生通常被追溯至1956年在美国达特茅斯学院举办的一场研讨会。然而,这个概念的种子,早在人类对“思维”与“机器”关系的古老哲思中就已埋下,并经历了漫长的理论酝酿与技术铺垫。
2026-08-06 19:45:00
363
原创 神经网络发展历程
回顾神经网络八十余年的发展史,我们看到了一条在挫折与突破中螺旋上升的轨迹。它从一个简单的数学模型(M-P模型),到被证明存在根本局限(感知机危机),再到凭借核心算法浴火重生(反向传播),最终在数据与算力的催化下引发革命(深度学习)。这段历史也是一部连接主义与符号主义两大思想流派此消彼长的斗争史。神经网络在低谷中坚守,在质疑中突破,最终以其强大的学习和泛化能力,成为当今人工智能无可争议的核心范式。它远未终结,仍在飞速演进。
2026-08-05 19:15:00
372
原创 C++子类访问父类成员
派生类只能直接访问基类的public和protected成员(具体能否访问还受继承方式影响)。基类的private成员永远不能被派生类直接访问,但可通过基类提供的publicprotected成员函数间接操作。选择合适的继承方式(通常为public)来正确表达设计意图。使用protected成员来平衡封装性与派生类的访问需求。
2026-07-22 20:47:24
189
原创 GPU编程之OpenACC与OpenMP对比
维度OpenACCOpenMP设计初衷专为异构加速器设计共享内存多核CPU(后扩展至GPU)编程哲学描述性(编译器决定如何并行)指令性(程序员决定如何并行)异步执行多队列精细控制nowait/taskwait,功能相对有限硬件支持主要NVIDIA GPUNVIDIA/AMD/Intel多厂商编译器支持NVIDIA HPC SDK为主广泛支持(GCC/Clang/Intel等)学习曲线较平缓较陡峭(GPU部分)性能(NVIDIA)较好(优化后比OpenMP快33%)可比(共享后端时)
2026-07-14 18:45:00
483
原创 GPU编程之OpenACC
OpenACC应用程序编程接口(API)是一组编译器指令和运行时例程,允许软件开发人员在标准Fortran、C++和C程序中指定循环和代码区域,这些循环和代码区域应通过卸载到加速器(如GPU)或通过在主机CPU的所有核心上执行来并行执行。OpenACC API由行业联盟设计和维护,其官方网站为。简单来说,OpenACC是一种“代码注释”标准——通过在源代码中插入特定的“指令”(directives),告诉编译器哪些部分的代码计算量大、适合在加速器上并行执行。
2026-07-14 08:45:00
394
原创 CUDA编程之内存管理
最小化主机-设备数据传输:数据传输是CUDA应用中最昂贵的操作之一使用页锁定内存:需要高速传输时使用追求合并访问:确保同一Warp的线程访问连续内存地址善用共享内存:将频繁访问的全局数据缓存到共享内存中优先使用流序分配器:在现代CUDA版本中,优先使用利用内存池:减少频繁分配释放的开销。
2026-07-11 09:45:00
584
原创 CUDA编程之高效策略
手动展开最后几轮归约,减少循环和同步开销。遵循APOD流程:评估→并行化→优化→部署,形成迭代循环内存优化是第一要务最小化主机与设备间的数据传输确保全局内存的合并访问使用矢量化内存访问提高带宽利用率善用共享内存实现数据重用避免共享内存的bank conflict合理配置执行参数:选择合适的线程块大小,平衡占用率与资源使用注意指令级效率:避免warp divergence,使用快速数学函数用数据驱动优化:善用Nsight Systems和Nsight Compute等性能分析工具。
2026-07-10 18:45:00
352
原创 CUDA编程之FFT实例
CUDA运行时API,提供cudaMalloccudaMemcpycudaFree等内存管理函数<cufft.h>:cuFFT库API,提供等FFT函数:检查cuFFT API返回值,失败时打印错误信息并退出CUDA_CHECK:检查CUDA运行时API返回值概念说明FFT计划的句柄,一个计划可重复使用创建一维FFT计划,指定长度、类型和批处理数执行复数到复数FFT,方向为或单精度复数类型(float2),.x实部,.y虚部原地变换输入输出指向同一地址,节省内存逆变换归一化。
2026-07-10 08:30:00
479
原创 CUDA编程之Kernal
软件层面:程序员编写__global__函数,通过<<<>>>指定线程组织结构运行时层面:CPU将kernel打包为命令包,通过队列投递给GPU硬件层面:GPU的SM将block划分为warp,warp调度器以SIMT方式执行内存层面:数据在寄存器、共享内存、全局内存间流动理解这一完整链条,是写出高性能GPU程序的关键。从线程网格的精心设计,到warp分歧的谨慎规避,再到内存访问模式的深度优化,每一步都直接影响着最终的计算效率。
2026-07-07 23:17:52
378
原创 GPU软件生态系统介绍
CUDA(Compute Unified Device Architecture)自2006年推出以来持续扩张,已吸引全球数百万开发者参与,构筑了高度成熟的开发体系。CUDA不仅是编程模型,更是涵盖编程语言、开发工具、加速库、AI框架与云平台的完整生态系统。ROCm(Radeon Open Compute)是AMD的开源GPU计算平台,为高性能计算、AI和机器学习工作负载提供统一平台。ROCm在很多方面类似于CUDA运行时,但针对的是AMD GPU。与CUDA的闭源模式不同,ROCm采用开源策略。
2026-07-07 23:16:14
371
原创 CUDA编程之限定词(2)
_shared__:声明在 共享内存 中。它位于片上,速度极快(比全局内存快 ~100 倍),仅对同一个线程块(Block)内的所有线程可见,用于线程间通信和数据重用。声明时加extern可动态分配大小(即<<<>>里的第 3 个参数)。:声明在 常量内存 中。只读,有缓存加速,对所有网格(Grid)中的所有线程可见。适合存储所有线程都会用到的只读系数(如滤波器权重),容量仅 64KB。:声明在 托管内存 中。这是最“省事”的限定词,CPU 和 GPU 都能直接通过指针访问,数据在底层自动迁移。
2026-07-02 18:15:00
178
原创 CUDA编程之限定词(1)
运行位置:在 GPU(设备) 上执行。调用位置:由 CPU(主机) 通过<<<网格, 线程块>>>语法调用;在支持动态并行的 GPU(计算能力 3.5+)上,也可被__device__函数调用。返回值:必须声明为void,无法直接返回数据给 CPU,必须通过指针参数(如数组)将结果传回。
2026-07-02 08:15:00
484
原创 C++菱形继承
顶级基类Animal(有成员变量age中间层Mammal(哺乳动物) 和Bird(鸟类) 都继承自Animal底层Bat(蝙蝠) 同时继承Mammal和Bird/ \/ \\ /\ /Bat (蝙蝠)这就是一个标准的菱形继承。
2026-07-01 18:45:00
499
原创 C++虚函数表与多态
C++ 的多态,特别是运行时多态,其底层核心机制就是虚函数表(Virtual Table,简称 vtable)和虚函数指针(Virtual Pointer,简称 vptr)
2026-07-01 03:39:51
581
原创 3D IC与3D Chiplet
过去半个多世纪,半导体行业一直仰赖摩尔定律的平面微缩来驱动性能提升——每一代新节点都带来晶体管密度翻倍、性能提升与成本下降。然而,当制程节点推进到5nm以下时,光刻极限、互连瓶颈和热问题使得传统平面微缩的收益逐步递减。与此同时,AI大模型训练、高性能计算等应用对算力和带宽的需求呈指数级增长,传统单片式SoC(System on Chip)正遭遇“内存墙”“互连瓶颈”和“散热极限”的多重阻力。在此背景下,先进封装技术从“配角”走向“主角”,成为驱动半导体性能继续提升的新引擎。
2026-06-26 20:07:00
527
原创 3DIC分类
3DIC的分类体系反映了这一技术从概念到产业化的完整演进历程。从技术演进维度看,3DIC经历了从板级三维封装到晶体管级单片三维IC的跨越,互联密度提升了8个数量级;从制造工艺维度看,TSV-based并行制造与Monolithic顺序制造代表了两种不同的技术哲学;从封装形态维度看,封装堆叠、裸晶堆叠和基于TSV的3DIC堆叠各有其适用场景。这三种分类维度并非彼此独立,而是从不同角度对同一技术体系进行刻画。
2026-06-24 00:22:02
451
原创 3DIC散热技术综述
3DIC的散热问题是一个涉及材料、工艺、架构和设计方法的系统性工程难题。从被动散热的TIM和TSV优化,到主动冷却的微通道和相变技术,再到新型材料的金刚石和石墨烯应用,以及智能化设计的AI辅助仿真——各种技术路径正从不同层面协同发力。未来,3DIC散热技术的发展将呈现几个明确趋势:冷却方式从“芯片外”走向“芯片内” ——嵌入式微流控和近结冷却技术正将散热能力推向新的高度。散热材料从传统硅/铜走向金刚石/石墨烯等超导材料——金刚石被誉为“终极”散热材料,其与芯片的集成工艺正逐步突破。
2026-06-23 23:33:30
547
原创 GPU、TPU、RISC-V的区别与联系
GPU(Graphics Processing Unit,图形处理器),通俗来说就是电脑里负责图像显示和大规模并行计算的“超级大脑”。TPU (Tensor Processing Unit),张量处理单元,专用AI加速芯片,是谷歌为支撑其庞大AI业务(搜索、翻译等)而研发的“核武器”,经过近十年发展,已成为能与NVIDIA GPU抗衡的成熟技术。RISC-V(读作“risk-five”)是一个开源、免费且高度灵活的指令集架构(ISA)。
2026-06-23 12:15:00
415
原创 STL源码解析之红黑树
一棵二叉搜索树如果满足以下所有性质,就是一棵红黑树:节点是红色或黑色。根节点是黑色。每个叶子节点(NIL)是黑色的。(通常用一个公共的黑色哨兵节点T.nil表示所有空指针,简化边界处理)如果一个节点是红色,则它的两个子节点都是黑色。(即不允许出现两个连续的红色节点)对于每个节点,从该节点到其所有后代叶子节点的简单路径上,均包含相同数目的黑色节点。这些性质保证了红黑树的关键平衡指标:最长路径长度不超过最短路径长度的两倍。
2026-06-20 09:45:00
188
原创 STL源码解析之AVL树
int key;int height;// 以该节点为根的子树高度每个节点额外存储height,表示当前子树的高度(叶子节点高度为 1)。高度用于计算平衡因子,从而判断是否需要旋转。结构高度严格:树高始终维持在约 1.44 log₂n 以内,保证了最坏情况下的高效性。动态操作复杂度:查找、插入、删除的最坏时间复杂度均为 O(log n),且常数因子较小。额外存储:每个节点需要存储一个高度值(或平衡因子),空间开销略高于普通 BST。插入/删除开销。
2026-06-19 20:30:00
351
原创 STL源码解析之哈希(2)
若使用自定义类型作为方式 A:特化std::hash(推荐)// 简单组合// 直接使用方式 B:提供自定义哈希函数对象方式 A 的好处是无需在容器模板参数中额外指定哈希,保持接口简洁。
2026-06-17 18:15:00
330
原创 STL源码解析之哈希(1)
是一种数据结构,它能在时间内完成插入、查找和删除。它就像一本自带目录的超级记事本:你给一个名字(键),它能瞬间翻到那一页(值),几乎不用一页页翻找。核心思想:通过把“键”算成一个整数(哈希值),再把这个整数映射到一个的下标位置,直接到那个位置去存取数据key ──→ hash(key) ──→ 数组下标 ──→ 找到 value。
2026-06-17 10:15:00
451
原创 汽车功能安全简介
汽车功能安全通过一套严密的系统工程方法,系统地识别、评估并管理电子电气系统的潜在风险,确保车辆即使在失效时也能安全可控。随着汽车功能的复杂化,它正与网络安全、预期功能安全(SOTIF)协同,共同保障智能汽车的全面安全。汽车功能安全是一个庞大的体系,涉及整车开发、零部件设计、软件测试等众多环节。如果你对其中某个方面,比如AI在安全认证中的具体应用,或者ASIL等级的分解(Decomposition)策略感兴趣,我们可以继续深入探讨。
2026-06-16 17:45:00
435
原创 集成电路安全设计之硬件木马
硬件木马是指在集成电路(芯片)的设计或制造过程中,被恶意植入的微小恶意电路。它和软件木马类似,但存在于硬件底层,非常隐蔽,难以检测和清除。
2026-06-16 09:45:00
259
原创 Boost学习笔记1:时间日期
Boost 是一套高质量、跨平台的 C++ 程序库集合,被称为“C++ 准标准库”,许多 C++11/14/17 的新特性都试验于 Boost。
2026-06-12 10:00:00
168
原创 STL线性容器总结
std::array线性容器(也称序列容器)是指按照线性顺序存储元素的容器,元素之间具有明确的前后关系。arrayvectordequeliststd::array固定大小,编译时确定,不可扩容。存储在栈上(或作为对象成员),无动态分配。提供at()[]front()back()fill()等接口。适合大小固定且较小的序列。
2026-06-11 21:28:36
181
原创 STL源码解析之deque
std::deque(双端队列,double-ended queue)是 C++ 标准库中的一个序列容器,支持在头部和尾部均以 O(1) 时间复杂度插入和删除元素,同时支持随机访问(通过下标[]它弥补了vector头部操作低效和list无法随机访问的不足。deque的精妙之处在于,它通过一个“分段连续”的数据结构,巧妙地模拟了“整体连续”的假象,从而在O(1)时间内高效地在两端进行数据存取。
2026-06-11 21:23:31
164
原创 STL源码解析之list(2)
是链表(std::list)独有的高效转移操作,它可以在 O(1) 时间内将一个链表中的一部分节点(甚至整个链表)直接“剪切”到另一个链表的指定位置,完全不涉及元素的拷贝或移动(只是改几个指针)。
2026-06-10 19:00:00
404
原创 EDA与CAD的区别
维度CADEDA全称设计对象机械、建筑、产品的外壳和结构芯片、电路板、集成电路基本元素点、线、面、实体、尺寸元件、引脚、网络、节点、逻辑门物理法则牛顿力学、材料力学电磁学、量子力学、布尔代数最终产出工程图纸、3D模型、CAM代码GDSII版图(用于制造芯片)、Gerber文件(用于制造电路板)一句话记忆:CAD画的是“看得见的形状”,EDA连的是“看不见的电路”。
2026-06-08 01:44:12
479
原创 STL源码解析之:vector(3)
swap操作用于交换两个 vector 的内容(包括它们所管理的内存、大小和容量)。这是一种非常高效的操作,通常只是交换内部指针,而不会逐个元素拷贝。1)交换两个容器的内容(高效,避免拷贝元素)2) 清空 vector 并释放内存erase用于从 vector 中移除一个元素或一个范围的元素。它会将被删除元素之后的所有元素向前移动,以填补空缺,因此操作复杂度与删除位置及后续元素个数相关。
2026-06-07 23:42:54
398
原创 STL源码解析之:vector(2)
1.如果reszie是减小当前vector的大小,则resize后vector的size会相应减小,但capacity不变,vector同样可以在首部添加新元素,与尾部类似,emplace_front。:你给它一个现成的对象(左值或右值),它将该对象拷贝或移动到。,从而可能避免不必要的临时对象和拷贝/移动操作。,从而可能避免不必要的临时对象和拷贝/移动操作。:你给它构造对象所需的构造函数参数,它会在。当vector的预分配内存全部插入元素,:调用旧内存上元素的析构函数。:在末尾构造新添加的元素。
2026-06-05 00:16:41
242
原创 STL源码解析之:vector(1)
vector采用的是线性连续空间,支持随机访问。其中迭代器start和end分别指向数据存储的起始地址与结束地址,end_of_storage指向预分配内存的结束地址。
2026-06-04 00:27:53
394
HCIE复习资料第2章 IPv4.pdf
2026-11-04
HCIE复习资料第1章 二层技术.pdf
2026-11-04
5G移动无线通信技术-中文版.zip
2019-08-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅