自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(135)
  • 收藏
  • 关注

原创 征服百万并发连接:高并发网络编程指南

// 摘要:C语言高并发网络编程实战指南 本文详细介绍了使用C语言和Linux epoll实现百万级并发连接的服务器开发方法。主要内容包括: 核心技术选择:分析epoll相比select/poll的性能优势,实现O(1)事件检测 系统调优关键:讲解TCP连接五元组原理及突破单机连接限制的方法 服务器架构:基于事件驱动的回调模型设计,包含conn_item数据结构、epoll实例和异步回调机制 代码实现:展示了服务器核心代码,包括回调函数、事件注册和HTTP响应处理 性能监控:通过时间计算和连接数统计实现实时

2025-06-11 13:08:59 434

原创 网络IO与IO多路复用

本文介绍了网络编程中网络IO与IO多路复用的基本原理。首先解析了C程序从main函数启动的过程,说明操作系统如何加载和初始化程序。接着通过一个简单的网络服务器代码示例,展示了socket创建、绑定和监听的过程,揭示了TCP三次握手由内核自动完成的机制。文章重点分析了阻塞式IO模型的局限性——只能处理单一连接。最后深入探讨了TCP连接关闭时常见的TIME_WAIT和CLOSE_WAIT状态,解释其产生原因及影响:TIME_WAIT由短连接导致,而CLOSE_WAIT则是应用程序未及时关闭套接字所致,可能导致文

2025-06-11 13:07:06 262

原创 Linux 文件 IO 性能监控与分析指南

文件 I/O 性能监控与分析摘要 本文深入探讨Linux文件I/O性能监控的关键技术与工具。首先介绍了两种核心I/O方式:缓存I/O通过内核缓冲区提升性能但增加CPU开销,直接I/O则绕过缓冲适用于数据库等应用。重点解析了iostat工具的使用方法,包括CPU和磁盘I/O指标的详细解读,如%iowait、await和%util等关键参数的意义及瓶颈识别技巧。同时介绍了sysbench工具对CPU、内存和磁盘的基准测试方法。通过掌握这些工具,系统管理员可以精准定位I/O性能问题,优化系统响应速度

2025-05-30 13:00:23 345

原创 Linux 网络性能监控与故障排查终极宝典

本文介绍了Linux网络性能监控与故障排查的核心方法。主要内容包括: 网络性能核心指标:带宽、吞吐量、延时、PPS等关键参数的定义和意义 网络接口配置检查: 使用ifconfig或ip命令查看网络状态 重点关注MTU、IP地址、收发统计及错误信息 详细讲解ip命令的使用方法,包括网卡管理、IP地址配置、路由表操作等 套接字与连接分析: 介绍ss命令替代netstat的优势 解释Recv-Q和Send-Q在不同状态下的含义 提供常用ss命令示例,包括TCP/UDP连接查看、端口监听状态检查等 文章提供了实用的

2025-05-30 12:59:41 1253

原创 linux CPU性能分析原理和命令

Linux CPU性能分析指南摘要 本文全面介绍了Linux系统CPU性能分析的核心概念与工具。重点解析了平均负载(反映系统活跃进程数)和CPU利用率(显示CPU实际使用率)的区别与关系,指出高负载可能由CPU或I/O密集型任务引起。文章详细讲解了uptime、top、mpstat、pidstat、vmstat等关键工具的使用方法,并通过实际场景演示了如何区分CPU和I/O密集型问题。最后提供了系统性的排查思路和工具速查表,帮助用户快速定位性能瓶颈,包括内核态和用户态CPU高占用的不同分析方法。

2025-05-28 17:40:36 543

原创 【设计模式】责任链

本文介绍了责任链设计模式,该模式让多个对象处理请求时形成一条链,每个处理者决定是否处理或传递请求。适用场景包括不确定处理者、递进处理关系或需动态调整处理流程的情况。通过C++日志处理系统示例,展示了如何实现DEBUG、INFO、ERROR三级日志处理器链。责任链模式的优点包括降低耦合、灵活扩展和符合开闭原则,但可能存在请求未被处理的风险。实际应用包括UI事件传播、审批流程等。该模式适合需要动态处理链的场景,能有效解耦请求发送者和接收者。

2025-05-28 17:39:27 550

原创 【C++】深入理解 unordered 容器、布隆过滤器与分布式一致性哈希

本文深入探讨了C++中的unordered容器、布隆过滤器和分布式一致性哈希的原理、实现及应用场景。unordered容器基于哈希表,提供O(1)的查询、插入和删除操作,通过链表法或开放寻址法处理哈希冲突。布隆过滤器是一种概率型数据结构,用于判断元素是否存在,具有高效和节省空间的特点,但存在误判且不支持删除。一致性哈希则用于解决分布式系统中的数据迁移问题,通过虚拟节点优化负载均衡。这些技术在数据结构优化、缓存设计和分布式架构中发挥着重要作用。

2025-05-13 18:30:48 1243

原创 【C++】流(Stream)详解:标准流、文件流和字符串流

标准流:处理基本的控制台输入输出文件流:读写文件数据字符串流:在内存中处理字符串数据理解这些流的概念和用法对于C++编程至关重要,它们不仅提供了统一的操作接口,还能帮助我们编写更清晰、更健壮的代码。

2025-05-13 18:30:01 1020

原创 Epoll 的本质与原理:高性能网络编程的基石

在当今高并发的网络应用中,如何高效地处理大量的并发连接是每个开发者都需要面对的关键问题。Linux 系统提供的epoll技术正是解决这一问题的利器,被广泛应用于 Nginx、Redis、Skynet 等高性能网络服务器中。本文将基于提供的资料,深入探讨epoll的本质、设计思路、原理与工作流程,帮助读者理解其高性能背后的奥秘。

2025-03-30 00:11:01 973

原创 深入理解:阻塞IO、非阻塞IO、水平触发与边缘触发

特性阻塞IO非阻塞IO水平触发(LT)边缘触发(ET)行为等待IO完成才返回立即返回,可能出错或返回部分数据只要条件满足(例如,有数据),就持续通知只有在状态发生变化时才通知一次CPU 消耗低(等待时不占用)高(需要轮询)适中高(需要及时处理所有事件)编程复杂度低较高(需要处理错误和轮询)相对简单较高(需要确保完整处理事件)可靠性高取决于轮询策略高(不易丢失事件)较高,但需要正确处理,否则可能丢失事件效率低(并发处理能力差)较低(轮询开销)相对较低(可能重复通知)

2025-03-30 00:09:27 662

原创 CSP历年题解

csp历年题解,csp.cpp内容涵盖从2023年12月开始一直持续到第一次认证的所有前4题。所有的题解均为满分,在其中,有四道题非本人编写,而从网上搜集优质解答,并且已在文中附上了来源链接。其余则为自己编写,除了历次认证的前两题可能只有些许的注释,甚至还没有,但有一点难度第3题和第4题都附带了思路和较详细注释。题解地址:https://github.com/jokerD888/ccf-csp。

2025-03-26 21:55:26 623 2

原创 【CUDA】mnist_cuda

使用MLP进行手写数字识别,分别使用pytorch,numpy,cuda一步一步展开代码的具体实现细节。平常使用的pytorch实现,实现了对底层细节的良好封装,易于编程,利于模型的快速搭建。根据nn.CrossEntropyLoss()的计算公式,,计算大约为,最开始参数随机初始化,接近于随机猜测。numpy则进一步对模型的内部进行展开,除了基本的操作,模型的结构,网络的前向传播和方向传播等都需要手动实现。cpu版仅使用C语言搭建整个训练过程,训练的整个流程,模型的构建、计算、前向传播、反向传播、

2025-03-26 21:53:05 280

原创 【CUDA】Pytorch_Extensions

对于计算密集型的操作(如神经网络中的自定义激活函数),使用CUDA扩展可以获得接近硬件极限的性能。本文将以实现一个多项式激活函数x² + x + 1为例,展示完整的开发流程。

2025-02-16 14:46:10 1180

原创 【CUDA】Triton

CUDA是一种低级 GPU 编程框架,程序员需要自己处理线程调度、内存访问等底层优化细节。Triton提供了一个更高层次的抽象,简化了深度学习 GPU 编程,让程序员能够专注于算法层次的开发,而不需要担心低级硬件细节。Triton 是建立在 CUDA 基础之上的,因此了解 CUDA 的基本概念对深入理解 Triton 及其性能优化非常重要。

2025-02-16 14:44:53 1244

原创 博弈类问题 & SG函数 & SG定理

公平组合游戏(Impartial Combinatorial Game, ICG):两个玩家轮流行动,游戏规则对双方一致,且游戏状态完全透明。非公平组合游戏:规则或状态对双方不一致,例如大多数棋类游戏。反常游戏:公平组合游戏的变形。本文主要讨论公平组合游戏(ICG),因为这类博弈问题具有明确的数学结构和通用的解决方法。

2025-02-11 21:09:08 1100

原创 【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 1122

原创 【C++】剖析lower_bound & upper_bound

先看看接口。

2024-12-27 20:25:19 426

原创 【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 2559

原创 Batch Normalization和 Layer Normalization

Batch Normalization (BN) 和 Layer Normalization (LN) 是深度学习中常用的归一化技术,它们的主要目的是加速训练、提高模型的收敛速度和稳定性。Batch Normalization 是一种在深度神经网络中对每个小批量(mini-batch)数据进行归一化的技术。Layer Normalization 是一种对单个样本的所有特征维度进行归一化的技术。它通过对每个样本的所有特征进行标准化,使得每个样本的特征分布更加稳定。在序列任务中,LN 更为合适。

2024-12-14 21:16:13 889

原创 【CUDA】CUBLAS

【CUDA】CUBLAS在深入了解之前,提前运行预热(warmup)和基准测试(benchmark runs) 是获得准确执行时间的关键。如果不进行预热运行,cuBLAS 的首次运行会有较大的开销(大约 45 毫秒),会导致结果偏差。基准测试能够更准确地计算出平均执行时间。cuBLAS:CUDA 基本线性代数子程序库简介:cuBLAS 是 NVIDIA 的 GPU 加速线性代数运算库,广泛应用于 人工智能(AI) 和 高性能计算(HPC) 领域。功能:提供了行业标准的 BLAS 和 GEMM(矩

2024-12-14 21:14:22 1367

原创 【CUDA】Kernel & Atomic & Stream

在 CUDA 编程中,线程同步是极为关键的环节。()函数的作用在于确保针对都完成后,才安全地开始下一个操作。可以将其看作是一个屏障。它通常在或者其他非__global__函数中被调用。由于 GPU 线程是异步执行的,它们的执行顺序并不确定。例如在一些复杂的计算流程中,如果后续的计算依赖于前面内核操作的结果,那么使用这个函数就能避免在前面结果还未就绪时就开始后续操作,从而防止错误的产生。则是用于在。当多个线程可能会对相同的内存位置进行操作时,就需要使用它。

2024-12-03 21:40:37 1232

原创 【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 1107

原创 【MPI】组和通信器

在 MPI 中,通讯器是一个逻辑上分组的进程集合,它用于标识一组可以彼此通信的进程。一个通讯器不仅仅是进程的集合,它还具有一个上下文(context),用于区分同样的操作在不同通讯器中的执行。通过通讯器,MPI 可以确保不同组的进程之间的消息传递不会发生冲突。例如,默认通讯器包含了所有启动 MPI 程序的进程,而在某些应用中,我们可能只关心其中一部分进程之间的通信。

2024-11-19 18:40:31 978

原创 【MPI】高级集体通信

MPI_Reduce: 将多个进程的数据汇总到一个特定的进程(通常是 root 进程)。: 将多个进程的数据汇总,并将结果发送到所有进程。MPI_Reduce适用于只关心一个进程获得汇总结果的场景,而适用于需要所有进程获取汇总结果的情况。

2024-11-19 18:39:33 607

原创 【MPI】计算并行排名

接下来通过以下这个程序来综合复习基本集体通信。

2024-11-15 18:34:30 331

原创 【MPI】基础集体通信

同步用于同步所有进程。广播MPI_Bcast将数据从一个进程广播给所有其他进程。分发将数据从根进程分发给所有进程。聚集MPI_Gather将所有进程的数据收集到根进程。全收集将每个进程的数据收集并分发给所有进程。这些操作通常用于并行计算中,帮助在多个进程之间高效地共享数据和同步。

2024-11-15 18:33:35 1173

原创 【MPI】阻塞点对点通信

本文将介绍 MPI 中的阻塞式点对点通信,包括基本数据类型、MPI_Send和MPI_Recv函数、MPI_Status结构体,以及和MPI_Probe函数。

2024-11-12 13:00:28 526

原创 【MPI】 六大金刚:六个最基本、最常用的函数

首先,安装MPI看。先简要介绍一下rank(进程序号)和。

2024-11-12 12:59:29 1454

原创 Soft TeacherEnd-to-End Semi-Supervised Object Detection with Soft Teacher

​ 相较于之前更复杂的多阶段方法,本论文提出了一个端到端的半监督目标检测方法。这个端到端的训练在学习过程中逐渐提高伪标签的质量,而越来越准确的伪标签反过来又有利于目标检测的训练。在这个框架中我们还提出了两个简单且有效的技巧:一种是软教师机制,其中每个未标注边界框的分类损失由教师网络产生的分类得分加权;另一种是框抖动方法,用于选择可靠的伪框,以便进行框回归学习。在COCO基准测试中,所提出的方法在不同标注比例(即1%,5%,10%)下显著优于先前的方法。此外,当标注数据相对较多时,我们的方法也表现良好。

2024-10-29 23:08:48 1117

原创 线性回归矩阵求解和梯度求解

正规方程通过线性代数的方法为线性回归提供了解的表达式,使得我们可以有效地计算参数。其核心思想是通过最小化残差平方和,寻找最佳拟合的线性模型。MSE12m∑i1mhθxi−yi2MSE2m1​i1∑m​hθ​xi−yi2这里,hθxiXi⋅θhθ​xiXi⋅θ是模型的预测值,yiy^{(i)}yi是实际值。

2024-10-29 23:02:36 1474

原创 深度解析Transformer:从自注意力到MLP的工作机制

嵌入矩阵:将输入的token(文本中的词或字符)转化为高维向量表示。中间层(Attention + MLP):层层堆叠的Attention机制和多层感知机(MLP),帮助模型提取深层次语义信息。GPT-3使用了96层这种结构。解嵌入矩阵:用于将最后的嵌入向量解码为输出结果,即每个词的概率分布,进而预测下一个词。接下来我们深入理解各部分的工作原理,尤其是自注意力和多层感知机。

2024-10-17 16:22:47 2839

原创 目标检测评估指标与损失指标

在目标检测任务中,评估模型的性能通常使用多种指标,这些指标包括平均精度(Average Precision, AP)和平均召回率(Average Recall, AR)。接下来将介绍来自于目标检测任务的评估结果,其中涉及多个变量,包括IoU(Intersection over Union,交并比)、area(目标面积大小)、maxDets(最大检测数量)。

2024-10-12 10:42:44 1182

原创 分类评估指标

这些指标各有特点,适用于不同的场景和需求。了解它们有助于更全面地评估和优化分类模型的性能。

2024-10-12 10:41:47 1003

原创 卷积和转置卷积的输出尺寸计算

若想要将图像高宽扩大p倍,就可以让stride=p,然后调整k_w和padding,比如,(这样滑动一次只滑过窗口的一半),然后看。计算公式,其实就是上面公式的逆运算。stride=1就是上面的公式。再比如,高宽被缩小32倍后为。,这里padding就取1。,想要恢复原尺寸:首先。

2024-09-19 22:53:55 640 1

原创 模型训练时CPU和GPU大幅度波动——可能是数据的读入拖后腿

在进行猫狗大战分类任务时,发现模型训练时CPU和GPU大幅度波动,且模型训练速度很慢。

2024-09-19 22:52:14 621

原创 卷积神经网络与小型全连接网络在MNIST数据集上的对比

通过基本相同参数量的卷积神经网络和小型全连接网络,在MNIST进行对比学习,其中包括详细参数计算。

2024-09-05 18:06:00 1620

原创 【设计模式】组合模式

组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。这种模式通过定义一个统一的接口,使得树形结构中的叶子节点和组合节点能够以相同的方式进行处理。

2024-08-13 16:45:31 586

原创 程序编译过程及makefile依赖

预处理器处理源代码中的预处理指令,如宏定义 ()、文件包含 ()、条件编译指令 (, , ) 等。预处理的输出是纯C/C++代码,不再包含任何预处理指令。预处理的命令通常是:2. 编译 (Compilation)编译器将预处理后的代码转换为汇编代码。这个过程中,编译器会进行语法检查、语义分析、优化代码等。编译的输出是汇编代码文件。编译的命令通常是:3. 汇编 (Assembly)汇编器将汇编代码转换为目标机器码 (Object Code),生成目标文件。这些目标文件是二进制格式的,但还不是可执行文件

2024-08-13 16:43:52 470

原创 【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 1249

原创 【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 769

CCF CSP 认证考试历年真题满分题解(所有前四题)

内容涵盖从2023年12月开始一直持续到第一次认证的所有前4题。所有的题解均为满分,在其中,有四道题我没有做, 而从网上搜集优质解答,并且已在文中附上了来源链接。其他都是自己一步一步写的,除了历次认证的前两题可能只有些许的注释,可能还没有,但有一点难度第3题和第4题都附带了思路和详细注释。

2024-05-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除