modern C++ DesignPattern-Part1

现代c++改变了很多设计模式的实现方式,为了保持与时俱进,阅读了”Design Pattern in Modern C++“这本书,会记录下来在阅读中的一些心得体会,Part1主要包括 工厂模式,建造者模式与单例模式的现代实现

c++ basic复习

基础知识

长时间写python的后遗症,cpp的一些基础知识都忘得差不多了,需要强化一下记忆。

pandas使用

Pandas

一种列存数据分析 API。它是用于处理和分析输入数据的强大工具,很多机器学习框架都支持将 pandas 数据结构作为输入。

Gpu 适合大规模并行计算场景 cpu更适合串行任务优化&线程数量少 gpu结构:global memory (显存) + 流处理器(里面有很多 cuda core),通过PCIE与cpu连接 sm(流处理器) 存储 globalmem->L2->L1/SMEM/C -> 寄存器 gpu之间可以通过nv link(40GB/s),避免pcie慢速 cuda编程:主函数: host(cpu)->kernel(gpu)->host(单线程) Nvcc编译,__global____标识gpu程序入口 显存分配cudaMalloc cudaMemset cudaFree 数据从cpu端->显存,__host__ cudaMemcpy() 异步拷贝:cudaMemoryAsync 现有技术: 从ssd直接读入显存,从另一个服务器的gpu通过网卡直接读入本机gpu,不需要经过cpu处理 运行模型:1.Grid,包含很多block,2.block(单个流处理器中)包含很多thread <<<Grid, Block>>> 在main函数中指定grid,block个数(并发使用,如果sm间没有数据交互,优先使用SM(也就是Grid尽量大)) thread_idx = blockidx.x * blockdim.x + threadidx.x 推荐尽量多的使用线程,而不是根据sm数量分配线程 cuda优化 cudnn:深度学习相关库 cublas:矩阵相乘 cuSPARSE: 稀疏矩阵计算 NCCL: 自动化处理多GPU数据传输 TensorRT: 重要 TensorRT Fuse network layers(FP16 与 INT8) 1.5-4倍加速比 Onnx/tensor模型文件->build(自动调优)->deploy 优化手段: vec相乘->矩阵相乘 使用评估工具,内存带宽瓶颈 or 计算瓶颈