CUDA编程过程中的性能优化
1. 硬件结构及编程模型 硬件层次结构如下: 硬件层次结构模型为:GPU device -> SM 矩阵 -> SP 矩阵。一个SP处理器(即GPU Core)包含一个浮点处理单元(有些GPU还包含一个Tensor Core)。 软件/硬件层次结构对应关系: 由于有两层结构,CUDA runtime将数据作了两层划分:grid,block,分别对应SM 矩阵的调度...
1. 硬件结构及编程模型 硬件层次结构如下: 硬件层次结构模型为:GPU device -> SM 矩阵 -> SP 矩阵。一个SP处理器(即GPU Core)包含一个浮点处理单元(有些GPU还包含一个Tensor Core)。 软件/硬件层次结构对应关系: 由于有两层结构,CUDA runtime将数据作了两层划分:grid,block,分别对应SM 矩阵的调度...
主要概念: 引用的本质在C++内部实现是一个常指针。 左值引用,右值引用。右值引用限制了其只能接收右值,可以利用这个特性从而提供重载。 template 万能引用,引用折叠。 完美转发:std::forward 。 完美转发 std::forward 模板的万能引用只是提供了能够接收同时接收左值引用和右值引用的能力,但是引用类型的唯一作用就是限制了接收的类型,后续使...
1. epoll 与 select/poll 区别 select由于采用轮询的方式,即轮询所有文件描述符。现实情况中,并发活跃的连接数远小于总连接数(文件描述符列表),select的效率较低。 poll与select类似,也是采用轮询的方式,但是poll没有最大文件描列表长度述符限制(默认是FD_SETSIZE = 1024)。 例如,poll函数使用pollfd数组来查...
qemu&kvm学习笔记 qemu笔记 Qemu KVM(Kernel Virtual Machine)学习笔记
reference Memory Segmentation Cheet Sheets
1. 介绍 使用C++ 17的多态内存管理器(PMR),可以实现一个简单的内存池。根据选择(std::pmr::memory_resource),可以在内存不够的时候,向upstream申请内存。 标准内存资源列表: memory_resource派生类 效率 线程安全 内存 ...
1. overload 重载 同名函数,参数个数或类型不同; 相同作用域,即同一个类。 2. override 覆盖 不在一个作用域,即父类与子类; 子类函数与基类函数同名,参数个数和类型相同; 基类使用virtual关键字,子类使用override关键字。 例外的一个点是协变:基类返回基类指针,子类返回子类指针。此时也是override。 #inc...
1. 依赖于 NVIDIA Nvidia 显卡驱动(.run文件安装) CUDA Toolkit(.run文件安装) 安装Nvidia驱动(run文件) # 禁用 nouveau 开源驱动 cat > /etc/modprobe.d/blacklist-nouveau.conf <<EOF blacklist nouveau options nouveau...
1. alias选项 strict aliasing是编译器优化中依赖的一个假设,即不同类型的指针,指向不同的内存区域。基于该假设,gcc编译器可以进行一些优化。gcc优化-O2默认开启该选项(-fstrict-aliasing)。 使用该选项,需要保证不同类型指针的内存区域不重叠,否则会导致未定义行为。例如: int a = 10; int* p1 = &a; float* ...
现代性能分析,使用针对pipeline的分析办法(取代CPU cycles分析)。这源于现代CPU架构的复杂性。 现代CPU处理指令架构,分为前端 Front-end,后端 Back-end两部分。阻碍指令执行的因素,从硬件看,源于前端或后端的Stall。 1. CPU 流水线 Intel CPU流水线一般分为5级。其中解码(ID),意思是将指令操作分解为多个uOp(即拆分为多个更...