自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 cmake(8):install命令详解

1. 说明之前的示例中有提到使用cmake的install命令来自动安装库和头文件,但是只是使用到了install命令很基础很少的部分,其实该命令作用十分丰富,本篇文档用于说明该命令的详细使用方法。2. install命令详解install()命令为项目生成安装规则,通过在源目录中调用install()命令指定的安装规则将在安装过程中按顺序执行。此命令有多种格式,分别对应不同的安装目标,如:二进制文件、动态库、静态库以及文件、目录、脚本等。基本命令格式如下:install(TARGETS <

2020-10-27 10:22:04 21543

原创 cmake(7):find_package命令详解

1. 说明cmake的find_package命令对于构建软件提供了极大的便利,虽然知道怎么使用已经能解决大部分问题,但是cmake支持哪些包?为什么它能找到需要的包?如果是自己编写的库,需要如何做才能使用该命令进行构建等原理性问题却始终困扰着我。这篇文章参考cmake官方文档和网上前辈的文章记录自己对find_package命令的学习和分析。1.1 cmake支持哪些包理论上只要符合find_package命令的查找条件,能让该命令识别的包或者库都会被支持。在实际使用时,我们可以把这些包分成三类:

2020-10-20 11:09:33 12333 3

原创 Faiss(16):编译时添加对AVX512指令的支持

1. 说明在对Faiss CPU profiling分析时对libfaiss.o进行反汇编发现该程序没有用到avx512指令进行优化,而该指令在进行浮点运算时相比其他指令集会有更好的效率和速度,故在此记录将AVX512指令集添加进程序的编译过程。2. 编译OpenBLASopenblas 是一个开源的矩阵计算库,包含了诸多的精度和形式的矩阵计算算法。就精度而言,包括float和double,两种数据类型的数据,其矩阵调用函数也是不一样。不同矩阵,其计算方式也是有所不同,(姑且认为向量也是一维矩阵),

2020-10-12 10:08:54 5978 1

原创 Faiss(15):OpenMP并行编程

1. 说明在上一篇分析CPU search过程的文档中,发现Faiss为提高搜索效率,缩短搜索时间,应用了OpenMP并行运算的功能,这一篇文档针对IndexIVF.cpp->search_preassigned函数中使用的OpenMP命令进行分析。2. 概述OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C、C++和Fortran。OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的并行程序设计。编译器根据程序中添加的pragma指令,自动将

2020-10-12 09:59:20 1739 1

原创 Faiss(14):IndexIVFPQ的CPU search过程分析

1. 说明之前分析过了faiss 在GPU中的search过程,这里分析一下IndexIVFPQ在CPU中的search过程,即不将index拷贝到GPU中。2. 过程分析2.1 python接口CPU search的python接口与GPU的完全一致,没有差别。D, I = gpu_index.search(xq_t[x],top_k)2.2 faiss coreIndexIVF::search因为IndexIVFPQ没有override search,所以在实际运行过程中会调用父类

2020-10-12 09:41:23 1489 3

原创 Faiss(13):update_vectors分析

1. 说明update_vectors用于更新索引中的dataset而不需要重新生成和训练的过程,从代码追踪的情况来看,update_vectors()函数只有在IndexIVFFlat索引中有实际的定义,所以只有该类型以及该类型索引的子类有update的功能。本篇文档也以IndexIVFFlat为基础进行分析和实验。2. 过程分析2.1 Python接口上篇文章中说明,faiss的python接口定义都是在swigfaiss.py文件内,update_vectors也一样,如下所示:# n:

2020-10-10 09:44:34 2132

原创 Faiss(12):python接口faiss.py文件分析

1. 前言本篇笔记主要分析faiss code下的python接口文件——faiss.py的工作流程以及内容。2. faiss.py分析2.1 导入文件在faiss code 编译完成后,在python目录下执行make/make install命令后,会在该文件下产生faiss.py, faiss/, faiss.egg-info/等文件和目录,其中faiss.py和faiss/目录下的__init__.py内容一样,但是在应用程序中import faiss时,导入的是__init__.py文件

2020-10-07 13:25:33 2064

原创 cmake(6):适配多种操作系统编译构建以及if命令

1. 说明cmake一个重要的特点便是可以跨平台代码构建,即同一套源代码可以在不改动的情况下直接迁移到另一中操作系统进行编译。这篇笔记用于说明如何在CMakeLists.txt中判断当前操作系统类型并支持Windows和Linux系统编译。2. 解决方案不同平台可能使用不同的编译器,对应的编译器选项和参数也可能不同,要适配多种操作系统的关键在于cmake要判断当前系统的类型,选择相应的编译器。判断操作系统的方法一般有两种。2.1 根据CMAKE_SYSTEM_NAME判断CMAKE_SYST

2020-10-07 10:35:47 3359

原创 Faiss(11):关于GPU-CPU的数据Copy back

1. 前言在之前的文档中记录了Faiss框架search时各个阶段的逻辑顺序和时间消耗,其中发现在第2.3节GPUIndex的搜索中,Copy back占的时间比值不小(达到了45.61%),相信如果要对整体方案进行优化,那么这一部分将是一个重要的突破口。所以这篇文档主要对数据的copy back进行分析。2. Copy back说明GPU search完成后会将输出结果distances和labels的数组保存到内存中,但仍然是在GPU内部的内存,应用程序无法知道实际结果,那么就需要将这部分数据

2020-10-07 10:30:55 1717 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除