自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CUDA学习笔记

向量化访存。

2025-07-15 20:54:22 145

原创 llama.cpp学习笔记:后端加载

单例每种后端一个单例:cuda、cpu等版本号、接口和上下文信息后端对应的设备:接口、所属后端和上下文信息。

2025-06-29 18:43:53 403

原创 Clion乱码问题解决

参考下面的链接能够解决问题。

2025-06-28 17:42:34 188

原创 大模型学习笔记:大模型参数估计

如果总共有L层Transformer,则参数总量为。单层Transformer:12h*h+13h。输入:x,维度b * s * h。,总参数量:2*(h+h)=4h。

2025-06-27 09:48:19 221

原创 NVIDIA GPU架构学习笔记

完整的 AD102 GPU 包括 12 个图形处理集群 (GPC)、72 个纹理处理集群 (TPC)、144 个流多处理器 (SM) 以及带有 12 个 32 位内存控制器的 384 位内存接口。FP64 的 TFLOP 速率是 FP32 运算的 1/64。FP64 核心数量较少是为了确保所有包含 FP64 代码的程序(包括 FP64 Tensor Core 代码)都能正常运行。每个 GPC 包含一个专用的光栅引擎、两个光栅操作 (ROP) 分区(每个分区包含八个独立的 ROP 单元)以及六个 TPC。

2025-06-24 19:34:02 582

原创 CUDA NCU Occupancy学习笔记

📌 CUDA Occupancy(占用率)概述摘要Occupancy(占用率) 是衡量一个 GPU 的 Streaming Multiprocessor (SM) 上能有多少个活动 warp 相对于理论最大 warp 数的比例: 👉 occupancy = 活跃 warp 数 / 理论最大 warp 数🔧 影响 Occupancy 的三大资源:线程块大小(block size)每个 block 只能驻留在一个 SM;SM 能容纳的 warp 数和线程块数量由 block 内线程数决定

2025-06-24 13:27:12 1142

原创 CMake学习笔记01

支持绝对路径和相对路径(相对路径基于当前CMakeLists.txt)├── CMakeLists.txt <-- 当前文件。存放实际代码,根CMakeLists.txt负责全局配置)。(可选):如果设置,子目录目标不会默认构建(需显式指定)。:影响当前目录及之后所有子目录的所有目标(可执行文件/库):子目录路径(相对于当前CMakeLists.txt)。子目录中的目标(如库/可执行文件)会被集成到主构建系统。(可选):指定子目录构建输出的位置,默认使用。自动关联当前目录的包含路径(通过前面的。

2025-06-22 11:25:37 439

原创 CUDA NCU 合并访存学习笔记

数据从全局内存到SM的传输过程中,会去L1和L2中查询是否有缓存。对全局内存的访问将经过L1;如果未命中,则会接着从L2中查找;如果再次未命中,则会从全局内存DRAM中读取。当L1被禁用时,对全局内存的加载请求将直接进入L2;如果L2未命中,将由DRAM完成请求。核函数从全局内存DRAM中读取数据有两种粒度,使用L1时,每次按照128字节进行缓存;不使用L1时,每次按照32字节进行缓存。全局内存通过缓存实现加载和存储过程。其中,L1为一级缓存,每个SM都有自己的L1;L2为二级缓存,L2则被所有SM共有。

2025-06-21 13:44:16 342

原创 NVIDIA cuFFTDx文档笔记

cuFFTDx是NVIDIA CUDA MathDx包中的FFT计算库,允许在CUDA内核中直接执行高性能傅里叶变换。其核心优势包括:支持FFT与其他运算的内核融合以减少延迟;避免全局内存数据迁移;提供高度可定制的FFT例程,可调整大小、精度和批次等参数。该库与cuBLASDx线性代数库同属MathDx组件,并保持与未来CUDA版本的兼容性,适用于需要优化FFT计算性能的应用场景。(149字)

2025-06-21 11:37:20 371

原创 大语言模型解析

每个index对应一个embedding,embedding需要训练,embedding是一个数组。embedding:将自然语言翻译成index。

2025-06-08 04:22:34 364

原创 LLM优化技术——Paged Attention

Transformer解码过程中的KV缓存存在显著内存开销问题。以Llama-2-70B模型为例,KV缓存内存占用达2.5MB/批次/序列长度。主要存在三类内存浪费:内部碎片化(因输出长度未知过度分配)、预留内存(为未来步骤预分配)和外部碎片化(不同序列长度导致空隙)。PagedAttention技术提出创新解决方案,通过不连续存储键值对来优化内存利用率。该方案有效缓解了传统连续存储方式带来的内存碎片问题,为提升大模型推理效率提供了重要思路。

2025-05-31 18:07:40 374

原创 LLM推理相关指标

摘要:大语言模型性能评估主要关注三个指标:TTFT(首token响应时间)、TPOT(单token生成时间)和总延迟(TTFT+TPOT×token数)。优化目标是降低TTFT和TPOT,提高吞吐量(每秒生成token数)。模型性能受输出长度、输入长度和模型尺寸影响,其中Llama-70B的延迟约为Llama-13B的两倍。需权衡吞吐量与TPOT,并发处理会提高吞吐量但可能增加单请求延迟。10tokens/s是流畅交互的临界值。

2025-05-31 17:29:26 1125

原创 conda常用操作

【代码】conda常用操作。

2025-05-21 22:37:33 148

原创 Windows远程连接AutoDL图形化界面

在AutoDL上租用的Linux服务器(如Ubuntu)可以通过VNC或X11转发实现Windows电脑的远程图形化界面连接。首先,通过SSH连接服务器并安装轻量级桌面环境(如Xfce)和VNC服务器。初始化VNC服务器并设置连接密码。接着,配置VNC服务,编辑配置文件并赋予执行权限,重新启动VNC。最后,在Windows上下载VNC客户端,通过SSH隧道转发VNC端口,使用VNC客户端连接服务器并输入密码登录。

2025-05-17 00:46:23 1409 1

原创 Transformer && LLM

(1)判别式任务:给定一个句子,希望得到某种分类结果,例如情感分析、文本分类、文本蕴含等;(2)生成式任务:给定一个句子,想要生成下一个词元,语言建模,例如机器翻译。词表中有很多单词,每个单词使用一个数组表示,将单词编码成数字。(1)RNN循环神经网络。(2)CNN卷积神经网络。

2025-05-11 12:25:06 220

原创 CUDA Tensor Core wmma学习笔记

C++ Warp矩阵运算利用Tensor Core来加速D = A * B + C形式的矩阵问题,这些运算支持计算能力7.0或者更高设备的混合精度浮点数据。(1)fragmentfragment:包含分布在Warp中所有线程上的矩阵片段。Use:可用值:matrix_a、matrix_b、accumulator。matrix_a表示当前fragment用作第一个被乘数,A;matrix_b表示当前fragment用作第二个被乘数,B;accumulator表示当前fragment用作源或目标

2025-04-22 01:23:31 2017

原创 计算机网络——流量控制

在任何时候只有一个数据包在传输,发送方发送一个数据包,接收方在接收到数据包后向发送方返回一个确认包。发送方在等待设定时间没有接收到确认数据包后,重新发送刚才发送的数据包。(2)Last Acknowledgment Received(LAR):从接收方收到的最后一个确认。停止&等待方法是在任何时候都只有一个数据包在传输,滑动窗口是在任何时候同时有n个数据包在传输。流量控制的基本方法是确保发送方不会以超过接收方处理能力的速度发送数据包。(3)Last Segment Sent(LSS):发送的最后一个段。

2025-01-31 22:14:13 1098

原创 地址解析协议(Address Resolution Protocol,ARP)

(2)链路地址描述了一个特定的网卡,即发送和接收链路层帧的唯一设备。以太网使用48位地址。每当购买一张以太网网卡时,该网卡已经被预先配置了一个唯一的以太网地址。地址解析协议(ARP)是一种机制,网络层通过它能够发现与其直接相连的网络地址所对应的链路地址。(1)IP地址是网络层的地址,其描述了一个主机,即网络层中的唯一目的地。IP地址表示这台主机,以太网地址则表示这张以太网网卡。

2025-01-31 12:59:15 246

原创 TCP & UDP Service Model

TCP & UDP Service Model

2025-01-31 12:45:42 753

原创 最长前缀匹配算法

计算机网络 IPv4 最长前缀匹配算法

2025-01-31 10:33:15 213

原创 IPv4 地址

IPv4 地址

2025-01-31 10:24:01 157

原创 IP服务模型

1. IP数据报IP数据报中除了包含需要传输的数据外,还包括目标终端的IP地址和发送终端的IP地址。数据报通过网络从一台路由器跳到另一台路由器,一路从IP源地址传递到IP目标地址。每个路由器都包含一个转发表,该表告诉它在匹配到特定目标地址后将数据报发送到哪里。路由器并不知道整个路径,它只是使用目标地址来索引自己的转发表,以便将数据报转发到路径上的下一跳,朝着最终目的地前进。IP服务模型提供了一项服务,其中包括将数据路由到目的地的功能。2. 不可靠的IP并不保证数据报一定会被送达目的地,它们可能会被延迟送达、

2025-01-30 10:52:32 1003

原创 四层网络模型

最顶层是应用层,互联网有成千上万的应用程序,虽然每个应用程序各不相同,但它们可以通过使用应用层到TCP和UDP服务的明确定义的API来复用传输层。并非所有应用程序都需要数据被正确送达,如果视频会议应用程序正在发送一个数据包中的视频片段,多次等待数据包重传可能毫无意义,最好是继续传输。有些应用程序根本不需要TCP服务,如果应用程序不需要可靠的送达,可以使用更简单的UDP。UDP是一种替代的传输层协议,它将应用程序数据打包,并将其交给网络层以传递到另一端。网络层在底层提供的是一种不可靠的数据传递服务。

2025-01-28 13:36:40 537

原创 golang map

Go语言中的map是一种内置的数据结构,用于存储键值对(它类似于其他语言中的字典(Python)、哈希表(Java)或关联数组(PHPmap提供了高效的查找、插入和删除操作,是Go语言中非常常用的数据结构之一。(1)键值对存储:map 存储的是一组键值对,键(key)和值(value)可以是任意类型。(2)键的唯一性:map 中的键必须是唯一的,不能重复。(3)无序性:map 中的键值对是无序的,遍历时顺序不固定。(4)动态大小:map 的大小是动态的,可以根据需要自动扩容。:键的类型。

2025-01-16 15:20:10 391

原创 C++:派生

【代码】C++:派生。

2025-01-14 23:14:08 182

原创 C++构造函数

在C++中,类的构造函数() 是一种特殊的成员函数,用于在创建对象时初始化对象的状态。构造函数的名称必须与类名相同,且没有返回类型(包括void构造函数在对象创建时自动调用,确保对象在使用时处于有效的初始状态。

2025-01-14 23:08:41 279

原创 C++:智能指针

C++中的智能指针是用于管理动态分配内存的工具,能够自动释放内存,避免内存泄漏。C++11和。它们都定义在头文件中。

2025-01-14 17:42:25 279

原创 std::move

标准库中的一个实用工具,用于将对象转换为右值引用,从而允许移动语义的操作。

2025-01-14 17:22:34 194

原创 std::is_same_v

引入的一个模板变量,用于在编译时检查两个类型是否相同。头文件中,是类型特征(type traits)的一部分。的简化版本,直接返回一个布尔值(是要比较的两个类型。),表示两个类型是否相同。

2025-01-13 23:06:52 728

原创 decltype

引入的关键字,用于推导表达式的类型。它可以在编译时获取某个表达式或变量的类型,并将其作为类型使用。这里,decltype(a + b) 用于推导 a + b 的类型,并将其作为函数的返回类型。常用于模板编程中,用于推导复杂表达式的类型。结合使用,用于推导复杂表达式的类型。结合使用,增强代码的可读性和灵活性。可以是变量、函数调用、表达式等。(2)在泛型编程中简化类型声明。(1)推导变量或表达式的类型。

2025-01-13 22:59:56 269

原创 分解质因数

【代码】分解质因数。

2025-01-12 23:30:31 180

原创 std::vector

中最常用的容器之一,提供了动态数组的功能,支持在尾部高效地添加和删除元素,同时允许通过下标或迭代器访问元素。会自动管理内存,当元素数量超过当前容量时,会自动分配更大的内存块并复制元素。的大小可以动态调整,不需要预先指定容量。标准库中的一个动态数组容器,定义在。的元素在内存中是连续存储的,类似于。是值类型,支持拷贝和赋值操作。在尾部添加元素,或使用。(4) 获取大小和容量。)或迭代器访问元素。(1) 创建和初始化。(8)插入和删除元素。

2025-01-12 22:56:02 547

原创 std::array

(2)连续存储:元素在内存中是连续存储的,类似于。它是一个固定大小的数组容器,封装了。风格数组,并提供了更多的功能和安全性。的大小在编译时确定,不能在运行时动态调整。(1)安全性:提供了越界检查(通过。是值类型,支持拷贝和赋值操作。标准库中的一个容器,定义在。:数组的大小(元素的数量)。(2)功能性:支持迭代器、容器接口一致,易于使用。算法和其他容器操作。

2025-01-12 22:26:47 368

原创 std::transform

(4)操作函数的返回值:操作函数(unary_op 或 binary_op)的返回值类型必须与目标容器的元素类型兼容。(1)目标范围的大小:目标范围必须有足够的空间来存储转换结果,否则会导致未定义行为。可以用于对容器中的元素进行逐元素操作,例如将每个元素加 1、转换为大写字母等。它用于对给定范围内的元素进行转换操作,并将结果存储到另一个范围中。是高效的,因为它会对范围内的每个元素应用操作,且没有额外的开销。:第二个输入范围的起始迭代器(仅用于二元操作版本)。:目标范围的起始迭代器,用于存储转换结果。

2025-01-12 21:59:16 508

原创 std::accumulate

它用于计算给定范围内元素的累积值(通常是一个和,但也可以是其他类型的累积操作)。是一个二元函数,接受两个参数:当前的累积值和当前元素的值,返回新的累积值。: 二元操作函数,用于定义累积操作。如果不提供,默认使用加法操作。即,它将范围内的所有元素相加,并加上初始值。指向序列的末尾(即最后一个元素的下一个位置)。是 C++ 标准库中的一个算法,定义在。: 输入范围,表示要处理的元素序列。: 初始值,累积操作从这个值开始。返回累积操作的结果,类型为。指向序列的第一个元素,参数来自定义累积操作。

2025-01-12 21:45:12 612

原创 质数的判定

【代码】质数的判定。

2025-01-12 20:15:02 346

原创 git相关操作笔记

git init是一个 Git 命令,用于初始化一个新的 Git 仓库。执行该命令后,Git 会在当前目录创建一个 .git 子目录,这是 Git 用来存储所有版本控制信息的地方。使用方法如下:(1)打开终端或命令行。(2)导航到你想要初始化 Git 仓库的目录。(3)运行 git init 命令。执行完git init后,当前目录将成为一个新的 Git 仓库,可以开始添加文件并提交版本。

2025-01-09 21:07:13 544

原创 LeetCode 刷题笔记

std::gcd是C++17引入的一个函数,用于计算两个整数的最大公因数。位于头文件中。计算一组数的最大公因数。

2024-12-18 23:49:08 351

原创 GPU 计算 CMPS224 2021 学习笔记 02

可以使用上述函数API来同步CPU和GPU之间的操作,CPU调用cudaDeviceSynchronize()后,会等待GPU上的所有核函数执行完成后才会执行下面的程序。GPU上核函数的调用是异步的,GPU上的核函数启动后,立即返回,CPU会继续执行下面的程序,不会等待核函数执行完成。CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。(4)将计算结果从GPU复制到CPU上。(2)将CPU上的数据复制到GPU上。(3)在GPU上对数据进行计算操作。(1)分配GPU内存。(5)释放GPU内存。

2024-09-08 09:22:03 512 1

原创 kuiperInfer学习笔记

kuiperInfer使用的模型格式是PNNX(PyTorch Neural Network Exchange)PNNX由图结构(Graph)、运算符(Operator)和操作数(Operand)这三种结构组成。

2024-09-02 16:14:59 410

空空如也

空空如也

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

TA关注的人

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