- 博客(10)
- 收藏
- 关注
原创 深入理解TCP三次握手过程及其关键作用
三次握手是TCP协议为了建立一个可靠的连接,双方通过交换三个控制报文段来确认彼此的发送和接收能力。TCP三次握手不仅是建立连接的简单步骤,更是确保通信可靠性的重要机制。理解三次握手有助于深入掌握TCP协议和网络通信的本质。
2025-05-28 18:03:11
400
原创 深入解析操作系统中的进程调度算法
时间片轮转算法在操作系统中广泛应用,兼顾公平性和响应性,是理解进程管理的重要基础。理解其实现细节有助于优化系统性能。本文由AI助手生成,确保内容准确且深入。
2025-05-26 23:23:08
235
原创 多线程安全的单例模式
使用静态函数变量是实现线程安全单例模式的简洁且有效的方式,特别是在 C++11 及更高版本中,它避免了使用锁定机制的复杂性,同时确保了初始化的线程安全性。因此,这种方法是一种推荐的实现方式。
2024-08-29 09:29:41
202
原创 va_list解决可变参数的传入问题
首先,我们需要定义一个简单的Tensor类,这个类包含张量的数据类型、设备类型以及各维度大小。public:private:我们需要编写一个函数,用于检查张量的维度、设备类型和数据类型是否符合要求。这个函数使用可变参数来传递期望的维度。++i) {
2024-08-25 18:47:42
205
原创 load_dataset能一次性导入train, val, test
再数据导入后,可以使用get来进行获得对于对应key的value,即对应的dataset,然后再使用map函数来进行后续的数据处理,不同的数据集,例如train,val用不同的 map中指定的函数来进行数据处理。
2024-08-17 20:07:32
362
转载 怎么XXX.sh后再debug torchrun 以及 deepspeed,如何追进transformers库里面
一般情况下,大家都是使用deepspeed、torchrun运行代码。参数都特别多,然后都是使用。🚨 上面的端口号都写一样。
2024-08-13 22:12:01
238
原创 cuda xy使用不当会导致速率下降
抛出一个问题,按照我写c++的习惯,一般是x对于的行号,y对于的列号,例如一个数组arr[x][y]这样去访问主存。一维数组映射则是arr[x*ny+y]这样,保证是y是连续读或写即可,数组一般是行主序。考虑到CUDA中的线程是按照warp(即线程束)的粒度来执行的。因此当线程块中的线程按照x维度连续访问内存(例如数组中的连续元素)时,这些访问可以被GPU硬件自动合并,从而使内存访问更加高效。所以这样访存arr[y*nx + x]更高效。上述代码在的,的,不能合并写操作,读是可以合并的。
2024-08-13 15:56:55
888
原创 placement new VS new
因为分离了内存分配和对象构造,你必须手动管理这两个过程。构造对象后,必须手动调用析构函数来销毁对象,然后手动释放内存。普通的new和delete是一气呵成的,则要求你分开进行这两步操作。
2024-08-12 16:00:10
275
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人