1.计算机基础知识
1.1 内存&缓存
1.1.1 缓存
1) What is a “cache-friendly” code?
3) 如何看一段代码对缓存的使用情况呢(思考)?
4) leading dimension
paper: http://changwanhong.com/publication/PLDI16.pdf
1.1.2 内存优化
1)TLB shootdown
time strace -qq -fefutex -c your_bin 检测 lock contention
mmap/ummap/madvice
4)内存优化
几个问题:
i) 内存碎片
ii) 多线程使用效率
iii) 各种内存分配策略的内存消耗,比如有的释放不及时可能导致内存消耗过大?
iv) 元数据本身对内存的消耗?
TCMalloc TCMalloc
a) 如何控制内存碎片
一次申请 n 个 page, 使得均分成 size-class 后内存随便的比例小于 12.5%
2)TCMalloc的三级缓存机制
ThreadCache, CentralCache, PageHeap
2. 性能优化
2.1. CPU 性能优化
1) 线程的亲和性(Thread Affinity)
Thread Affinity Interface (Linux* and Windows*)
2) MPI 分布式训练
Intel® MPI Library Developer Reference for Linux* OS (Beta)
Introduction to Groups and Communicators
Intel® MPI Library 2019 Over Libfabric*
3) CPU 频率调整
cpupower frequency-info 查看cpu的频率设置信息
cpupower frequency-set -g performance 将CPU频率设置为 performance 模式,这种模式下性能较高,但是比较耗电
powersave模式下CPU以低频运行,性能差但是省电。
s-tui python包查看频率信息。
4) GEMM优化
a. demo一步步演示GEMM优化
https://github.com/flame/how-to-optimize-gemm
b. Anatomy of High-Performance Matrix Multiplication
讲述矩阵分块的不同方式
https://www.cs.utexas.edu/~flame/pubs/GotoTOMS_revision.pdf
c. Anatomy of High-Performance Many-Threaded Matrix Multiplication
讲述如何运用多线程进行GEMM加速,哪些维度适合多线程?多线程对cache有什么影响?
https://www.cs.utexas.edu/users/flame/pubs/blis3_ipdps14.pdf
5) SIMD 优化
Improving performance with SIMD intrinsics in three use cases
6) 硬件信息查看
CPU all info: https://github.com/opcm/pcm
sudo dmidecode
eg: sudo dmidecode --type 17 可以查看memory 信息
ifconfig+ethtool 查看网卡带宽(ethtool/dmesghttps://www.cyberciti.biz/faq/howto-determine-ethernet-connection-speed/)
fi_info 查看支持哪些 FI_PROVIDER, e.g.psm3, sockets
查看cpu 频率:turbostat --interval 1 -c core_id_beg-core_end
查看IB(infinite bandwidth) 信息:ibv_devinfo 或者 rdma -d link
ibv_devices
查看运行时bw: ethbw
磁盘信息: lsblk -o NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,MODEL
2.2 性能分析工具
2.2.1 perf
2.2.2 valgrind
2.2.3 vtune
2.2.4 gperftools
conda install -c conda-forge gperftools ghostscrip graphviz libunwind
sudo yum install gv
3. pytorch
3.1 Tensor
2) Pytorch 分发机制
3)Pytorch 的多线程管理
a. forward & backward 分别使用两套线程。对于线程的拓扑分布,此时应该保证同一次计算的forward线程和backward线程在同个cpu核上计算,这样才能获得较好的性能。
4)pytorch distributed training
WRITING DISTRIBUTED APPLICATIONS WITH PYTORCH
这个文档介绍了 multinode 的基础,比如 scatter, gather, allreduce等等,对于入门很有帮助。
DISTRIBUTED COMMUNICATION PACKAGE - TORCH.DISTRIBUTED
这个文档则主要介绍 pytorch 提供的 multinode 通信接口,相当于是对上一个文档的 API 介绍
A Gentle Introduction to Multi GPU and Multi Node Distributed Training
model parallel vs data parallel
5) pytorch 框架学习教程
PyTorch – Internal Architecture Tour
6) 性能分析
torch.autograd.profiler.profile 是一个上下文管理器,可以帮助统计每个 function 的 C++ kernel的执行时间。如果某个C++kernel的时间没有统计到,你在C++kernel中使用 RECORD_FUNCTION宏来enable profile。 比如要统计is_contiguous函数的时间信息:RECORD_FUNCTION("is_contiguous", std::vector<c10::IValue>());
7) PyTorch TensorIterator
PyTorch TensorIterator Internals | Quansight Labs
https://github.com/pytorch/pytorch/wiki/How-to-use-TensorIterator
8) PyTorch Dispatcher
Registering a Dispatched Operator in C++ — PyTorch Tutorials 1.10.0+cu102 documentation
9) view transpose permute and reshape
10) PyTorch Basics: Understanding Autograd and Computation Graphs
4. 深度学习
4.1 基础理论
1)Backward and SGD
PyTorch 101, Part 1: Understanding Graphs, Automatic Differentiation and Autograd
5) Cross Entropy, KL Divergence, and Maximum Likelihood Estimation
Lei Mao's Log Book – Cross Entropy, KL Divergence, and Maximum Likelihood Estimation
7) 如果统计算子的计算量
CNN 模型所需的计算力(flops)和参数(parameters)数量是怎么计算的? - 知乎
https://github.com/Lyken17/pytorch-OpCounter/tree/master/thop
4.2 auto mix-presicion
4.2 seq2seq
1) CS224N(1.31)Translation, Seq2Seq, Attention
5. C++
1)虚表
Understandig Virtual Tables in C++ | Pablo Arias
2) CRTP
Curiously recurring template pattern (CRTP)
6. 工程实践
6.1 编译
1)如何编译出更小的可执行文件? 需要设置哪些编译选项?
lto 编译选项可以移除没用的函数,但是会增加编译时间,如下两个选项也可以达到移除的目的,但是每个函数都有一个secotion可能会引入额外的 memory overhead
通过symbol 的visibility 也可以控制:
linker - Limiting visibility of symbols when linking shared libraries - Stack Overflow
2) -ffast-math 极大提高浮点运算速度
3) GCC install
6.2 debug
1) core dump
The core dump file in Arch Linux | Nan Xiao's Blog
7, 书籍 & 课程
High_Performance_Computing_(Severance)
-ffunction-sections -Wl,--gc-sections