自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 定长滑动窗口题目

窗口是什么: 是k[1456.定长字串中元音的最大数目], 是k[643.子数组最大平均值], 是2*k+1[2090.半径为k的子数组的平均值, 注意窗口不一定默认是k], 是n-k, 有时候题目不一定直接给出固定窗口k, 要自己挖掘[1423. 可获得的最大点数][1423]题目要的是"拿走的最大点数 = 总牌-剩下的固定n-k个滑块的点数, 题目->找到n-k个最小点数"[2090]题目要的是"长度为n的数组",数组第i个位置的值是左右半径为k的长度为2*k+1的子串的平均值。

2026-08-31 20:23:48 202

原创 定长滑块题目

窗口是什么: 是k[1456.定长字串中元音的最大数目], 是k[643.子数组最大平均值], 是2*k+1[2090.半径为k的子数组的平均值, 注意窗口不一定默认是k], 是n-k, 有时候题目不一定直接给出固定窗口k, 要自己挖掘[1423. 可获得的最大点数][1423]题目要的是"拿走的最大点数 = 总牌-剩下的固定n-k个滑块的点数, 题目->找到n-k个最小点数"[2090]题目要的是"长度为n的数组",数组第i个位置的值是左右半径为k的长度为2*k+1的子串的平均值。

2026-08-26 14:55:05 157

原创 1423. 可获得的最大点数

解释:第一次行动,不管拿哪张牌,你的点数总是 1。输入:cardPoints = [1,79,80,1,1,1,200,1], k = 3。输入:cardPoints = [1,2,3,4,5,6,1], k = 3。输入:cardPoints = [9,7,7,9,7,7,9], k = 7。输入:cardPoints = [1,1000,1], k = 1。解释:你必须拿起所有卡牌,可以获得的点数为所有卡牌的点数之和。输入:cardPoints = [2,2,2], k = 2。

2026-08-26 14:44:57 187

原创 2841. 几乎唯一子数组的最大和

分别为 [5, 9, 9] ,[9, 9, 2] ,[9, 2, 4] ,[2, 4, 5] 和 [4, 5, 4]。解释:总共有 3 个长度为 k = 4 的几乎唯一子数组。分别为 [2, 6, 7, 3] ,[6, 7, 3, 1] 和 [7, 3, 1, 7]。输入:nums = [5,9,9,2,4,5,4], m = 1, k = 3。输入:nums = [1,2,1,2,1,2,1], m = 3, k = 3。输入:nums = [2,6,7,3,1,7], m = 3, k = 4。

2026-08-26 11:23:20 212

原创 字符串相乘

【代码】字符串相乘。

2026-07-02 16:19:01 229

原创 Warp shuffle函数

Warp shuffle 函数在 warp 内未退出的线程之间交换一个值,无需使用共享内存。

2026-06-16 21:55:30 238

原创 有关编译期常量的思考?

也就是说在code编译的时候编译器会把warpSize / 2算出是16从而替代表达式, 所以在运行的时候这个地方显示的是16, 不管你用warpSize / 2还是warpSize >> 2在编译器都会变成16, 所以无差别, 两者都不会产生任何运行时指令, 位运算比/快的条件只在"运行时变量"有效。问题发现: 已知位运算>>的速度要比/多, 所以一般 / 操作用 >> 来替代, 但是在下面的code中, 为什么warpSize / 2而不用warpSize >> 2呢?

2026-06-14 10:53:25 199

原创 SM内最多容纳多少线程?

(同一个架构下,数据中心卡(如 A100)通常给更大的 Block 上限(32),而消费级卡(如 RTX 3090)会被阉割到 16。(rtx306012GB版本是28个sm, sm内最多容纳16个block, 最多容纳48个wrap)代表在这代架构中的具体芯片规格,数字越大通常代表核心规模越大、定位越高端。mpere(安培架构),表明它属于 RTX 30 系列这一代。理论上容纳线程数量= 容纳warp数量 * 32。,通俗说就是这颗芯片的真实姓名。注: GA106 是。

2026-06-05 21:44:26 219

原创 NVIDIAGPU 架构中的不变常量(宏观 → 微观)

GPU 芯片的 SM 总数、GPC 总数、L2 缓存大小,都随架构和型号剧烈变化。旗舰卡可能有 128 个 SM,入门卡可能只有 20 个,这是 GPU 厂商划分产品线的主要手段。

2026-06-05 21:39:19 472

原创 thread block grid模型

【代码】thread block grid模型。

2026-04-10 21:28:40 49

原创 移动零问题(双指针)

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]输入: nums = [0]

2026-02-10 13:36:07 231

原创 hot15.三数之和(相向双指针)

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。

2026-02-09 17:34:42 202

原创 LCR 006. 两数之和 II - 输入有序数组

函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 0 开始计数 ,所以答案数组应当满足 0 <= answer[0] < answer[1] < numbers.length。给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target。假设数组中存在且只存在一对符合条件的数字,同时一个数字不能使用两次。LCR 006. 两数之和 II - 输入有序数组。

2026-02-07 22:57:31 198

原创 11. 盛最多水的容器

【代码】11. 盛最多水的容器。

2026-02-06 23:33:51 424

原创 接雨水【困难】

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

2026-02-05 23:09:53 165

原创 对比FP、FP16和BF16

对比FP、FP16和BF16。

2026-01-28 14:17:10 139

原创 hello CUDA

【代码】hello CUDA。

2025-11-23 09:31:15 536

原创 CUDA main函数编写流程

2025-11-23 09:30:29 270

原创 CUDA中的修饰符

CUDA修饰符

2025-11-22 19:11:08 273

原创 除余操作与位运算

使用位运算替代除法和取余操作,特别是当除数是 2 的幂次时。这种优化几乎没有任何代价,但能带来显著的性能提升。在实际编程中,应该养成使用位运算的习惯,特别是在线程索引计算、内存地址计算等高频操作中。在 CUDA 编程中,

2025-11-22 19:10:06 749

原创 规约问题完整核函数

【代码】规约问题完整核函数。

2025-06-04 16:53:22 213

原创 CUDA 归约求和(Reduction)算法

这段代码是CUDA并行编程中经典的‌‌的核心部分,用于高效累加数组元素。

2025-05-29 11:54:45 1777

原创 cuda atomicAdd函数讲解

是CUDA提供的原子操作函数,用于在‌。如需验证设备支持的数据类型,可通过。

2025-05-27 16:34:21 839

原创 测试GPU如何调度多个blocks到SM上执行(演示block scheduler)

/一个MS里能同时驻留的block数量是限制的, (Maxwell、pascal、volta:32、ampere:16)clock_t:CUDA的特殊计时器类型 用于存储从GPU启动开始计算的时钟周期数 64位宽(clock64()返回的值)//gettimeofday(&tp, NULL)是 Unix/Linux 系统中获取当前时间的系统调用函数。计算经过的时间:(t1-t0)/(CLOCK_RATE*1000.0f)// 每个GPU线程执行sleep(1.0),即"睡眠"1秒。

2025-05-24 23:47:15 791

原创 ‌LD/ST Unit 详解

‌:LD/ST 单元是 GPU 实现高效并行计算的“数据搬运工”,其设计与优化直接决定了 GPU 在复杂任务中的实际性能上限。

2025-05-23 13:07:20 819

原创 CPU里的“数学小能手”——ALU超详细通俗指南

‌ALU(算术逻辑单元)**‌ 是CPU的“核心计算器”,专门负责处理所有数学题(加减乘除)和逻辑判断题(比如“今天下雨了吗?举个栗子🌰:当你在手机计算器输入“1+1”时,就是ALU在幕后疯狂输出“2”——它就像藏在CPU里的数学课代表,专门负责解算术题!‌:早期的ALU不会做除法,现代ALU已经进化到能处理复杂运算了1。

2025-05-20 08:58:56 1867

原创 寄存器 vs 内存 vs 缓存 vs GPU共享内存 —— 计算机存储的“四重人格”大揭秘

做AI训练时,GPU线程们把数据切片丢进共享内存,集体疯狂并行计算。刷抖音时,缓存会把你看过的视频片段偷偷存起来,下次秒开不卡顿。打开Photoshop时,你的设计图就躺在内存里随时待命。时,寄存器的任务就是抱着。疯狂累加,绝不摸鱼。

2025-05-11 15:41:07 485

原创 核函数(Kernel function)

​ 主机代码 //一般将GPU运行后的数据回传给CPU主机, 还会进行对CPU GPU内存的释放工作。​ 主机代码 //一般对GPU进行配置以及数据处理的内容。​ 核函数调用 //进行并行加速数据处理。

2025-05-06 19:25:37 497

原创 cudaMemcpy函数说明

类比理解:就像快递员在不同仓库(CPU内存和GPU显存)之间搬运货物(数据)。

2025-05-06 12:19:12 1140

原创 cudaMalloc函数说明

【代码】cudaMalloc函数说明。

2025-05-05 20:43:19 573

原创 GPU性能加速的隐藏魔法:Dual-Issue Warp Schedule全解析

想象你是一个GPU的老板(比如NVIDIA老黄),手下有几万个"线程员工"要管理。直接让几万人同时开会?那得疯。于是你发明了"Warp"(线程束)——把32个线程打包成一个小组,像军训方阵一样统一指挥。,就是你这个老板给这些方阵排班表的技术:决定哪个方阵先干活,哪个去摸鱼等资源。传统GPU里,每个时钟周期只能给一个Warp发一条指令(Single-Issue),就像食堂阿姨每次只给一个学生打菜——效率全看队伍排得多整齐。但程序员们贪心啊,总想压榨GPU的每一滴性能,于是应运而生!

2025-05-05 20:39:50 987

原创 程序员必读!GPU Latency优化指南——让数据跑得比博尔特还快

举个例子:GPU核心明明能每秒处理万亿次计算,但如果等数据的时间比算数据还长,就像博尔特跑百米却花了90米等起跑令!优秀的程序员像F1赛车工程师:通过精细调校(代码优化)、战术设计(算法改进)和团队协作(硬件配合),让每一纳秒的延迟都成为超越对手的机会。如果把GPU比作一台超级跑车,**Latency(延迟)**就是它加速时遇到的空气阻力——虽然看不见,却能让你明明有1000匹马力的引擎,实际跑起来却像堵在早高峰。就像顶级魔术师,观众看到的只是绚丽的烟火,而看不到背后精准到毫秒的机关操控。

2025-05-04 22:23:44 650

原创 Warp调度器:藏在显卡里的时间管理大师

现代GPU中负责将线程分组(Warp)并动态调度指令执行的硬件单元。

2025-05-04 17:30:00 1022

原创 SM:显卡里的「霍格沃茨」,如何把数据变成魔法咒语?

它不追求单线程的智商(频率),而是靠人海战术(核心数量)和军事化管理(调度器)。所以下次当你的显卡呼呼作响时,记得对它说:“SM车间辛苦了,今晚给你清灰!附:SM冷知识老黄(黄仁勋)的核武器:SM架构每一代都在升级(比如从Volta到Ampere)。隐藏关卡:SM里甚至还有Tensor Core(AI专用加速器),但那是另一段故事了…

2025-05-04 10:38:54 1276

原创 并行计算三剑客:5分钟看懂SIMD、SIMT与MIMD差异

现代芯片正走向异构计算CPU核心:MIMD处理复杂逻辑GPU核心:SIMT加速并行计算NPU核心:SIMD优化AI推理理解这三种范式,你就能像搭积木一样设计出高性能系统!

2025-05-03 21:29:37 1015

原创 CUDA输出“hello world”

在我们学习任何一门编程语言的时候, 无疑当我们真正用其输出“hello world”的时候, 我们已经成功入门, 接下来要做的就是从入门到放弃了😆。

2025-05-03 13:13:30 347

原创 深入理解C++构造函数:从入门到实践

没有参数的构造函数当你没有定义任何构造函数时,编译器自动生成用于创建对象时不传递参数的情况public:// 成员初始化方法一: 函数体内初始化Smartphone() { // 默认构造函数// 默认存储容量cout << "手机已激活!" << endl;// 成员初始化方法二: 初始化列表// 默认构造函数使用初始化列表: storage(128), // 初始化列表语法brand("Unknown") // 成员变量直接初始化cout << "手机已激活!

2025-05-02 17:03:40 545

原创 CUDA从入门到放弃

CUDA简介

2025-05-01 11:13:00 364

原创 Visio高手速成!3秒解锁隐藏生产力

告别鼠标手!这些高频组合键让你绘图效率翻倍💪

2025-04-21 20:33:00 483

原创 Python学习之Seaborn

Matplotlib需要大量的代码创建细节,而seaborn可以说是高级封装形成的一个“快捷方式”,相比Matplotllib,seaborn代码更简洁,美观,但缺点是很多内容是固定的,定制化能力较差。如果说Matplotlib试图让简单的事情变得容易,让困难的事情成为可能,那么Seaborn试图让一组定义明确的复杂的事情变得简单.编码方式:Figure-Level & Axes-Level。

2025-04-19 19:00:00 242

空空如也

空空如也

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

TA关注的人

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