- 博客(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
原创 有关编译期常量的思考?
也就是说在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
原创 移动零问题(双指针)
给定一个数组 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
原创 除余操作与位运算
使用位运算替代除法和取余操作,特别是当除数是 2 的幂次时。这种优化几乎没有任何代价,但能带来显著的性能提升。在实际编程中,应该养成使用位运算的习惯,特别是在线程索引计算、内存地址计算等高频操作中。在 CUDA 编程中,
2025-11-22 19:10:06
749
原创 测试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
原创 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
原创 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
原创 Python学习之Seaborn
Matplotlib需要大量的代码创建细节,而seaborn可以说是高级封装形成的一个“快捷方式”,相比Matplotllib,seaborn代码更简洁,美观,但缺点是很多内容是固定的,定制化能力较差。如果说Matplotlib试图让简单的事情变得容易,让困难的事情成为可能,那么Seaborn试图让一组定义明确的复杂的事情变得简单.编码方式:Figure-Level & Axes-Level。
2025-04-19 19:00:00
242
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅