• 结构体继承小知识点

    C中结构体的继承 起因是一段代码,我没看懂,简化一下是这样:1234567891011121314151617181920212223242526272829303132#include <stdio.h>struct Base { int x; int y;};struct Derived { struct Base base; int z...
  • 内存屏障

    内存屏障(Memory Barrier,或称作 Memory Fence)是用于控制处理器在多线程(或多核)环境中对内存访问的顺序的机制。它是一种同步原语,用于确保特定的内存操作(例如,读取和写入)按照预期的顺序执行。内存屏障在并发编程中非常重要,尤其是在多核处理器上,因为不同处理器的缓存可能导致数据的“乱序”执行和“不可见”问题。 为什么需要内存屏障?在现代计算机系统中,处理器和内存之间通...
  • NCCL代码阅读-06

    RunWorkColl 书接上文。RunWorkBatch走到了这里:1RunWorkColl<Fn, T, RedOp, Algo, Proto>().run(tid, subtn, work) 其中work是一个ncclDevWorkColl 然后按照模版实例化的参数(这边以LL128为例),进入了这个函数:123456template<typename T, type...
  • NCCL代码阅读-nccltest篇

    本篇内容简介 我们以AllReduce操作为例,来说明整个nccl-test的调用栈 我们的场景是单机,两卡,两个进程(一个进程管一个卡) 我们输入的shell命令主要如下:12mpirun --allow-run-as-root -n 2 ./build/all_reduce_perf -f 2 -b 1m -e 1m -C 1mpirun --allow-run-as-root -n 2...
  • pragma weak初遇

    第一次见到pragma weak的位置 我在看nccl-test代码的时候,在src下面有很多集合操作的源代码,项目结构是这样的:1234567891011121314151617181920212223242526272829303132333435363738394041424344.├── build│ ├── all_gather_perf│ ├── all_reduce_p...
  • NCCL代码阅读-05

    AllReduce操作流程(从ncclLaunchKernel开始) 因为我的项目基本上只用allreduce,所以我就重点关注了一下这个操作 具体来说我用的是allreduce的u32的sum操作 ncclLaunchKernel前面的内容和《NCCL代码阅读-01》里面记录的sendrecv操作差不多,就不过多解释了 准备工作:launchKernel的前夜 这部分本来应该在01里面...
  • tmux使用

    需求 我想在服务器上运行一个程序,但是这个程序耗时很长,我想断掉我本地机器和服务器的连接然后关机睡觉,但是我希望服务器上继续在跑 解决方案:tmux tmux安装 因为我用的服务器是组里面的多人服务器,所以我不能用root权限直接安装,又懒得用源码,于是就用conda虚拟环境安装12conda install -c conda-forge tmuxtmux -V tmux使用创建一个新的...
  • NCCL代码阅读-04

    好的,再更具体一步,假设我们在 两个 GPU 做 AllReduce 时,数据的具体划分、传输,以及每一阶段的变化都会明确说明。 场景再具体化假设: 数据大小:16 个 float 元素(64 字节,总数据量很小,便于解释)。 **数据类型:float**,每个元素 4 字节。 2 个 GPU(nranks = 2),使用环形拓扑(Ring)。 1 个通道(nChannels = 1,即...
  • Makefile一个使用纠错记录

    今天写课设的Makefile,遇到了一个问题,记录一下。12345678910111213141516171819202122232425262728293031323334353637# 包含路径设置INCLUDES := -IC:/source/ignisos/inc -IC:/source/ignisos/inc -I./user/# 源文件和目标文件SRCS := user/sys...
  • NCCL代码阅读-03

    通信组创建和销毁(官网给的例子,解释看注释)一个进程,一个线程,多个设备 在这种单进程的场景下,可以使用ncclCommInitAll()1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859int main(int argc, ...
123