<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[拥抱新技术，终身学习]]></title><description><![CDATA[我的成长之路]]></description><link>https://blog.csdn.net/eagle51</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; eagle51]]></copyright><item><title><![CDATA[深度学习算子CUDA优化实战：从GEMM到Transformer—Week4学习总结]]></title><link>https://blog.csdn.net/eagle51/article/details/157581999</link><guid>https://blog.csdn.net/eagle51/article/details/157581999</guid><author>eagle51</author><pubDate>Sat, 31 Jan 2026 13:57:01 +0800</pubDate><description><![CDATA[本文系统介绍了深度学习核心算子（GEMM、Softmax、LayerNorm）的CUDA优化技术。首先通过逐步优化GEMM实现，从naive版本到shared memory优化再到寄存器分块，性能提升10倍达到cuBLAS水平。针对Softmax算子，提出数值稳定性的优化方案，采用减最大值技巧避免溢出。最后将这些优化技术集成到Transformer Layer中，实现端到端性能提升。文章通过具体代码示例和性能对比数据，展示了深度学习算子优化的关键技术与实践路径。]]></description><category></category></item><item><title><![CDATA[CUDA高级优化实战：Stream、特殊内存与卷积优化—Week3学习总结]]></title><link>https://blog.csdn.net/eagle51/article/details/157295259</link><guid>https://blog.csdn.net/eagle51/article/details/157295259</guid><author>eagle51</author><pubDate>Fri, 23 Jan 2026 16:57:48 +0800</pubDate><description><![CDATA[摘要 本文总结了CUDA高级优化实战第三周的学习内容，重点探讨了Stream并发、特殊内存优化和2D卷积性能提升。通过Stream实现数据传输与计算的并行处理，实测性能提升1.79倍。深入研究了Constant Memory的广播特性和Texture Memory的硬件级2D访问优化，在图像卷积场景下Texture Memory使带宽利用率提升至89%。最后通过2D卷积案例综合应用多种优化技术，实现3.6倍性能提升，验证了CUDA优化需要系统化思维。文章提供了详细的代码示例和性能对比数据，对CUDA学习者具]]></description><category></category></item><item><title><![CDATA[CUDA内存优化入门：从Naive到Tiled矩阵乘法—Week2学习总结]]></title><link>https://blog.csdn.net/eagle51/article/details/157063342</link><guid>https://blog.csdn.net/eagle51/article/details/157063342</guid><author>eagle51</author><pubDate>Sat, 17 Jan 2026 14:22:34 +0800</pubDate><description><![CDATA[Tiling（分块）是一种经典的优化技术，核心思想是：将大矩阵分成小块（tiles/瓦片），每次只处理一个小块。原始大矩阵（难以放入Shared Memory）:│ ││ 完整的1024×1024 ││ 矩阵 ││ │Tiling后（每个小块可以放入Shared Memory）:│T11│T12│T13│T14│T15│T16│ ← 每个Tile是16×16策略：每次将一个Tile加载到Shared Memory中处理！]]></description><category></category></item><item><title><![CDATA[CUDA入门：从Hello World到矩阵运算 - Week 1学习总结]]></title><link>https://blog.csdn.net/eagle51/article/details/156797511</link><guid>https://blog.csdn.net/eagle51/article/details/156797511</guid><author>eagle51</author><pubDate>Sat, 10 Jan 2026 15:01:52 +0800</pubDate><description><![CDATA[本文重点介绍了CUDA编程的入门实践。作者阐述了学习CUDA的必要性，包括其在AI推理优化中的核心地位。文章详细展示了环境搭建过程，包括CUDA Toolkit安装和VS2022配置，并通过&quot;Hello World&quot;程序验证环境。核心概念部分讲解了Grid/Block/Thread层级关系和内存管理机制。实战环节实现了向量加法和矩阵运算的GPU并行版本，相比CPU串行版本获得了显著加速。该学习路径为后续深度学习框架奠定了基础。]]></description><category></category></item><item><title><![CDATA[Kolakoski序列的生成——搜狐2018研发类笔试编程题]]></title><link>https://blog.csdn.net/eagle51/article/details/77678529</link><guid>https://blog.csdn.net/eagle51/article/details/77678529</guid><author>eagle51</author><pubDate>Tue, 29 Aug 2017 15:21:24 +0800</pubDate><description><![CDATA[输出描述：

代码如下，菜鸟一枚，欢迎批评指正：
#include 
#include 
#include 

using namespace std;
//维护一个count数组，存放每一组输出元素的个数
//由于count[i]里存放的是第i组序列所输出的数的个数，所以遍历count的每一个元素，
//就能找到第i+1组序列需要输出的数的个数所在count数组中的位置,而根据count的]]></description><category></category></item><item><title><![CDATA[2018阿里秋招C/C++研发编程题——字符串处理]]></title><link>https://blog.csdn.net/eagle51/article/details/77592434</link><guid>https://blog.csdn.net/eagle51/article/details/77592434</guid><author>eagle51</author><pubDate>Sat, 26 Aug 2017 08:49:23 +0800</pubDate><description><![CDATA[给定一个字符串S和有效单词的字典D，请确定可以插入到S中的最小空格数，使得最终的字符串完全由D中的有效单词组成，并输出解。

如果没有解则应该输出n/a

例如

输入
S = "ilikealibaba"
D = ["i", "like", "ali", "liba", "baba", "alibaba"]
Example Output:

输出
"i like alib]]></description><category></category></item><item><title><![CDATA[网易2018内推编程题——操作序列]]></title><link>https://blog.csdn.net/eagle51/article/details/77142308</link><guid>https://blog.csdn.net/eagle51/article/details/77142308</guid><author>eagle51</author><pubDate>Sun, 13 Aug 2017 14:55:41 +0800</pubDate><description><![CDATA[时间限制：2秒

空间限制：32768K


小易有一个长度为n的整数序列,a_1,...,a_n。然后考虑在一个空序列b上进行n次以下操作:
1、将a_i放入b序列的末尾
2、逆置b序列
小易需要你计算输出操作n次之后的b序列。 


输入描述:
输入包括两行,第一行包括一个整数n(2 ≤ n ≤ 2*10^5),即序列的长度。
第二行包括n个整数a_i(1 ≤ a_i ]]></description><category></category></item><item><title><![CDATA[网易研发工程师编程题——炮台攻击]]></title><link>https://blog.csdn.net/eagle51/article/details/77113180</link><guid>https://blog.csdn.net/eagle51/article/details/77113180</guid><author>eagle51</author><pubDate>Sat, 12 Aug 2017 11:24:28 +0800</pubDate><description><![CDATA[兰博教训提莫之后，然后和提莫讨论起约德尔人，谈起约德尔人，自然少不了一个人，那就是黑默丁格——约德尔人历史上最伟大的科学家，提莫说，黑默丁格最近在思考一个问题：黑默丁格有三个炮台，炮台能攻击到距离它R的敌人（两点之间的距离为两点连续的距离，例如，（3,0），（0,4）之间的距离是5），如果一个炮台能攻击到敌人，那么就会对敌人造成1x的伤害，黑默丁格将三个炮台放在N*M的点上，并且给出敌人的坐标，问]]></description><category></category></item><item><title><![CDATA[网易研发工程师编程题——小易的升级之路]]></title><link>https://blog.csdn.net/eagle51/article/details/77110629</link><guid>https://blog.csdn.net/eagle51/article/details/77110629</guid><author>eagle51</author><pubDate>Sat, 12 Aug 2017 10:27:34 +0800</pubDate><description><![CDATA[小易经常沉迷于网络游戏，有一次，他在玩一个打怪升级的游戏，他的角色的初始能力值为a。在接下来的一段时间内，他将会依次遇见n个怪物，每个怪物的防御力为b1,b2,b3...bn.如果遇到的怪物防御力bi小于等于小易的当前能力值c,那么他就能轻松打败怪物，并且使得自己的能力值增加bi；如果bi大于c，那么他也能打败怪物，但他的能力值只能增加bi与c最大公约数，那么问题来了，在一系列的锻炼后，小易的最终]]></description><category></category></item><item><title><![CDATA[strcpy函数的实现，考虑内存重叠情况]]></title><link>https://blog.csdn.net/eagle51/article/details/77106496</link><guid>https://blog.csdn.net/eagle51/article/details/77106496</guid><author>eagle51</author><pubDate>Sat, 12 Aug 2017 09:24:36 +0800</pubDate><description><![CDATA[这里贴出strcpy函数的简单实现，其中考虑内存重叠情况的是函数是mystrcpy2，但是单传递内存重叠的实参的时候运行总是出错，网上的代码基本都是这样实现的，不知道别人运行的时候有没有出错
#include 
#include 
#include 
#include 

//这种实现如果遇到内存重叠就会出错，如mystrcpy(Src+1,Src);'\0'由于被覆盖导致出现死循环
char ]]></description><category></category></item><item><title><![CDATA[希尔排序的C语言实现]]></title><link>https://blog.csdn.net/eagle51/article/details/77066105</link><guid>https://blog.csdn.net/eagle51/article/details/77066105</guid><author>eagle51</author><pubDate>Thu, 10 Aug 2017 17:31:13 +0800</pubDate><description><![CDATA[希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序，是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL．Shell于1959年提出而得名。
希尔排序是把记录按下标的一定增量分组，对每组使用直接插入排序算法排序；随着增量逐渐减少，每组包含的关键词越来越多，当增量减至1时，整个文件恰被分成一组，算法便终止。
先取一个小于n的整数d1作为第一个增量，把文]]></description><category></category></item><item><title><![CDATA[快速排序算法的C语言实现]]></title><link>https://blog.csdn.net/eagle51/article/details/77053648</link><guid>https://blog.csdn.net/eagle51/article/details/77053648</guid><author>eagle51</author><pubDate>Thu, 10 Aug 2017 15:34:55 +0800</pubDate><description><![CDATA[快速排序算法的解析看这篇博客，是我见过的最好的了：http://blog.csdn.net/morewindows/article/details/6684558
#include
#include

void quickSort(int arr[], int low, int high)
{
	int i, j, key;
	if (low < high)
	{
		i = low;
		j]]></description><category></category></item><item><title><![CDATA[栈的出栈、入栈、遍历、清空操作]]></title><link>https://blog.csdn.net/eagle51/article/details/76910459</link><guid>https://blog.csdn.net/eagle51/article/details/76910459</guid><author>eagle51</author><pubDate>Tue, 08 Aug 2017 15:28:16 +0800</pubDate><description><![CDATA[#include 
#include 

typedef struct node {
	int data;
	struct node *next;
}Node ,*PNode;

typedef struct stack {
	PNode pTop;
	PNode pBot;
}Stack, *PStack;

void init(PStack pS)
{
	pS->pTop = pS->pBot]]></description><category></category></item><item><title><![CDATA[队列的入队、出队操作]]></title><link>https://blog.csdn.net/eagle51/article/details/76899571</link><guid>https://blog.csdn.net/eagle51/article/details/76899571</guid><author>eagle51</author><pubDate>Tue, 08 Aug 2017 13:38:00 +0800</pubDate><description><![CDATA[队列的常用操作就是入队和出队，这里入队用函数insert实现，出队用函数del实现，print函数实现队列的遍历做操：
#include 
#include 
#include 
#include 

using namespace std;
typedef struct node {
	int data;
	struct node *next;
}Node, *PNode;

typedef ]]></description><category></category></item><item><title><![CDATA[循环链表解决约瑟夫环问题]]></title><link>https://blog.csdn.net/eagle51/article/details/76348123</link><guid>https://blog.csdn.net/eagle51/article/details/76348123</guid><author>eagle51</author><pubDate>Sat, 29 Jul 2017 18:19:34 +0800</pubDate><description><![CDATA[约瑟夫环问题，已知n个人，从编号为k的人开始报数，数到m的那个人出列；他的下一个又从1开始报数， 数到m的那个人又出列，依此重复，直到所有的人出列。思路如下：
(1)建立一个具有n个结点、无头结点的循环链表。
(2)确定第一个报数人的位置
(3)不断地从链表中删除结点，直到链表为空。
typedef struct node {
	int num;
	struct node *next;
}]]></description><category></category></item><item><title><![CDATA[双链表的创建、遍历、测长、插入、删除、销毁]]></title><link>https://blog.csdn.net/eagle51/article/details/76269818</link><guid>https://blog.csdn.net/eagle51/article/details/76269818</guid><author>eagle51</author><pubDate>Fri, 28 Jul 2017 17:10:47 +0800</pubDate><description><![CDATA[今天把双链表复习了一遍，双链表主要是插入和删除的 操作，两个操作的示意图如下
                  

                                           链表的插入]]></description><category></category></item><item><title><![CDATA[单链表的创建、遍历、测长、插入、删除、访问、排序、逆序]]></title><link>https://blog.csdn.net/eagle51/article/details/76190822</link><guid>https://blog.csdn.net/eagle51/article/details/76190822</guid><author>eagle51</author><pubDate>Thu, 27 Jul 2017 15:03:39 +0800</pubDate><description><![CDATA[马上要找工作了，最近把数据结构复习了一下，从单链表开始，一点一点巩固。解析的内容太长就省了，直接贴出代码，需要说明的一点是，下面创建的单链表以及相关操作都是带头结点的。
typedef struct node {
	int data;
	struct node *next;
}Node,*PNode;

PNode createList(int n)
{
	int value;
	PNode p]]></description><category></category></item><item><title><![CDATA[Win10安装PostgreSQL数据库遇到的问题总结]]></title><link>https://blog.csdn.net/eagle51/article/details/75208054</link><guid>https://blog.csdn.net/eagle51/article/details/75208054</guid><author>eagle51</author><pubDate>Sun, 16 Jul 2017 16:55:53 +0800</pubDate><description><![CDATA[首先在PostgreSQL官网下载安装包下载。
首次安装的时候最好不要安装到默认目录，我安装到了C:\PostgreSQL目录下，选择语言locale的时候应该选择"C"，否则有可能出现“The database cluster initialisation
 failed.”错误。如果都按上面说的做还出现这个错误，就先把PostgreSQL卸载，先把想要安装的目录，比如我的是C:\Postg]]></description><category></category></item><item><title><![CDATA[ubuntu14.04配置apache可以执行perlCGI脚本]]></title><link>https://blog.csdn.net/eagle51/article/details/56015020</link><guid>https://blog.csdn.net/eagle51/article/details/56015020</guid><author>eagle51</author><pubDate>Mon, 20 Feb 2017 16:12:54 +0800</pubDate><description><![CDATA[在自己的ubuntu14.04系统上安装了apache，修改了主页目录之后，打开本地主页，无论如何都不识别perl脚本，脚本的路径也没问题，网上找了很多种方法，要么让修改/etc/apache/sites-available/default-ssl.conf2，要么让修改mods-available里的文件，apache2.conf也都设置过了都不行，最后忽然看到/etc/apache/下有个co]]></description><category></category></item><item><title><![CDATA[linux被信号处理函数中断的系统调用和库函数是否会自动重启]]></title><link>https://blog.csdn.net/eagle51/article/details/53212624</link><guid>https://blog.csdn.net/eagle51/article/details/53212624</guid><author>eagle51</author><pubDate>Fri, 18 Nov 2016 09:27:49 +0800</pubDate><description><![CDATA[如果在系统调用或者库函数被阻塞的时候调用了信号处理函数，那么库函数和系统调用将会表现两种情况中的一种：
        1、在信号处理函数返回的时候自动重启。
        2、调用失败，errno被设置为EINTR。
        具体表现为那一种取决于调用的接口和信号处理函数在建立的时候是否使用SA_RESTART标志。
        （1）如果一个被阻塞的调用是下面的接口中的一]]></description><category></category></item></channel></rss>