Milvus and Manu,向量数据库论文笔记
原文链接:https://www.cs.purdue.edu/homes/csjgwang/pubs/SIGMOD21_Milvus.pdf
从向量数据库引擎的角度介绍了milvus的查询、索引以及异构加速设计;
MilvusIntromilvus是在Facebook的Faiss基础上构建的,Faiss是一个开源的向量相似度搜索c++库。milvus做了如下优化
针对不同计算平台进行优化(CPU、GPU)
CPU方面做了向量查询的CPU L3cache优化和根据CPU Tag自动选择SIMD指令优化;
GPU方面设计了混合索引机制和多GPU调度策略;
支持动态数据管理,将数据查询分散到多个节点
支持标量属性过滤和多向量查询处理(相对于单向量查询)
属性过滤方面设计了基于分区的过滤算法;
多向量查询处理方面设计了向量融合、迭代合并两种算法;
提供多语言SDK调用接口
System Design支持的查询类型:
向量查询、属性过滤、多向量查询(根据用户定义聚合函数将数据中多个向量属性的相似度进行聚合)
支持的索引方面:
基于量化的索引(IVF_FLAT、I ...
Tiny-GPU开源项目
项目地址
Tiny-GPU架构图
Tiny-GPU工作方式Tiny GPU以单核的方式工作,启动内核需要以下步骤:
在全局程序内存中加载内核程序
在数据内存中加载必要的数据
在设备控制寄存器中设置启动的线程数量
通过将启动信号拉高,启动内核Tiny-GPU组成部分GPU本身包括以下几个部分:
设备控制寄存器:保存内核在GPU中的执行方式(例如需要启动的线程数量thread_count);
调度器:内核被启动后,调度器管理线程在不同计算核心上的执行。调度器将可以在单个核心上并行执行的线程编排成组(blocks),并将组发送给活跃的核心处理,等待所有block处理完成;
多个计算核心:
数据内存/程序内存的内存控制器:GPU需要和外部内存交互。
Global memory:项目的外村标准为:
数据内存:8bits寻址,每行8bits数据;
程序内存:8bits寻址,每行保存16bits的指令(ISA)
内存控制器:全局内存具有固定的读写带宽,实际上多个核心可能同时要求访问内存数据,超过外存的最大读写带宽。内存控制器监控所有来自计算核心的内存访问,根据外存带宽限制请求,并返回外部存储器 ...
Vitis Vivado开发自定义IP核流程——以自定义呼吸灯IP核为例
自定义IP核自定义LED IP核,控制PL LED呈现呼吸灯的效果,且PS可以通过AXI接口来控制呼吸灯的开关和呼吸的频率。
IP核设计下边是第三方设计好的呼吸灯Verilog代码,大概原理为调整占空比控制LED灯的呼吸效果。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485// File name: breath_led// Descriptions: 自定义IP核-呼吸灯//*******************************************************************************module breath_led( input sys_clk , //时钟信号 input ...
Zynq PS通过GPIO点亮PL LED、PL中断触发
Vivado Vitis协同开发一般流程:
领航者B站教程:https://www.bilibili.com/video/BV1Hq4y1u7qH/?vd_source=1f2a3d74b293649da6aeac79edac185bB站老哥的笔记:https://space.bilibili.com/94007900/articleALINX教程博客:https://zhuanlan.zhihu.com/p/339433531ALINXB站视频:https://space.bilibili.com/473639301/channel/collectiondetail?sid=567806
点亮LED灯创建硬件平台这里不使用PS的IO外设MIO、EMIO点灯,而是使用PL的资源。在ZYNQ中配置PS-PL configuration,配置上PS-PL Interfaces—Master Interface—AXI HPM0 LPD(用于PS向PL传数据),以及General—Interrupts—PL to PS—IRQ0(PL的按键中断)。
添加两个AXI GPIO,一个用于输出 ...
Zynq UltraScale+ MPSoC Embedded Design Tutorial
结合两个教程:1 Zynq vitis开发官网地址:https://xilinx.github.io/Embedded-Design-Tutorials/docs/2022.2/build/html/docs/Introduction/ZynqMPSoC-EDT/ZynqMPSoC-EDT.html2 The_Zynq_Book_ZedBoard_Tutorials pdf
The Zynq UltraScale+ MPSoC PS block has three major processing units:
Application processing unit: Quad-core Arm® Cortex™-A53 MPCore processors
Real time processing unit: Dual-core Arm Cortex™-R5F MPCore processors
Graphics processing unit: Arm Mali™ 400 MP2 GPU with pixel and geometry processor and 64 KB L2 ...
linux新机配置ssh gcc git nvidia驱动 换源 docker cuda opencv
Linux 新机配置ssh,gcc,gitssh 远程服务器出错,重新认证,重新连接1ssh-keygen -R +输入服务器的IP
ubuntu 安装gcc编译环境123sudo apt-get updatesudo apt-get install build-essential gdbgcc -v #如果安装成功则显示gcc版本
vscode中其他配置按照官网来https://code.visualstudio.com/docs/cpp/config-linux,task.json和launch.json可复制官网
ubuntu安装git并配置用户信息12345678910#安装gitsudo apt-get install -y git #配置github用户昵称和注册邮箱 下边的master和master@gmail.com替换成自己的git config --global user.name mastergit config --global user.email master@gmail.comgit config --list#生成密钥,作为访问github的凭证ssh- ...
Xilinx IP核 以及 PLL
IP核IP核是什么IP(Intellectual Property)即知识产权。在半导体产业将IP核定义为“用于ASIC或FPGA中的预先设计好的电路功能模块”。简而言之,IP可以理解为电路功能模块。在数字电路中,将常用的且比较复杂的功能模块设计成参数可修改的模块,让其他用户可以直接调用这些模块。
为什么要使用IP核IC的复杂度每年55%提高,设计能力每年提高20%左右。随着FPGA的规模越来大,它的设计也是越来越复杂,使用IP核可以提高开发效率,减少设计和调试时间,降低开发成本。
IP核的存在形式分类依据:产品交付方式
HDL语言形式——软核(软IP)
硬件描述语言,可进行参数调整、复用性强、布局、布线灵活、设计周期短、设计投入少。
网表形式——固核(PCIE接口内核,对时序要求比较严格的)
完成了综合的功能块;可预布线特定信号或分配特定的布线资源。预定义布局可能影响其他电路的布局。
版图形式——硬核
硬核是完成提供设计的最终阶段产品——掩膜(Mask);缺乏灵活性、可移植性差;更易于实现IP核保护。
IP核的缺点
IP核往往不能跨平台使用
IP核不透明,看不到内部核 ...
状态机
状态机(Finite State Machine FSM)分类:
Moore状态机:输出只和当前状态有关;
Mealy状态机:输出与当前状态和输入有关;
状态机表示:
简单可乐机,投币3元后输出可乐
复杂可乐机,可乐2.5元一瓶,存在找零情况
呼吸灯
呼吸灯呼吸灯1s内由点亮到熄灭,下一秒由熄灭到点亮
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061module breath_led#( parameter CNT_1US_MAX=6'd49, parameter CNT_1MS_MAX=10'd999, parameter CNT_1S_MAX=10'd999)( input wire sys_clk , input wire sys_rst_n , output reg led_out );reg [9:0] cnt_1s ;reg [9:0] cnt_1ms ;reg [5:0] cnt_1us ;reg cnt_en ;//使能信号,使每过1s,l ...
流水灯
流水灯目标:依次点亮板载的 4 个 LED 灯,实现流水灯的效果,两灯之间点亮间隔为 0.5s,LED 灯一次点亮持续时间 0.5s。
123456789//led输出信号赋值always@(posedge sys_clk or negedge sys_rst_n) if(sys_rst_n==1'b0) led_out <= 4'b0001; // 使用循环位移 else if(cnt_flag==1) led_out<={led_out[2:0],led_out[3]}; else led_out <= led_out;