<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Laydya的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Laydya</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Laydya]]></copyright><item><title><![CDATA[并发内核执行]]></title><link>https://blog.youkuaiyun.com/Laydya/article/details/163531580</link><guid>https://blog.youkuaiyun.com/Laydya/article/details/163531580</guid><author>Laydya</author><pubDate>Mon, 10 Aug 2026 20:47:44 +0800</pubDate><description><![CDATA[本文摘要： 本文探讨了CUDA并发内核的调度与性能分析。首先介绍了GPU中SFU（特殊函数单元）的作用及其在Ada架构中的并行处理能力。通过实现包含tan函数的核函数，演示了多流并发执行，并使用cudaEvent测量耗时。重点讲解了Nsys性能分析工具的使用方法，包括权限配置、版本匹配和可视化分析技巧。此外，对比了OpenMP与pthread的并行编程特点，并展示了如何用OpenMP简化多线程任务分发。最后讨论了通过环境变量调整Hyper-Q连接数以优化并发，以及使用事件实现流间同步的技术。实验部分提供了代]]></description><category></category></item><item><title><![CDATA[流和事件概述]]></title><link>https://blog.youkuaiyun.com/Laydya/article/details/163482670</link><guid>https://blog.youkuaiyun.com/Laydya/article/details/163482670</guid><author>Laydya</author><pubDate>Wed, 05 Aug 2026 23:31:27 +0800</pubDate><description><![CDATA[本文介绍了CUDA编程中流(Stream)和事件(Event)的概念及其应用。主要内容包括：1. 流的概念：作为独立任务队列管理异步操作，支持主机计算、数据传输和设备计算的并发执行。2. 流操作类型：异步数据传输(cudaMemcpyAsync)、核函数启动和其他主机发起的设备命令。3. 流优先级：通过cudaStreamCreateWithPriority创建不同优先级的流，影响内核执行顺序。4. 事件的作用：作为流中的标记点，用于计时和跨流同步，支持构建复杂依赖关系。5. 流同步机制：包括阻塞流与非阻塞]]></description><category></category></item><item><title><![CDATA[warp shuffle指令]]></title><link>https://blog.youkuaiyun.com/Laydya/article/details/163480670</link><guid>https://blog.youkuaiyun.com/Laydya/article/details/163480670</guid><author>Laydya</author><pubDate>Tue, 04 Aug 2026 22:20:31 +0800</pubDate><description><![CDATA[摘要：本文介绍了CUDA中的线程束洗牌（Warp Shuffle）指令，这是一种高效的线程间通信机制。相较于通过共享内存或全局内存交换数据，Warp Shuffle允许线程直接访问同一线程束内其他线程的寄存器，从而显著提高性能。文章详细解析了四种基本洗牌指令形式：__shfl_sync（广播）、__shfl_up_sync（上移）、__shfl_down_sync（下移）和__shfl_xor_sync（异或交换），并通过代码示例展示了其具体应用场景，如数据广播、偏移移动、蝴蝶交换和归约操作。特别强调了Wa]]></description><category></category></item><item><title><![CDATA[常量内存和只读缓存]]></title><link>https://blog.youkuaiyun.com/Laydya/article/details/163448901</link><guid>https://blog.youkuaiyun.com/Laydya/article/details/163448901</guid><author>Laydya</author><pubDate>Mon, 03 Aug 2026 23:20:14 +0800</pubDate><description><![CDATA[本文对比了GPU中的常量内存与只读缓存的特性与使用场景。常量内存（constant）位于片外DRAM，具有64KB容量，通过cudaMemcpyToSymbol初始化，其常量缓存支持单周期广播，适合全warp读取同一地址的小数据场景（如卷积核）。只读缓存是L1缓存的一种优化模式，通过__ldg()或const __restrict__触发，不限制数据量，能防止频繁数据覆盖，适合大规模只读数据（如查找表）。实验显示，两者性能接近，但只读缓存波动较大。常量内存适合统一访问的小数据，只读缓存则适合分散访问的大数据]]></description><category></category></item><item><title><![CDATA[减少全局内存的访问]]></title><link>https://blog.youkuaiyun.com/Laydya/article/details/163419009</link><guid>https://blog.youkuaiyun.com/Laydya/article/details/163419009</guid><author>Laydya</author><pubDate>Mon, 03 Aug 2026 18:19:21 +0800</pubDate><description><![CDATA[本文摘要：本文对比了CUDA中全局显存与共享内存在归约和转置操作中的性能差异。在归约操作中，全局显存版本存在访存效率低和占用率不足的问题，通过使用共享内存和循环展开优化，性能提升显著。转置操作部分显示，即使存在bank冲突，共享内存版本仍比全局显存高效，而通过padding和索引交换进一步优化后性能更佳。实验表明，合理配置块大小（如16×16）能有效提高占用率，但实际性能受硬件环境和噪声影响，需多次测试验证。优化关键在于平衡计算强度、访存效率和线程块配置。]]></description><category></category></item><item><title><![CDATA[共享内存概述]]></title><link>https://blog.youkuaiyun.com/Laydya/article/details/163313391</link><guid>https://blog.youkuaiyun.com/Laydya/article/details/163313391</guid><author>Laydya</author><pubDate>Fri, 31 Jul 2026 19:10:15 +0800</pubDate><description><![CDATA[│ [寄存器文件] 256 KB (独立) ││ ││ [L1 / 共享内存] 128 KB (共享，可配置划分) ││ │ └── (内部划分：共享内存 + L1 数据缓存) ││ │ └── **L1 数据缓存同时承担以下角色：** ││ │ 1. 普通 L1 缓存 (全局内存、局部内存的读写) ││ │ 2. 纹理缓存 (纹理请求的缓存，逻辑通路) ││ │ 3. 只读缓存 (通过 __ldg() 触发的只读缓存通路) ││ 4. 常量缓存 ││ │。]]></description><category></category></item><item><title><![CDATA[核函数可达到的带宽]]></title><link>https://blog.youkuaiyun.com/Laydya/article/details/163143263</link><guid>https://blog.youkuaiyun.com/Laydya/article/details/163143263</guid><author>Laydya</author><pubDate>Tue, 28 Jul 2026 21:52:55 +0800</pubDate><description><![CDATA[本文深入探讨了CUDA核函数优化中的带宽利用问题，重点分析了矩阵转置操作的性能优化策略。文章首先介绍了GDDR6显存的工作原理，包括其物理结构、地址交织和bank访问机制。然后通过矩阵转置案例，比较了行读取与列读取两种方法的性能差异，发现写操作的合并比读操作的合并更为关键。进一步提出了对角转置优化方法，通过调整线程块与数据块的映射关系来分散显存访问到不同channel，从而提高并行性。实验结果显示，在RTX 4060显卡上，行读列写的组合方式性能最佳，比最差情况快约60%。文章最后指出，优化核心在于提高显存]]></description><category></category></item><item><title><![CDATA[内存访问模式]]></title><link>https://blog.youkuaiyun.com/Laydya/article/details/163054988</link><guid>https://blog.youkuaiyun.com/Laydya/article/details/163054988</guid><author>Laydya</author><pubDate>Thu, 23 Jul 2026 21:47:04 +0800</pubDate><description><![CDATA[本文探讨了CUDA编程中全局内存访问的优化策略。通过分析GPU内存架构和访问机制，重点阐述了两种关键优化技术：对齐访问和合并访问。文章详细解释了为什么256字节对齐是显存访问的基础保证，并展示了如何通过线程束的组织方式实现高效合并访问。 实验部分对比了结构体数组(AoS)和数组结构体(SoA)两种数据布局的性能差异，结果显示SoA布局因更好的内存连续性可获得约1.5-1.8倍的性能提升。文章还深入分析了现代GPU架构中的缓存机制，包括L1/L2缓存的工作流程和写分配策略的优化考量。 最后强调在实际编程中应根]]></description><category></category></item><item><title><![CDATA[CUDA内存管理的终极秘密]]></title><link>https://blog.youkuaiyun.com/Laydya/article/details/162628563</link><guid>https://blog.youkuaiyun.com/Laydya/article/details/162628563</guid><author>Laydya</author><pubDate>Thu, 09 Jul 2026 18:44:27 +0800</pubDate><description><![CDATA[本文探讨了CUDA中的内存管理技术，包括手动内存分配、固定内存、零拷贝内存、统一虚拟寻址(UVA)和统一内存(UM)。CUDA采用手动内存管理而非自动管理，以提供更优的性能控制。固定内存通过锁定物理页提升DMA传输效率；零拷贝内存允许GPU直接访问主机内存；UVA实现CPU/GPU地址空间统一；UM在UVA基础上实现数据自动迁移。文章通过实验对比不同技术的性能特点，并分析了各自的适用场景：固定内存适合频繁大数据传输，零拷贝内存适合随机访问，UM适合超大数据集。开发者需根据数据规模、访问模式和硬件限制选择合适]]></description><category></category></item><item><title><![CDATA[CUDA内存模型详讲]]></title><link>https://blog.youkuaiyun.com/Laydya/article/details/162274281</link><guid>https://blog.youkuaiyun.com/Laydya/article/details/162274281</guid><author>Laydya</author><pubDate>Sat, 27 Jun 2026 17:12:37 +0800</pubDate><description><![CDATA[本文深入探讨了CUDA编程中的内存模型及其优化策略。文章首先强调了内存带宽对GPU性能的关键影响，指出即使GPU算力强大，若数据供给不足也会成为性能瓶颈。随后详细分析了CUDA内存层次结构的特点，包括寄存器、共享内存、常量内存、纹理内存和全局内存等不同存储层级的特性与应用场景。 重点介绍了共享内存的bank conflict问题及解决方案，通过实验对比了padding优化前后性能差异。文章还解析了常量内存的单周期广播机制和纹理内存的专用缓存特性，强调根据不同访问模式选择合适内存类型的重要性。最后总结了各类内]]></description><category></category></item><item><title><![CDATA[GPU动态并行：父子网格的内存共享与同步]]></title><link>https://blog.youkuaiyun.com/Laydya/article/details/162240307</link><guid>https://blog.youkuaiyun.com/Laydya/article/details/162240307</guid><author>Laydya</author><pubDate>Sat, 27 Jun 2026 17:11:51 +0800</pubDate><description><![CDATA[本文介绍了CUDA动态并行技术，主要内容包括： 动态并行概念：允许GPU核函数内部启动新核函数，实现递归调用，形成父子网格关系 执行模型：父网格需等待所有子网格完成才能结束，存在隐式同步机制 示例程序：展示递归调用的&quot;helloworld&quot;实现，包含网格配置和多层级调用 内存规则：父子网格共享全局内存和常量内存，但局部内存独立，存在弱一致性特点 编译要求：需要指定计算能力3.5+，链接设备运行时库，生成可重定位设备代码 动态并行扩展了GPU编程能力，支持更灵活的并行模式，但需要注意同步和]]></description><category></category></item><item><title><![CDATA[GPU性能优化：展开归约压榨最后一滴性能]]></title><link>https://blog.youkuaiyun.com/Laydya/article/details/162177069</link><guid>https://blog.youkuaiyun.com/Laydya/article/details/162177069</guid><author>Laydya</author><pubDate>Tue, 23 Jun 2026 17:26:58 +0800</pubDate><description><![CDATA[本文探讨了如何通过循环展开和减少分支指令来优化GPU归约操作的性能。核心思路包括：1）通过预归约减少block数量，降低同步开销；2）使用循环展开技术减少循环控制指令；3）针对最后64个数据块采用无分支的完全展开策略。实验数据表明，展开策略能使性能提升近2倍，其中reduceUnrollWarp8版本将同步等待时间占比降至11.33%。文章详细分析了线程束分化、访存合并和同步机制对性能的影响，并比较了不同展开策略的优化效果。最终提出的完全展开版本通过编译期优化消除了循环控制指令，进一步提升了执行效率。这些优]]></description><category></category></item><item><title><![CDATA[divergence优化和“warp级并行掩盖延迟的能力“权衡]]></title><link>https://blog.youkuaiyun.com/Laydya/article/details/162061650</link><guid>https://blog.youkuaiyun.com/Laydya/article/details/162061650</guid><author>Laydya</author><pubDate>Tue, 23 Jun 2026 17:13:05 +0800</pubDate><description><![CDATA[本文探讨了CUDA并行归约算法的优化策略。首先分析了朴素归约的两个主要瓶颈：线程束分化和访存效率问题，通过相邻分配和交错配对两种方式分别优化。实验发现，相邻分配优化（reduceNeighboredLess）能显著减少线程束分化（从28.4%降至0.74%），但会恶化访存合并效果（sector/request从2.67升至14.01）；交错配对优化（reduceInterLeaved）则能同时保持较低的分化率和良好的访存合并（sector/request为3.58）。针对不同数据规模（1&lt;&lt;24]]></description><category></category></item><item><title><![CDATA[并行性的表现：理论和实际是有差别的]]></title><link>https://blog.youkuaiyun.com/Laydya/article/details/162007373</link><guid>https://blog.youkuaiyun.com/Laydya/article/details/162007373</guid><author>Laydya</author><pubDate>Wed, 17 Jun 2026 17:30:00 +0800</pubDate><description><![CDATA[通过实验分析，加深印象，直接实操发现理论和实际是有差异的]]></description><category></category></item><item><title><![CDATA[线程束的本质]]></title><link>https://blog.youkuaiyun.com/Laydya/article/details/161948313</link><guid>https://blog.youkuaiyun.com/Laydya/article/details/161948313</guid><author>Laydya</author><pubDate>Wed, 17 Jun 2026 11:30:00 +0800</pubDate><description><![CDATA[如果学过计组的人可以很好的理解。]]></description><category></category></item><item><title><![CDATA[CUDA执行模型深入刨析]]></title><link>https://blog.youkuaiyun.com/Laydya/article/details/161930347</link><guid>https://blog.youkuaiyun.com/Laydya/article/details/161930347</guid><author>Laydya</author><pubDate>Fri, 12 Jun 2026 21:36:23 +0800</pubDate><description><![CDATA[本文大致把整个cuda的执行模型框架进行梳理，并且讲了两种最基础的架构，如有哪点讲错欢迎大家补充]]></description><category></category></item><item><title><![CDATA[如何组织一个并行程序]]></title><link>https://blog.youkuaiyun.com/Laydya/article/details/161900048</link><guid>https://blog.youkuaiyun.com/Laydya/article/details/161900048</guid><author>Laydya</author><pubDate>Fri, 12 Jun 2026 19:45:00 +0800</pubDate><description><![CDATA[本文摘要： 文章系统介绍了CUDA编程中线程索引的建立与并行计算优化方法。首先解释了如何通过块和线程的全局/局部坐标计算唯一索引，实现二维矩阵加法的并行处理，并对比不同线程组织模式对性能的影响（最高可达25倍差异）。随后详细讲解了硬件信息查询方法，包括设备数量获取、属性查询（计算能力、显存、SM数量等）、PCIe总线信息获取及CUDA版本检测。最后介绍了nvidia-smi工具的使用技巧，为后续基于硬件特性的参数优化奠定基础。全文强调通过反复试验和硬件适配来寻找最佳配置方案。]]></description><category></category></item><item><title><![CDATA[CUDA程序效率如何计算以及工具如何使用]]></title><link>https://blog.youkuaiyun.com/Laydya/article/details/161895970</link><guid>https://blog.youkuaiyun.com/Laydya/article/details/161895970</guid><author>Laydya</author><pubDate>Thu, 11 Jun 2026 22:00:00 +0800</pubDate><description><![CDATA[本文介绍了在C语言和CUDA程序中测量代码效率的方法。对于C语言，可以使用clock()函数测量CPU运行时间。在CUDA中，需使用gettimeofday()测量真实时间，并配合cudaDeviceSynchronize()确保GPU任务完成。文章还展示了如何封装计时函数，并通过向量加法的例子比较不同grid/block配置的性能差异，指出数据布局和任务分配对性能的关键影响。最后介绍了NsightSystems和NsightCompute两款性能分析工具的使用场景和基本命令，强调了解硬件性能上限的重要性。]]></description><category></category></item><item><title><![CDATA[CUDA编程模型入门]]></title><link>https://blog.youkuaiyun.com/Laydya/article/details/161560861</link><guid>https://blog.youkuaiyun.com/Laydya/article/details/161560861</guid><author>Laydya</author><pubDate>Thu, 11 Jun 2026 18:00:00 +0800</pubDate><description><![CDATA[CUDA编程模型摘要 CUDA编程模型是连接应用程序与GPU硬件的桥梁，包含以下核心组件： 编程结构：区分主机(CPU)和设备(GPU)内存，通过PCIe总线通信，早期版本需显式内存拷贝。 内存管理： 使用cudaMalloc分配设备内存 cudaMemcpy实现主机与设备间数据传输 提供错误检查宏CHECK简化调试 线程模型： 层次化结构：网格(Grid)→线程块(Block)→线程(Thread) 内置变量：blockIdx、threadIdx定位线程，blockDim、gridDim获取维度 线程块内]]></description><category></category></item><item><title><![CDATA[探秘异构计算：CPU与GPU的完美协作]]></title><link>https://blog.youkuaiyun.com/Laydya/article/details/161545610</link><guid>https://blog.youkuaiyun.com/Laydya/article/details/161545610</guid><author>Laydya</author><pubDate>Sat, 30 May 2026 20:17:42 +0800</pubDate><description><![CDATA[本文摘要： 文章系统介绍了异构计算的核心概念与技术实现。首先区分了同构（单一架构）与异构（多架构协同）系统的差异，重点分析了CPU+GPU异构架构的优势：CPU负责逻辑控制，GPU处理并行计算。文章详细阐述了PCIe总线瓶颈问题及优化策略，并通过硬件结构对比说明CPU与GPU的设计哲学差异。随后介绍了NVIDIA计算平台分类和CUDA技术架构的三层体系（编程语言、库/中间件、应用层），并以Hello World示例演示了CUDA编程模型。最后强调高效GPU编程的关键在于理解内存层次和线程组织模型，而非语法本]]></description><category></category></item></channel></rss>