- 博客(127)
- 收藏
- 关注
原创 Epoll 的本质与原理:高性能网络编程的基石
在当今高并发的网络应用中,如何高效地处理大量的并发连接是每个开发者都需要面对的关键问题。Linux 系统提供的epoll技术正是解决这一问题的利器,被广泛应用于 Nginx、Redis、Skynet 等高性能网络服务器中。本文将基于提供的资料,深入探讨epoll的本质、设计思路、原理与工作流程,帮助读者理解其高性能背后的奥秘。
2025-03-30 00:11:01
931
原创 深入理解:阻塞IO、非阻塞IO、水平触发与边缘触发
特性阻塞IO非阻塞IO水平触发(LT)边缘触发(ET)行为等待IO完成才返回立即返回,可能出错或返回部分数据只要条件满足(例如,有数据),就持续通知只有在状态发生变化时才通知一次CPU 消耗低(等待时不占用)高(需要轮询)适中高(需要及时处理所有事件)编程复杂度低较高(需要处理错误和轮询)相对简单较高(需要确保完整处理事件)可靠性高取决于轮询策略高(不易丢失事件)较高,但需要正确处理,否则可能丢失事件效率低(并发处理能力差)较低(轮询开销)相对较低(可能重复通知)
2025-03-30 00:09:27
615
原创 CSP历年题解
csp历年题解,csp.cpp内容涵盖从2023年12月开始一直持续到第一次认证的所有前4题。所有的题解均为满分,在其中,有四道题非本人编写,而从网上搜集优质解答,并且已在文中附上了来源链接。其余则为自己编写,除了历次认证的前两题可能只有些许的注释,甚至还没有,但有一点难度第3题和第4题都附带了思路和较详细注释。题解地址:https://github.com/jokerD888/ccf-csp。
2025-03-26 21:55:26
358
原创 【CUDA】mnist_cuda
使用MLP进行手写数字识别,分别使用pytorch,numpy,cuda一步一步展开代码的具体实现细节。平常使用的pytorch实现,实现了对底层细节的良好封装,易于编程,利于模型的快速搭建。根据nn.CrossEntropyLoss()的计算公式,,计算大约为,最开始参数随机初始化,接近于随机猜测。numpy则进一步对模型的内部进行展开,除了基本的操作,模型的结构,网络的前向传播和方向传播等都需要手动实现。cpu版仅使用C语言搭建整个训练过程,训练的整个流程,模型的构建、计算、前向传播、反向传播、
2025-03-26 21:53:05
266
原创 【CUDA】Pytorch_Extensions
对于计算密集型的操作(如神经网络中的自定义激活函数),使用CUDA扩展可以获得接近硬件极限的性能。本文将以实现一个多项式激活函数x² + x + 1为例,展示完整的开发流程。
2025-02-16 14:46:10
1150
原创 【CUDA】Triton
CUDA是一种低级 GPU 编程框架,程序员需要自己处理线程调度、内存访问等底层优化细节。Triton提供了一个更高层次的抽象,简化了深度学习 GPU 编程,让程序员能够专注于算法层次的开发,而不需要担心低级硬件细节。Triton 是建立在 CUDA 基础之上的,因此了解 CUDA 的基本概念对深入理解 Triton 及其性能优化非常重要。
2025-02-16 14:44:53
1119
原创 博弈类问题 & SG函数 & SG定理
公平组合游戏(Impartial Combinatorial Game, ICG):两个玩家轮流行动,游戏规则对双方一致,且游戏状态完全透明。非公平组合游戏:规则或状态对双方不一致,例如大多数棋类游戏。反常游戏:公平组合游戏的变形。本文主要讨论公平组合游戏(ICG),因为这类博弈问题具有明确的数学结构和通用的解决方法。
2025-02-11 21:09:08
1063
原创 【CUDA】Optimize Matrix Multiplication
参考:Simon Boehm’s blog & git repo。链接文章写的很好,本文主要是学习重点记录。首先本文的主要内容是将从一个朴素的内核开始,然后逐步应用优化(This includes coalescing global memory accesses, shared memory caching and occupancy optimizations, among others.),直到我们将 cuBLAS (NVIDIA 的官方矩阵库)的性能控制在 95% 以内。首先文章是基于A6000GP
2025-02-11 21:08:07
1103
原创 【CUDA】cuDNN:加速深度学习的核心库
【CUDA】cuDNN:加速深度学习的核心库1. 什么是 cuDNN?cuDNN(CUDA Deep Neural Network library)是 NVIDIA 提供的一个高性能 GPU 加速库,专为深度学习任务中常见的操作进行了高度优化。它不仅提供了单操作的高效实现,还支持 多操作融合(fusion),旨在最大化地利用 NVIDIA GPU 的计算能力。cuDNN 能做什么?cuDNN 支持以下常见深度学习操作:卷积操作(Convolution forward/backward,包括交叉相
2024-12-27 20:23:18
2353
原创 Batch Normalization和 Layer Normalization
Batch Normalization (BN) 和 Layer Normalization (LN) 是深度学习中常用的归一化技术,它们的主要目的是加速训练、提高模型的收敛速度和稳定性。Batch Normalization 是一种在深度神经网络中对每个小批量(mini-batch)数据进行归一化的技术。Layer Normalization 是一种对单个样本的所有特征维度进行归一化的技术。它通过对每个样本的所有特征进行标准化,使得每个样本的特征分布更加稳定。在序列任务中,LN 更为合适。
2024-12-14 21:16:13
871
原创 【CUDA】CUBLAS
【CUDA】CUBLAS在深入了解之前,提前运行预热(warmup)和基准测试(benchmark runs) 是获得准确执行时间的关键。如果不进行预热运行,cuBLAS 的首次运行会有较大的开销(大约 45 毫秒),会导致结果偏差。基准测试能够更准确地计算出平均执行时间。cuBLAS:CUDA 基本线性代数子程序库简介:cuBLAS 是 NVIDIA 的 GPU 加速线性代数运算库,广泛应用于 人工智能(AI) 和 高性能计算(HPC) 领域。功能:提供了行业标准的 BLAS 和 GEMM(矩
2024-12-14 21:14:22
1308
原创 【CUDA】Kernel & Atomic & Stream
在 CUDA 编程中,线程同步是极为关键的环节。()函数的作用在于确保针对都完成后,才安全地开始下一个操作。可以将其看作是一个屏障。它通常在或者其他非__global__函数中被调用。由于 GPU 线程是异步执行的,它们的执行顺序并不确定。例如在一些复杂的计算流程中,如果后续的计算依赖于前面内核操作的结果,那么使用这个函数就能避免在前面结果还未就绪时就开始后续操作,从而防止错误的产生。则是用于在。当多个线程可能会对相同的内存位置进行操作时,就需要使用它。
2024-12-03 21:40:37
1207
原创 【CUDA】CUDA Hierarchy
首先简单介绍CUDA 编程的基本概念:讲解 Host(CPU)与 Device(GPU)的区别、内存管理以及 CUDA 运行时的工作机制。显存分配: 使用 在显存中分配内存。内存拷贝: 使用 在 Host 和 Device 间传输数据:释放显存: 使用 释放分配的显存。CUDA 编译器(nvcc)Host 代码:被修改以支持 CUDA 内核。编译为普通的 x86 二进制。Device 代码:编译为 PTX(并行线程执行)代码。PTX 是跨 GPU 代的稳定中间表示,
2024-12-03 21:39:33
1091
原创 【MPI】组和通信器
在 MPI 中,通讯器是一个逻辑上分组的进程集合,它用于标识一组可以彼此通信的进程。一个通讯器不仅仅是进程的集合,它还具有一个上下文(context),用于区分同样的操作在不同通讯器中的执行。通过通讯器,MPI 可以确保不同组的进程之间的消息传递不会发生冲突。例如,默认通讯器包含了所有启动 MPI 程序的进程,而在某些应用中,我们可能只关心其中一部分进程之间的通信。
2024-11-19 18:40:31
914
原创 【MPI】高级集体通信
MPI_Reduce: 将多个进程的数据汇总到一个特定的进程(通常是 root 进程)。: 将多个进程的数据汇总,并将结果发送到所有进程。MPI_Reduce适用于只关心一个进程获得汇总结果的场景,而适用于需要所有进程获取汇总结果的情况。
2024-11-19 18:39:33
566
原创 【MPI】基础集体通信
同步用于同步所有进程。广播MPI_Bcast将数据从一个进程广播给所有其他进程。分发将数据从根进程分发给所有进程。聚集MPI_Gather将所有进程的数据收集到根进程。全收集将每个进程的数据收集并分发给所有进程。这些操作通常用于并行计算中,帮助在多个进程之间高效地共享数据和同步。
2024-11-15 18:33:35
1129
原创 【MPI】阻塞点对点通信
本文将介绍 MPI 中的阻塞式点对点通信,包括基本数据类型、MPI_Send和MPI_Recv函数、MPI_Status结构体,以及和MPI_Probe函数。
2024-11-12 13:00:28
502
原创 Soft TeacherEnd-to-End Semi-Supervised Object Detection with Soft Teacher
相较于之前更复杂的多阶段方法,本论文提出了一个端到端的半监督目标检测方法。这个端到端的训练在学习过程中逐渐提高伪标签的质量,而越来越准确的伪标签反过来又有利于目标检测的训练。在这个框架中我们还提出了两个简单且有效的技巧:一种是软教师机制,其中每个未标注边界框的分类损失由教师网络产生的分类得分加权;另一种是框抖动方法,用于选择可靠的伪框,以便进行框回归学习。在COCO基准测试中,所提出的方法在不同标注比例(即1%,5%,10%)下显著优于先前的方法。此外,当标注数据相对较多时,我们的方法也表现良好。
2024-10-29 23:08:48
1098
原创 线性回归矩阵求解和梯度求解
正规方程通过线性代数的方法为线性回归提供了解的表达式,使得我们可以有效地计算参数。其核心思想是通过最小化残差平方和,寻找最佳拟合的线性模型。MSE12m∑i1mhθxi−yi2MSE2m1i1∑mhθxi−yi2这里,hθxiXi⋅θhθxiXi⋅θ是模型的预测值,yiy^{(i)}yi是实际值。
2024-10-29 23:02:36
1436
原创 深度解析Transformer:从自注意力到MLP的工作机制
嵌入矩阵:将输入的token(文本中的词或字符)转化为高维向量表示。中间层(Attention + MLP):层层堆叠的Attention机制和多层感知机(MLP),帮助模型提取深层次语义信息。GPT-3使用了96层这种结构。解嵌入矩阵:用于将最后的嵌入向量解码为输出结果,即每个词的概率分布,进而预测下一个词。接下来我们深入理解各部分的工作原理,尤其是自注意力和多层感知机。
2024-10-17 16:22:47
2739
原创 目标检测评估指标与损失指标
在目标检测任务中,评估模型的性能通常使用多种指标,这些指标包括平均精度(Average Precision, AP)和平均召回率(Average Recall, AR)。接下来将介绍来自于目标检测任务的评估结果,其中涉及多个变量,包括IoU(Intersection over Union,交并比)、area(目标面积大小)、maxDets(最大检测数量)。
2024-10-12 10:42:44
1158
原创 卷积和转置卷积的输出尺寸计算
若想要将图像高宽扩大p倍,就可以让stride=p,然后调整k_w和padding,比如,(这样滑动一次只滑过窗口的一半),然后看。计算公式,其实就是上面公式的逆运算。stride=1就是上面的公式。再比如,高宽被缩小32倍后为。,这里padding就取1。,想要恢复原尺寸:首先。
2024-09-19 22:53:55
590
1
原创 模型训练时CPU和GPU大幅度波动——可能是数据的读入拖后腿
在进行猫狗大战分类任务时,发现模型训练时CPU和GPU大幅度波动,且模型训练速度很慢。
2024-09-19 22:52:14
575
原创 卷积神经网络与小型全连接网络在MNIST数据集上的对比
通过基本相同参数量的卷积神经网络和小型全连接网络,在MNIST进行对比学习,其中包括详细参数计算。
2024-09-05 18:06:00
1600
原创 【设计模式】组合模式
组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。这种模式通过定义一个统一的接口,使得树形结构中的叶子节点和组合节点能够以相同的方式进行处理。
2024-08-13 16:45:31
578
原创 程序编译过程及makefile依赖
预处理器处理源代码中的预处理指令,如宏定义 ()、文件包含 ()、条件编译指令 (, , ) 等。预处理的输出是纯C/C++代码,不再包含任何预处理指令。预处理的命令通常是:2. 编译 (Compilation)编译器将预处理后的代码转换为汇编代码。这个过程中,编译器会进行语法检查、语义分析、优化代码等。编译的输出是汇编代码文件。编译的命令通常是:3. 汇编 (Assembly)汇编器将汇编代码转换为目标机器码 (Object Code),生成目标文件。这些目标文件是二进制格式的,但还不是可执行文件
2024-08-13 16:43:52
457
原创 【Effective Modern C++】第4章 智能指针
【Effective Modern C++】第4章 智能指针条款18:使用`std::unique_ptr`管理具备专属所有权的资源速记要点条款19:使用`std::shared_ptr`管理具备共享所有权的资源要点速记条款20:对于类似`std::shared_ptr`但有可能空悬的指针使用`std::weak_ptr`要点速记条款21:优先使用`std::make_unique`和`std::make_shared`,而非直接使用`new`要点速记条款22:使用Pimpl习惯用法时,将
2024-07-19 12:40:05
1225
原创 【Effective Modern C++】第3章 转向现代C++
【Effective Modern C++】第3章 转向现代C++条款7:在创建对象时注意区分()和{}要点速记条款8:优先选用nullptr,而非0或NULL要点速记条款9:优先选用别名声明,而非typedef要点速记条款10:优先选用限定作用域的枚举类型,而非不限作用域的枚举类型要点速记条款11:优先选用删除函数,而非private未定义函数要点速记条款12:为意在改写的函数添加override声明要点速记条款13:优先选用const_iterator,而非iterator
2024-07-19 12:37:09
731
原创 位图、布隆过滤器、一致性哈希
问:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。答:40亿个数大概160GB,对于一般的计算机,直接放入内存不太可能。我们只需要判断一个数在不在,可以用一个bit来表示,那么无符号类型有229B,即512MB即可记录无符号范围内的每个数是否出现。那么给一个无符号整数,我们只需要看对应位置的那一个bit是否为1即可。综上所述,位图是一种强大且高效的数据结构,广泛应用于各种需要高效存储和操作布尔值或整数集合的场景中。
2024-07-08 15:41:05
1103
原创 红黑树插入删除流程(流程图)
- 首先按照二叉树排序树的规则确定要插入的位置(要插的位置一定是叶节点,即假设和二叉排序树一样不做调整,插入后一定是叶节点)- 若新节点是根节点,染为黑色,结束- 否则默认先染为红色,这时判断它的父节点是不是红色(是否破坏不红红规则) - 若没有破坏不红红规则,结束 - 破坏了不红红规则(父节点是红色),接下来看叔叔节点的脸色行事 - 黑叔,旋转+染色:LL/RR型,父爷颜色对换+左/右单旋;LR/RL型,儿爷颜色对换+左右/右左双旋;结束 - 红树,染色+变新:叔、父、爷都进行
2024-06-30 16:34:00
1167
原创 【Effective Modern C++】第1章 型别推导
【Effective Modern C++】第1章 型别推导条款1:理解模板型别推导条款2:理解auto型别推导条款3:理解decltype条款4:掌握查看型别推导结果的方法
2024-06-21 20:02:18
1025
原创 CCF CSP 认证考试历年真题满分题解(所有前四题)
原本刷题的动机仅仅是为研究生复试的机试环节做准备,我通过刷csp的真题来锻炼自己,因为上次的机试题目全部是csp真题,最后也是顺利上岸。空闲之际,我把为复试所练习的那些真题解析进行整理,内容涵盖从2023年12月开始一直持续到第一次认证的所有前4题。所有的题解均为满分,在其中,有四道题我没有做, 而从网上搜集优质解答,并且已在文中附上了来源链接。其他都是自己一步一步写的,除了历次认证的前两题可能只有些许的注释,可能还没有,但有一点难度第3题和第4题都附带了思路和详细注释。
2024-05-11 21:41:20
3633
3
原创 CCF CSP 202012-3 带配额的文件系统 详解100分
本题细节较多,但本题解思路清晰,代码简洁,实际代码量不超过150行。思路:从根节点向下构建多叉树,建立结构体如下,随后根据题目操作对多叉树进行操作。
2024-03-08 10:35:43
1153
原创 CCF CSP 202006-4 1246 (100分详细题解,矩阵乘法+快速幂)
同时考虑到题目给的s是一个部分数字串,故可能无法直接倒推回s=2,故s在整个序列的情况,可能分为s前面是1,s前面是6,或者s前面不是1或6, 因为4->16 6->64,都会产生两位,所以s的首个数字可能是16中的6,以及64中的6,由于s只是其中的一部分,所以我们要在前面补上1和6。s
2024-03-06 21:35:21
675
原创 c++ %运算符
运算符%俗称“取余”或“取模”运算符,负责计算两个整数相除所得的余数。在除法运算中,如果两个运算对象的符号相同则商为正(如果不为0的话),否则商为负。C++语言的早期版本允许结果为负值的商向上或向下取整,。根据取余运算的定义,如果m和n是整数且n非0,则表达式的求值结果与m相等。隐含的意思是,如果m%n不等于0,则它的符号和m相同。C++语言的早期版本允许m%n的符号匹配n的符号,而且商向负无穷一侧取整,这一方式在新标准中已经被禁止使用了。
2024-02-17 15:04:20
2361
2
CCF CSP 认证考试历年真题满分题解(所有前四题)
2024-05-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人