哈希函数用于缩小映射空间,可能会发生碰撞,可用链表法或多哈希函数。 # 基础 常用数据结构: 数组,有限确定项,比如字母串 map,映射 set,集合 Go的map底层使用哈希表实现,set可通过将map的value置空实现。 C++的std::map/std::multimap由红黑树实现,std::un...
数组是最基础的数据结构之一,存储线性数据,内存结构连续。 数组是Go的内置类型,分为静态数组和动态切片。 # 实践 # 多个有序数组的第k小数 寻找两个正序数组的中位数 暴力法: 归并排序后取中位数 指针法:只计中位数 通用寻找第k小数方法 二分法比较排除较小数组的前k/2个元素 递归查找(k - ...
树是常用的数据结构,应用较多的有二叉搜索树,二叉平衡搜索树(AVL树),红黑树,多路平衡搜索树(B-树,B+树,B*树)等。 # 基础 树可由链式结构或数组实现,遍历方式为前、中、后、层序遍历。 # 树 有向无环非线性数据结构,每个节点可以指向多个节点,但至多有一个节点指向自身。 # 二叉树 每个节点至多...
排序是最常用的操作。 # 快速排序 快排(QUICK-SORT)基于分治思想,核心是对子数组partition,partition挑选一个参考基准(主元,通常为第一个或最后一个元素),以主元为分界将数据分为两份,子数组递归partition。 # 归并排序 归并排序(MERGE-SORT...
表是最基础的数据结构之一,存储线性数据,内存结构不连续。 # 基础 链表可通过自定义数据结构,使用指针或引用指向前后节点。 Go提供了"container/list"1标准库实现双向链表。 # 实战 # 虚拟头结点移除链表中指定元素 移除链表元素 基本链表操作 # 实现链表...
优先队列以比排序更小的代价维护顺序。二叉堆是实现优先队列的一种实现。二叉堆的最简单实现是数组。 # 基础 堆的基本操作: 插入 堆化,Sift Up,Sift Down 取出最值 使用数组表示的二叉堆的基本性质: 每个结点的左孩子为下标i的2倍:left child(i) = i * 2;每个结点的右孩...
模型推理服务是在业务关键路径上的,其性能足以收到高度重视。如何优化训练后的模型,提高性能,降低资源占用,维持推理精度,优化方法的通用化与自动化,这些是模型推理优化的核心目标。 说起性能优化,软件的性能优化应该是必备功课,通过profiling定位bottleneck,再针对性优化,可以说具备一定程度通用的方法论...
现代的服务系统已经变得庞大复杂,硬件后端需要与服务系统整合,才能在整个pipeline中发挥作用。相比于底层更关注局部性能,服务系统更关心端到端延迟,并发量和硬件利用率,性能稳定性,服务可用率等指标。 # Serving 后端硬件接入框架后,基本就可以依赖框架的Serving能力对外输出了。比如Tensorfl...
在开源背景下,框架在社区的加持下不断迭代,后端硬件通常不能cover所有应用场景,需要接入框架借用框架的能力。那什么样的实现最合适,又会有哪些问题? 按需求不同,可以有多种方法: 不接入 实际上还是借用了框架的模型定义。如果整个模型都能被支持,并且对性能有较高的要求,场景定制,那么可以不接入框架,比如Ten...
编译,广义上是将一种表达映射成另一种表达,维持功能不变。深度学习后端硬件的编译,是将DSL描述的计算图映射成后端硬件指令。 传统编译器直接解析文本,通过词法与语法分析,构建AST1。之后在AST上执行一系列的优化,称为优化pipeline。 优化后的AST可以转换为IR(比如LLVM2 IR),由LLVM进一步...
Page 12 / 14