mirror of
https://github.com/facebookresearch/faiss.git
synced 2025-06-03 21:54:02 +08:00
various bugfixes from github issues kmean with some frozen centroids GPU better tiling for large flat datasets default AVX for vector ops
1043 lines
178 KiB
HTML
1043 lines
178 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
|
<meta name="generator" content="Doxygen 1.8.5"/>
|
|
<title>Faiss: /data/users/matthijs/github_faiss/faiss/AutoTune.cpp Source File</title>
|
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="jquery.js"></script>
|
|
<script type="text/javascript" src="dynsections.js"></script>
|
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="search/search.js"></script>
|
|
<script type="text/javascript">
|
|
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
|
</script>
|
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
</head>
|
|
<body>
|
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
<div id="titlearea">
|
|
<table cellspacing="0" cellpadding="0">
|
|
<tbody>
|
|
<tr style="height: 56px;">
|
|
<td style="padding-left: 0.5em;">
|
|
<div id="projectname">Faiss
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Generated by Doxygen 1.8.5 -->
|
|
<script type="text/javascript">
|
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|
</script>
|
|
<div id="navrow1" class="tabs">
|
|
<ul class="tablist">
|
|
<li><a href="index.html"><span>Main Page</span></a></li>
|
|
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
|
<li><a href="annotated.html"><span>Classes</span></a></li>
|
|
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
|
<li>
|
|
<div id="MSearchBox" class="MSearchBoxInactive">
|
|
<span class="left">
|
|
<img id="MSearchSelect" src="search/mag_sel.png"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
alt=""/>
|
|
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
|
onfocus="searchBox.OnSearchFieldFocus(true)"
|
|
onblur="searchBox.OnSearchFieldFocus(false)"
|
|
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
|
</span><span class="right">
|
|
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
|
</span>
|
|
</div>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div id="navrow2" class="tabs2">
|
|
<ul class="tablist">
|
|
<li><a href="files.html"><span>File List</span></a></li>
|
|
</ul>
|
|
</div>
|
|
</div><!-- top -->
|
|
<!-- window showing the filter options -->
|
|
<div id="MSearchSelectWindow"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Friends</a></div>
|
|
|
|
<!-- iframe showing the search results (closed by default) -->
|
|
<div id="MSearchResultsWindow">
|
|
<iframe src="javascript:void(0)" frameborder="0"
|
|
name="MSearchResults" id="MSearchResults">
|
|
</iframe>
|
|
</div>
|
|
|
|
<div class="header">
|
|
<div class="headertitle">
|
|
<div class="title">/data/users/matthijs/github_faiss/faiss/AutoTune.cpp</div> </div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**</span></div>
|
|
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2015-present, Facebook, Inc.</span></div>
|
|
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * All rights reserved.</span></div>
|
|
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> *</span></div>
|
|
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * This source code is licensed under the BSD+Patents license found in the</span></div>
|
|
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * LICENSE file in the root directory of this source tree.</span></div>
|
|
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> */</span></div>
|
|
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
|
|
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">/* Copyright 2004-present Facebook. All Rights Reserved.</span></div>
|
|
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> implementation of Hyper-parameter auto-tuning</span></div>
|
|
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">*/</span></div>
|
|
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div>
|
|
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include "AutoTune.h"</span></div>
|
|
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
|
|
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include "FaissAssert.h"</span></div>
|
|
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "utils.h"</span></div>
|
|
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
|
|
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "IndexFlat.h"</span></div>
|
|
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "VectorTransform.h"</span></div>
|
|
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "IndexLSH.h"</span></div>
|
|
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "IndexPQ.h"</span></div>
|
|
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "IndexIVF.h"</span></div>
|
|
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "IndexIVFPQ.h"</span></div>
|
|
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "MetaIndexes.h"</span></div>
|
|
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "IndexScalarQuantizer.h"</span></div>
|
|
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
|
|
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
|
|
<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="namespacefaiss.html"> 28</a></span> <span class="keyword">namespace </span>faiss {</div>
|
|
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
|
|
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
|
|
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> AutoTuneCriterion::AutoTuneCriterion (idx_t nq, idx_t nnn):</div>
|
|
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  nq (nq), nnn (nnn), gt_nnn (0)</div>
|
|
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> {}</div>
|
|
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
|
|
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
|
|
<div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="structfaiss_1_1AutoTuneCriterion.html#a174f0de8e6fd01905f5fa2170f5039d8"> 36</a></span> <span class="keywordtype">void</span> <a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a174f0de8e6fd01905f5fa2170f5039d8">AutoTuneCriterion::set_groundtruth</a> (</div>
|
|
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordtype">int</span> gt_nnn, <span class="keyword">const</span> <span class="keywordtype">float</span> *gt_D_in, <span class="keyword">const</span> idx_t *gt_I_in)</div>
|
|
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> {</div>
|
|
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  this->gt_nnn = <a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a9b3a2242729a0873d255c1684881bbd4">gt_nnn</a>;</div>
|
|
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">if</span> (gt_D_in) { <span class="comment">// allow null for this, as it is often not used</span></div>
|
|
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a40e91caa9232a597c16fc946d0befd9b">gt_D</a>.resize (nq * gt_nnn);</div>
|
|
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  memcpy (<a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a40e91caa9232a597c16fc946d0befd9b">gt_D</a>.data(), gt_D_in, <span class="keyword">sizeof</span> (<a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a40e91caa9232a597c16fc946d0befd9b">gt_D</a>[0]) * nq * gt_nnn);</div>
|
|
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  }</div>
|
|
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <a class="code" href="structfaiss_1_1AutoTuneCriterion.html#af915fc4df215e3c8d9f71ff42d526144">gt_I</a>.resize (nq * gt_nnn);</div>
|
|
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  memcpy (<a class="code" href="structfaiss_1_1AutoTuneCriterion.html#af915fc4df215e3c8d9f71ff42d526144">gt_I</a>.data(), gt_I_in, <span class="keyword">sizeof</span> (<a class="code" href="structfaiss_1_1AutoTuneCriterion.html#af915fc4df215e3c8d9f71ff42d526144">gt_I</a>[0]) * nq * gt_nnn);</div>
|
|
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }</div>
|
|
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
|
|
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
|
|
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
|
|
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> OneRecallAtRCriterion::OneRecallAtRCriterion (idx_t nq, idx_t R):</div>
|
|
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <a class="code" href="structfaiss_1_1AutoTuneCriterion.html">AutoTuneCriterion</a>(nq, R), R(R)</div>
|
|
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> {}</div>
|
|
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
|
|
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">double</span> OneRecallAtRCriterion::evaluate(<span class="keyword">const</span> <span class="keywordtype">float</span>* <span class="comment">/*D*/</span>, <span class="keyword">const</span> idx_t* I)<span class="keyword"></span></div>
|
|
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keyword"> const </span>{</div>
|
|
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  FAISS_THROW_IF_NOT_MSG(</div>
|
|
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  (<a class="code" href="structfaiss_1_1AutoTuneCriterion.html#af915fc4df215e3c8d9f71ff42d526144">gt_I</a>.size() == <a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a9b3a2242729a0873d255c1684881bbd4">gt_nnn</a> * nq && <a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a9b3a2242729a0873d255c1684881bbd4">gt_nnn</a> >= 1 && nnn >= R),</div>
|
|
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="stringliteral">"ground truth not initialized"</span>);</div>
|
|
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  idx_t n_ok = 0;</div>
|
|
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">for</span> (idx_t q = 0; q < <a class="code" href="structfaiss_1_1AutoTuneCriterion.html#adcfaafb3f1b3449e2cfd553f0f603a5b">nq</a>; q++) {</div>
|
|
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  idx_t gt_nn = <a class="code" href="structfaiss_1_1AutoTuneCriterion.html#af915fc4df215e3c8d9f71ff42d526144">gt_I</a>[q * <a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a9b3a2242729a0873d255c1684881bbd4">gt_nnn</a>];</div>
|
|
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keyword">const</span> idx_t* I_line = I + q * <a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a3bb11e873707a812999f8391869aafab">nnn</a>;</div>
|
|
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < R; i++) {</div>
|
|
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">if</span> (I_line[i] == gt_nn) {</div>
|
|
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  n_ok++;</div>
|
|
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">break</span>;</div>
|
|
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div>
|
|
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  }</div>
|
|
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  }</div>
|
|
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> n_ok / double(nq);</div>
|
|
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> }</div>
|
|
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
|
|
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
|
|
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> IntersectionCriterion::IntersectionCriterion (idx_t nq, idx_t R):</div>
|
|
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  AutoTuneCriterion(nq, R), R(R)</div>
|
|
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> {}</div>
|
|
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
|
|
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">double</span> IntersectionCriterion::evaluate(<span class="keyword">const</span> <span class="keywordtype">float</span>* <span class="comment">/*D*/</span>, <span class="keyword">const</span> idx_t* I)<span class="keyword"></span></div>
|
|
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keyword"> const </span>{</div>
|
|
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  FAISS_THROW_IF_NOT_MSG(</div>
|
|
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  (<a class="code" href="structfaiss_1_1AutoTuneCriterion.html#af915fc4df215e3c8d9f71ff42d526144">gt_I</a>.size() == <a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a9b3a2242729a0873d255c1684881bbd4">gt_nnn</a> * nq && <a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a9b3a2242729a0873d255c1684881bbd4">gt_nnn</a> >= R && nnn >= R),</div>
|
|
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="stringliteral">"ground truth not initialized"</span>);</div>
|
|
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordtype">long</span> n_ok = 0;</div>
|
|
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="preprocessor">#pragma omp parallel for reduction(+: n_ok)</span></div>
|
|
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (idx_t q = 0; q < <a class="code" href="structfaiss_1_1AutoTuneCriterion.html#adcfaafb3f1b3449e2cfd553f0f603a5b">nq</a>; q++) {</div>
|
|
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  n_ok += <a class="code" href="namespacefaiss.html#a8dbc652ba48d41f126b8815004899448">ranklist_intersection_size</a> (</div>
|
|
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  R, &<a class="code" href="structfaiss_1_1AutoTuneCriterion.html#af915fc4df215e3c8d9f71ff42d526144">gt_I</a> [q * <a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a9b3a2242729a0873d255c1684881bbd4">gt_nnn</a>],</div>
|
|
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  R, I + q * nnn);</div>
|
|
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  }</div>
|
|
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">return</span> n_ok / double (nq * R);</div>
|
|
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> }</div>
|
|
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
|
|
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="comment">/***************************************************************</span></div>
|
|
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="comment"> * OperatingPoints</span></div>
|
|
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="comment"> ***************************************************************/</span></div>
|
|
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
|
|
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> OperatingPoints::OperatingPoints ()</div>
|
|
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> {</div>
|
|
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <a class="code" href="structfaiss_1_1OperatingPoints.html#a1702eeb680ce73ca8c1fd071955f0679">clear</a>();</div>
|
|
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</div>
|
|
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
|
|
<div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="structfaiss_1_1OperatingPoints.html#a1702eeb680ce73ca8c1fd071955f0679"> 102</a></span> <span class="keywordtype">void</span> <a class="code" href="structfaiss_1_1OperatingPoints.html#a1702eeb680ce73ca8c1fd071955f0679">OperatingPoints::clear</a> ()</div>
|
|
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> {</div>
|
|
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="structfaiss_1_1OperatingPoints.html#a48f457047b0511ecc531f250ef8b19c3">all_pts</a>.clear();</div>
|
|
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="structfaiss_1_1OperatingPoints.html#a2829e78e01cc42c3a341622947663b31">optimal_pts</a>.clear();<span class="comment"></span></div>
|
|
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="comment"> /// default point: doing nothing gives 0 performance and takes 0 time</span></div>
|
|
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="comment"></span> <a class="code" href="structfaiss_1_1OperatingPoint.html">OperatingPoint</a> op = {0, 0, <span class="stringliteral">""</span>, -1};</div>
|
|
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <a class="code" href="structfaiss_1_1OperatingPoints.html#a2829e78e01cc42c3a341622947663b31">optimal_pts</a>.push_back(op);</div>
|
|
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</div>
|
|
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment"></span></div>
|
|
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment">/// add a performance measure</span></div>
|
|
<div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="structfaiss_1_1OperatingPoints.html#a7afabe0576800255eeec680486cb30df"> 112</a></span> <span class="comment"></span><span class="keywordtype">bool</span> <a class="code" href="structfaiss_1_1OperatingPoints.html#a7afabe0576800255eeec680486cb30df">OperatingPoints::add</a> (<span class="keywordtype">double</span> perf, <span class="keywordtype">double</span> t, <span class="keyword">const</span> std::string & key,</div>
|
|
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keywordtype">size_t</span> cno)</div>
|
|
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> {</div>
|
|
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <a class="code" href="structfaiss_1_1OperatingPoint.html">OperatingPoint</a> op = {perf, t, key, long(cno)};</div>
|
|
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <a class="code" href="structfaiss_1_1OperatingPoints.html#a48f457047b0511ecc531f250ef8b19c3">all_pts</a>.push_back (op);</div>
|
|
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keywordflow">if</span> (perf == 0) {</div>
|
|
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>; <span class="comment">// no method for 0 accuracy is faster than doing nothing</span></div>
|
|
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  }</div>
|
|
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  std::vector<OperatingPoint> & a = <a class="code" href="structfaiss_1_1OperatingPoints.html#a2829e78e01cc42c3a341622947663b31">optimal_pts</a>;</div>
|
|
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">if</span> (perf > a.back().perf) {</div>
|
|
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="comment">// keep unconditionally</span></div>
|
|
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  a.push_back (op);</div>
|
|
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (perf == a.back().perf) {</div>
|
|
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">if</span> (t < a.back ().t) {</div>
|
|
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  a.back() = op;</div>
|
|
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  } <span class="keywordflow">else</span> {</div>
|
|
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div>
|
|
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  } <span class="keywordflow">else</span> {</div>
|
|
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordtype">int</span> i;</div>
|
|
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="comment">// stricto sensu this should be a bissection</span></div>
|
|
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">for</span> (i = 0; i < a.size(); i++) {</div>
|
|
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">if</span> (a[i].perf >= perf) <span class="keywordflow">break</span>;</div>
|
|
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  }</div>
|
|
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  assert (i < a.size());</div>
|
|
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">if</span> (t < a[i].t) {</div>
|
|
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordflow">if</span> (a[i].perf == perf) {</div>
|
|
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  a[i] = op;</div>
|
|
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  } <span class="keywordflow">else</span> {</div>
|
|
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  a.insert (a.begin() + i, op);</div>
|
|
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  }</div>
|
|
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  } <span class="keywordflow">else</span> {</div>
|
|
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  }</div>
|
|
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  }</div>
|
|
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  { <span class="comment">// remove non-optimal points from array</span></div>
|
|
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordtype">int</span> i = a.size() - 1;</div>
|
|
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordflow">while</span> (i > 0) {</div>
|
|
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">if</span> (a[i].t < a[i - 1].t)</div>
|
|
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  a.erase (a.begin() + (i - 1));</div>
|
|
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  i--;</div>
|
|
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  }</div>
|
|
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  }</div>
|
|
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
|
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> }</div>
|
|
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
|
|
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div>
|
|
<div class="line"><a name="l00159"></a><span class="lineno"><a class="line" href="structfaiss_1_1OperatingPoints.html#a84baddccd8b803dee460739f8bcbc0c9"> 159</a></span> <span class="keywordtype">int</span> <a class="code" href="structfaiss_1_1OperatingPoints.html#a84baddccd8b803dee460739f8bcbc0c9">OperatingPoints::merge_with</a> (<span class="keyword">const</span> <a class="code" href="structfaiss_1_1OperatingPoints.html">OperatingPoints</a> &other,</div>
|
|
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keyword">const</span> std::string & prefix)</div>
|
|
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> {</div>
|
|
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordtype">int</span> n_add = 0;</div>
|
|
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < other.<a class="code" href="structfaiss_1_1OperatingPoints.html#a48f457047b0511ecc531f250ef8b19c3">all_pts</a>.size(); i++) {</div>
|
|
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keyword">const</span> <a class="code" href="structfaiss_1_1OperatingPoint.html">OperatingPoint</a> & op = other.<a class="code" href="structfaiss_1_1OperatingPoints.html#a48f457047b0511ecc531f250ef8b19c3">all_pts</a>[i];</div>
|
|
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordflow">if</span> (<a class="code" href="structfaiss_1_1OperatingPoints.html#a7afabe0576800255eeec680486cb30df">add</a> (op.<a class="code" href="structfaiss_1_1OperatingPoint.html#ad218d1641b6e32d043a215542485a457">perf</a>, op.<a class="code" href="structfaiss_1_1OperatingPoint.html#a886492ffe2b337539fadc798c8f4a6a8">t</a>, prefix + op.<a class="code" href="structfaiss_1_1OperatingPoint.html#aa13782d6d26168531764cb64da941ced">key</a>, op.<a class="code" href="structfaiss_1_1OperatingPoint.html#a2c023f1484e4748e3e97681bb1f4b78e">cno</a>))</div>
|
|
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  n_add++;</div>
|
|
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  }</div>
|
|
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">return</span> n_add;</div>
|
|
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> }</div>
|
|
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div>
|
|
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div>
|
|
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="comment"></span></div>
|
|
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="comment">/// get time required to obtain a given performance measure</span></div>
|
|
<div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="structfaiss_1_1OperatingPoints.html#a3a0723e0900f7048ac9567341de5ee56"> 174</a></span> <span class="comment"></span><span class="keywordtype">double</span> <a class="code" href="structfaiss_1_1OperatingPoints.html#a3a0723e0900f7048ac9567341de5ee56">OperatingPoints::t_for_perf</a> (<span class="keywordtype">double</span> perf)<span class="keyword"> const</span></div>
|
|
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keyword"></span>{</div>
|
|
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keyword">const</span> std::vector<OperatingPoint> & a = <a class="code" href="structfaiss_1_1OperatingPoints.html#a2829e78e01cc42c3a341622947663b31">optimal_pts</a>;</div>
|
|
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keywordflow">if</span> (perf > a.back().perf) <span class="keywordflow">return</span> 1e50;</div>
|
|
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordtype">int</span> i0 = -1, i1 = a.size() - 1;</div>
|
|
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keywordflow">while</span> (i0 + 1 < i1) {</div>
|
|
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordtype">int</span> imed = (i0 + i1 + 1) / 2;</div>
|
|
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">if</span> (a[imed].perf < perf) i0 = imed;</div>
|
|
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordflow">else</span> i1 = imed;</div>
|
|
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  }</div>
|
|
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordflow">return</span> a[i1].t;</div>
|
|
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> }</div>
|
|
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div>
|
|
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
|
|
<div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="structfaiss_1_1OperatingPoints.html#a84e6a4d2f595982b9d900c8585424f9b"> 188</a></span> <span class="keywordtype">void</span> <a class="code" href="structfaiss_1_1OperatingPoints.html#a84e6a4d2f595982b9d900c8585424f9b">OperatingPoints::all_to_gnuplot</a> (<span class="keyword">const</span> <span class="keywordtype">char</span> *fname)<span class="keyword"> const</span></div>
|
|
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keyword"></span>{</div>
|
|
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  FILE *f = fopen(fname, <span class="stringliteral">"w"</span>);</div>
|
|
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordflow">if</span> (!f) {</div>
|
|
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  fprintf (stderr, <span class="stringliteral">"cannot open %s"</span>, fname);</div>
|
|
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  perror(<span class="stringliteral">""</span>);</div>
|
|
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  abort();</div>
|
|
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  }</div>
|
|
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < <a class="code" href="structfaiss_1_1OperatingPoints.html#a48f457047b0511ecc531f250ef8b19c3">all_pts</a>.size(); i++) {</div>
|
|
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keyword">const</span> <a class="code" href="structfaiss_1_1OperatingPoint.html">OperatingPoint</a> & op = <a class="code" href="structfaiss_1_1OperatingPoints.html#a48f457047b0511ecc531f250ef8b19c3">all_pts</a>[i];</div>
|
|
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  fprintf (f, <span class="stringliteral">"%g %g %s\n"</span>, op.<a class="code" href="structfaiss_1_1OperatingPoint.html#ad218d1641b6e32d043a215542485a457">perf</a>, op.<a class="code" href="structfaiss_1_1OperatingPoint.html#a886492ffe2b337539fadc798c8f4a6a8">t</a>, op.<a class="code" href="structfaiss_1_1OperatingPoint.html#aa13782d6d26168531764cb64da941ced">key</a>.c_str());</div>
|
|
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  }</div>
|
|
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  fclose(f);</div>
|
|
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> }</div>
|
|
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div>
|
|
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordtype">void</span> OperatingPoints::optimal_to_gnuplot (<span class="keyword">const</span> <span class="keywordtype">char</span> *fname)<span class="keyword"> const</span></div>
|
|
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keyword"></span>{</div>
|
|
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  FILE *f = fopen(fname, <span class="stringliteral">"w"</span>);</div>
|
|
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keywordflow">if</span> (!f) {</div>
|
|
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  fprintf (stderr, <span class="stringliteral">"cannot open %s"</span>, fname);</div>
|
|
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  perror(<span class="stringliteral">""</span>);</div>
|
|
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  abort();</div>
|
|
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  }</div>
|
|
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keywordtype">double</span> prev_perf = 0.0;</div>
|
|
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < <a class="code" href="structfaiss_1_1OperatingPoints.html#a2829e78e01cc42c3a341622947663b31">optimal_pts</a>.size(); i++) {</div>
|
|
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keyword">const</span> OperatingPoint & op = <a class="code" href="structfaiss_1_1OperatingPoints.html#a2829e78e01cc42c3a341622947663b31">optimal_pts</a>[i];</div>
|
|
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  fprintf (f, <span class="stringliteral">"%g %g\n"</span>, prev_perf, op.t);</div>
|
|
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  fprintf (f, <span class="stringliteral">"%g %g %s\n"</span>, op.perf, op.t, op.key.c_str());</div>
|
|
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  prev_perf = op.perf;</div>
|
|
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  }</div>
|
|
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  fclose(f);</div>
|
|
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> }</div>
|
|
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div>
|
|
<div class="line"><a name="l00221"></a><span class="lineno"><a class="line" href="structfaiss_1_1OperatingPoints.html#ab146ed35f0c8f0c48983a054337a98e1"> 221</a></span> <span class="keywordtype">void</span> <a class="code" href="structfaiss_1_1OperatingPoints.html#ab146ed35f0c8f0c48983a054337a98e1">OperatingPoints::display</a> (<span class="keywordtype">bool</span> only_optimal)<span class="keyword"> const</span></div>
|
|
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keyword"></span>{</div>
|
|
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="keyword">const</span> std::vector<OperatingPoint> &pts =</div>
|
|
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  only_optimal ? <a class="code" href="structfaiss_1_1OperatingPoints.html#a2829e78e01cc42c3a341622947663b31">optimal_pts</a> : <a class="code" href="structfaiss_1_1OperatingPoints.html#a48f457047b0511ecc531f250ef8b19c3">all_pts</a>;</div>
|
|
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  printf(<span class="stringliteral">"Tested %ld operating points, %ld ones are optimal:\n"</span>,</div>
|
|
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <a class="code" href="structfaiss_1_1OperatingPoints.html#a48f457047b0511ecc531f250ef8b19c3">all_pts</a>.size(), <a class="code" href="structfaiss_1_1OperatingPoints.html#a2829e78e01cc42c3a341622947663b31">optimal_pts</a>.size());</div>
|
|
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
|
|
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < pts.size(); i++) {</div>
|
|
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keyword">const</span> <a class="code" href="structfaiss_1_1OperatingPoint.html">OperatingPoint</a> & op = pts[i];</div>
|
|
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keyword">const</span> <span class="keywordtype">char</span> *star = <span class="stringliteral">""</span>;</div>
|
|
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keywordflow">if</span> (!only_optimal) {</div>
|
|
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j < <a class="code" href="structfaiss_1_1OperatingPoints.html#a2829e78e01cc42c3a341622947663b31">optimal_pts</a>.size(); j++) {</div>
|
|
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keywordflow">if</span> (op.<a class="code" href="structfaiss_1_1OperatingPoint.html#a2c023f1484e4748e3e97681bb1f4b78e">cno</a> == <a class="code" href="structfaiss_1_1OperatingPoints.html#a2829e78e01cc42c3a341622947663b31">optimal_pts</a>[j].cno) {</div>
|
|
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  star = <span class="stringliteral">"*"</span>;</div>
|
|
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">break</span>;</div>
|
|
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  }</div>
|
|
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  }</div>
|
|
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  }</div>
|
|
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  printf (<span class="stringliteral">"cno=%ld key=%s perf=%.4f t=%.3f %s\n"</span>,</div>
|
|
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  op.<a class="code" href="structfaiss_1_1OperatingPoint.html#a2c023f1484e4748e3e97681bb1f4b78e">cno</a>, op.<a class="code" href="structfaiss_1_1OperatingPoint.html#aa13782d6d26168531764cb64da941ced">key</a>.c_str(), op.<a class="code" href="structfaiss_1_1OperatingPoint.html#ad218d1641b6e32d043a215542485a457">perf</a>, op.<a class="code" href="structfaiss_1_1OperatingPoint.html#a886492ffe2b337539fadc798c8f4a6a8">t</a>, star);</div>
|
|
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  }</div>
|
|
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div>
|
|
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> }</div>
|
|
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div>
|
|
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="comment">/***************************************************************</span></div>
|
|
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="comment"> * ParameterSpace</span></div>
|
|
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="comment"> ***************************************************************/</span></div>
|
|
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div>
|
|
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> ParameterSpace::ParameterSpace ():</div>
|
|
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  verbose (1), n_experiments (500),</div>
|
|
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  batchsize (1<<30), thread_over_batches (false)</div>
|
|
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> {</div>
|
|
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> }</div>
|
|
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div>
|
|
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="comment">/* not keeping this constructor as inheritors will call the parent</span></div>
|
|
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="comment"> initialize()</span></div>
|
|
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="comment"> */</span></div>
|
|
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div>
|
|
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="preprocessor">#if 0</span></div>
|
|
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="preprocessor"></span>ParameterSpace::ParameterSpace (Index *index):</div>
|
|
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  verbose (1), n_experiments (500),</div>
|
|
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  batchsize (1<<30), thread_over_batches (false)</div>
|
|
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> {</div>
|
|
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  initialize(index);</div>
|
|
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> }</div>
|
|
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="preprocessor">#endif</span></div>
|
|
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="preprocessor"></span></div>
|
|
<div class="line"><a name="l00268"></a><span class="lineno"><a class="line" href="structfaiss_1_1ParameterSpace.html#a488329e3c1f08b9980d8e0f9c1491c75"> 268</a></span> <span class="keywordtype">size_t</span> <a class="code" href="structfaiss_1_1ParameterSpace.html#a488329e3c1f08b9980d8e0f9c1491c75">ParameterSpace::n_combinations</a> ()<span class="keyword"> const</span></div>
|
|
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="keyword"></span>{</div>
|
|
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keywordtype">size_t</span> n = 1;</div>
|
|
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < <a class="code" href="structfaiss_1_1ParameterSpace.html#a334c1bb54bc2b70950a4a63950728cbb">parameter_ranges</a>.size(); i++)</div>
|
|
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  n *= <a class="code" href="structfaiss_1_1ParameterSpace.html#a334c1bb54bc2b70950a4a63950728cbb">parameter_ranges</a>[i].values.size();</div>
|
|
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">return</span> n;</div>
|
|
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> }</div>
|
|
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="comment"></span></div>
|
|
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="comment">/// get string representation of the combination</span></div>
|
|
<div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="structfaiss_1_1ParameterSpace.html#a7bb416dbab456bb1ecd9ace433fa5312"> 277</a></span> <span class="comment"></span>std::string <a class="code" href="structfaiss_1_1ParameterSpace.html#a7bb416dbab456bb1ecd9ace433fa5312">ParameterSpace::combination_name</a> (<span class="keywordtype">size_t</span> cno)<span class="keyword"> const </span>{</div>
|
|
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordtype">char</span> buf[1000], *wp = buf;</div>
|
|
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  *wp = 0;</div>
|
|
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < <a class="code" href="structfaiss_1_1ParameterSpace.html#a334c1bb54bc2b70950a4a63950728cbb">parameter_ranges</a>.size(); i++) {</div>
|
|
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keyword">const</span> <a class="code" href="structfaiss_1_1ParameterRange.html">ParameterRange</a> & pr = <a class="code" href="structfaiss_1_1ParameterSpace.html#a334c1bb54bc2b70950a4a63950728cbb">parameter_ranges</a>[i];</div>
|
|
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keywordtype">size_t</span> j = cno % pr.values.size();</div>
|
|
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  cno /= pr.values.size();</div>
|
|
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  wp += snprintf (</div>
|
|
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  wp, buf + 1000 - wp, <span class="stringliteral">"%s%s=%g"</span>, i == 0 ? <span class="stringliteral">""</span> : <span class="stringliteral">","</span>,</div>
|
|
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  pr.name.c_str(), pr.values[j]);</div>
|
|
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  }</div>
|
|
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordflow">return</span> std::string (buf);</div>
|
|
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> }</div>
|
|
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div>
|
|
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div>
|
|
<div class="line"><a name="l00292"></a><span class="lineno"><a class="line" href="structfaiss_1_1ParameterSpace.html#a7cdedaf4bab33293771c4267d453a950"> 292</a></span> <span class="keywordtype">bool</span> <a class="code" href="structfaiss_1_1ParameterSpace.html#a7cdedaf4bab33293771c4267d453a950">ParameterSpace::combination_ge</a> (<span class="keywordtype">size_t</span> c1, <span class="keywordtype">size_t</span> c2)<span class="keyword"> const</span></div>
|
|
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keyword"></span>{</div>
|
|
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < <a class="code" href="structfaiss_1_1ParameterSpace.html#a334c1bb54bc2b70950a4a63950728cbb">parameter_ranges</a>.size(); i++) {</div>
|
|
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keywordtype">int</span> nval = <a class="code" href="structfaiss_1_1ParameterSpace.html#a334c1bb54bc2b70950a4a63950728cbb">parameter_ranges</a>[i].values.size();</div>
|
|
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keywordtype">size_t</span> j1 = c1 % nval;</div>
|
|
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordtype">size_t</span> j2 = c2 % nval;</div>
|
|
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordflow">if</span> (!(j1 >= j2)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  c1 /= nval;</div>
|
|
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  c2 /= nval;</div>
|
|
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  }</div>
|
|
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
|
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> }</div>
|
|
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div>
|
|
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div>
|
|
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div>
|
|
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="preprocessor">#define DC(classname) \</span></div>
|
|
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="preprocessor"> const classname *ix = dynamic_cast<const classname *>(index)</span></div>
|
|
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="preprocessor"></span></div>
|
|
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keyword">static</span> <span class="keywordtype">void</span> init_pq_ParameterRange (<span class="keyword">const</span> <a class="code" href="structfaiss_1_1ProductQuantizer.html">ProductQuantizer</a> & pq,</div>
|
|
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <a class="code" href="structfaiss_1_1ParameterRange.html">ParameterRange</a> & pr)</div>
|
|
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> {</div>
|
|
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keywordflow">if</span> (pq.<a class="code" href="structfaiss_1_1ProductQuantizer.html#aa61330eadb84772b71018b093773a5f9">code_size</a> % 4 == 0) {</div>
|
|
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="comment">// Polysemous not supported for code sizes that are not a</span></div>
|
|
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="comment">// multiple of 4</span></div>
|
|
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 2; i <= pq.<a class="code" href="structfaiss_1_1ProductQuantizer.html#aa61330eadb84772b71018b093773a5f9">code_size</a> * 8 / 2; i+= 2)</div>
|
|
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  pr.values.push_back(i);</div>
|
|
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  }</div>
|
|
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  pr.values.push_back (pq.<a class="code" href="structfaiss_1_1ProductQuantizer.html#aa61330eadb84772b71018b093773a5f9">code_size</a> * 8);</div>
|
|
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> }</div>
|
|
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
|
|
<div class="line"><a name="l00322"></a><span class="lineno"><a class="line" href="structfaiss_1_1ParameterSpace.html#aeaa27a715fe3fceef5da18d894976833"> 322</a></span> <a class="code" href="structfaiss_1_1ParameterRange.html">ParameterRange</a> &<a class="code" href="structfaiss_1_1ParameterSpace.html#aeaa27a715fe3fceef5da18d894976833">ParameterSpace::add_range</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> * name)</div>
|
|
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> {</div>
|
|
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <a class="code" href="structfaiss_1_1ParameterSpace.html#a334c1bb54bc2b70950a4a63950728cbb">parameter_ranges</a>.push_back (<a class="code" href="structfaiss_1_1ParameterRange.html">ParameterRange</a> ());</div>
|
|
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <a class="code" href="structfaiss_1_1ParameterSpace.html#a334c1bb54bc2b70950a4a63950728cbb">parameter_ranges</a>.back ().name = name;</div>
|
|
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="keywordflow">return</span> <a class="code" href="structfaiss_1_1ParameterSpace.html#a334c1bb54bc2b70950a4a63950728cbb">parameter_ranges</a>.back ();</div>
|
|
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> }</div>
|
|
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div>
|
|
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="comment"></span></div>
|
|
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="comment">/// initialize with reasonable parameters for the index</span></div>
|
|
<div class="line"><a name="l00331"></a><span class="lineno"><a class="line" href="structfaiss_1_1ParameterSpace.html#a9304975f379738eda384385eace8ad76"> 331</a></span> <span class="comment"></span><span class="keywordtype">void</span> <a class="code" href="structfaiss_1_1ParameterSpace.html#a9304975f379738eda384385eace8ad76">ParameterSpace::initialize</a> (<span class="keyword">const</span> <a class="code" href="structfaiss_1_1Index.html">Index</a> * index)</div>
|
|
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> {</div>
|
|
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keywordflow">if</span> (DC (<a class="code" href="structfaiss_1_1IndexPreTransform.html">IndexPreTransform</a>)) {</div>
|
|
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  index = ix->index;</div>
|
|
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  }</div>
|
|
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keywordflow">if</span> (DC (<a class="code" href="structfaiss_1_1IndexRefineFlat.html">IndexRefineFlat</a>)) {</div>
|
|
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <a class="code" href="structfaiss_1_1ParameterRange.html">ParameterRange</a> & pr = <a class="code" href="structfaiss_1_1ParameterSpace.html#aeaa27a715fe3fceef5da18d894976833">add_range</a>(<span class="stringliteral">"k_factor_rf"</span>);</div>
|
|
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i <= 6; i++) {</div>
|
|
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  pr.values.push_back (1 << i);</div>
|
|
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  }</div>
|
|
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  index = ix->base_index;</div>
|
|
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  }</div>
|
|
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keywordflow">if</span> (DC (<a class="code" href="structfaiss_1_1IndexPreTransform.html">IndexPreTransform</a>)) {</div>
|
|
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  index = ix->index;</div>
|
|
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  }</div>
|
|
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div>
|
|
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keywordflow">if</span> (DC (<a class="code" href="structfaiss_1_1IndexIVF.html">IndexIVF</a>)) {</div>
|
|
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  {</div>
|
|
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <a class="code" href="structfaiss_1_1ParameterRange.html">ParameterRange</a> & pr = <a class="code" href="structfaiss_1_1ParameterSpace.html#aeaa27a715fe3fceef5da18d894976833">add_range</a>(<span class="stringliteral">"nprobe"</span>);</div>
|
|
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < 13; i++) {</div>
|
|
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordtype">size_t</span> nprobe = 1 << i;</div>
|
|
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keywordflow">if</span> (nprobe >= ix->nlist) <span class="keywordflow">break</span>;</div>
|
|
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  pr.values.push_back (nprobe);</div>
|
|
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  }</div>
|
|
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  }</div>
|
|
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  }</div>
|
|
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordflow">if</span> (DC (<a class="code" href="structfaiss_1_1IndexPQ.html">IndexPQ</a>)) {</div>
|
|
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <a class="code" href="structfaiss_1_1ParameterRange.html">ParameterRange</a> & pr = <a class="code" href="structfaiss_1_1ParameterSpace.html#aeaa27a715fe3fceef5da18d894976833">add_range</a>(<span class="stringliteral">"ht"</span>);</div>
|
|
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  init_pq_ParameterRange (ix->pq, pr);</div>
|
|
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  }</div>
|
|
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="keywordflow">if</span> (DC (<a class="code" href="structfaiss_1_1IndexIVFPQ.html">IndexIVFPQ</a>)) {</div>
|
|
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <a class="code" href="structfaiss_1_1ParameterRange.html">ParameterRange</a> & pr = <a class="code" href="structfaiss_1_1ParameterSpace.html#aeaa27a715fe3fceef5da18d894976833">add_range</a>(<span class="stringliteral">"ht"</span>);</div>
|
|
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  init_pq_ParameterRange (ix->pq, pr);</div>
|
|
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div>
|
|
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="keyword">const</span> <a class="code" href="structfaiss_1_1MultiIndexQuantizer.html">MultiIndexQuantizer</a> *miq =</div>
|
|
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keyword">dynamic_cast<</span><span class="keyword">const </span><a class="code" href="structfaiss_1_1MultiIndexQuantizer.html">MultiIndexQuantizer</a> *<span class="keyword">></span> (ix->quantizer);</div>
|
|
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="keywordflow">if</span> (miq) {</div>
|
|
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <a class="code" href="structfaiss_1_1ParameterRange.html">ParameterRange</a> & pr_max_codes = <a class="code" href="structfaiss_1_1ParameterSpace.html#aeaa27a715fe3fceef5da18d894976833">add_range</a>(<span class="stringliteral">"max_codes"</span>);</div>
|
|
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 8; i < 20; i++) {</div>
|
|
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  pr_max_codes.values.push_back (1 << i);</div>
|
|
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  }</div>
|
|
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  pr_max_codes.values.push_back (1.0 / 0.0);</div>
|
|
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  }</div>
|
|
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  }</div>
|
|
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="keywordflow">if</span> (DC (<a class="code" href="structfaiss_1_1IndexIVFPQR.html">IndexIVFPQR</a>)) {</div>
|
|
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <a class="code" href="structfaiss_1_1ParameterRange.html">ParameterRange</a> & pr = <a class="code" href="structfaiss_1_1ParameterSpace.html#aeaa27a715fe3fceef5da18d894976833">add_range</a>(<span class="stringliteral">"k_factor"</span>);</div>
|
|
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i <= 6; i++) {</div>
|
|
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  pr.values.push_back (1 << i);</div>
|
|
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  }</div>
|
|
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  }</div>
|
|
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> }</div>
|
|
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
|
|
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="preprocessor">#undef DC</span></div>
|
|
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="preprocessor"></span></div>
|
|
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="comment">// non-const version</span></div>
|
|
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="preprocessor">#define DC(classname) classname *ix = dynamic_cast<classname *>(index)</span></div>
|
|
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="preprocessor"></span></div>
|
|
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="comment"></span></div>
|
|
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="comment">/// set a combination of parameters on an index</span></div>
|
|
<div class="line"><a name="l00390"></a><span class="lineno"><a class="line" href="structfaiss_1_1ParameterSpace.html#a55783994cee46e9181bad2b3a7a973f4"> 390</a></span> <span class="comment"></span><span class="keywordtype">void</span> <a class="code" href="structfaiss_1_1ParameterSpace.html#a55783994cee46e9181bad2b3a7a973f4">ParameterSpace::set_index_parameters</a> (<a class="code" href="structfaiss_1_1Index.html">Index</a> *index, <span class="keywordtype">size_t</span> cno)<span class="keyword"> const</span></div>
|
|
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="keyword"></span>{</div>
|
|
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> </div>
|
|
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < <a class="code" href="structfaiss_1_1ParameterSpace.html#a334c1bb54bc2b70950a4a63950728cbb">parameter_ranges</a>.size(); i++) {</div>
|
|
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keyword">const</span> <a class="code" href="structfaiss_1_1ParameterRange.html">ParameterRange</a> & pr = <a class="code" href="structfaiss_1_1ParameterSpace.html#a334c1bb54bc2b70950a4a63950728cbb">parameter_ranges</a>[i];</div>
|
|
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <span class="keywordtype">size_t</span> j = cno % pr.values.size();</div>
|
|
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  cno /= pr.values.size();</div>
|
|
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keywordtype">double</span> val = pr.values [j];</div>
|
|
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <a class="code" href="structfaiss_1_1ParameterSpace.html#ac630c153ffd12f9994452c92fe57dc17">set_index_parameter</a> (index, pr.name, val);</div>
|
|
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  }</div>
|
|
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> }</div>
|
|
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="comment"></span></div>
|
|
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="comment">/// set a combination of parameters on an index</span></div>
|
|
<div class="line"><a name="l00403"></a><span class="lineno"><a class="line" href="structfaiss_1_1ParameterSpace.html#aef1f2af781a71e7f0cf6f67603ef7cc1"> 403</a></span> <span class="comment"></span><span class="keywordtype">void</span> <a class="code" href="structfaiss_1_1ParameterSpace.html#a55783994cee46e9181bad2b3a7a973f4">ParameterSpace::set_index_parameters</a> (</div>
|
|
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <a class="code" href="structfaiss_1_1Index.html">Index</a> *index, <span class="keyword">const</span> <span class="keywordtype">char</span> *description_in)<span class="keyword"> const</span></div>
|
|
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keyword"></span>{</div>
|
|
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordtype">char</span> description[strlen(description_in) + 1];</div>
|
|
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <span class="keywordtype">char</span> *ptr;</div>
|
|
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  memcpy (description, description_in, strlen(description_in) + 1);</div>
|
|
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> </div>
|
|
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="keywordflow">for</span> (<span class="keywordtype">char</span> *tok = strtok_r (description, <span class="stringliteral">" ,"</span>, &ptr);</div>
|
|
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  tok;</div>
|
|
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  tok = strtok_r (<span class="keyword">nullptr</span>, <span class="stringliteral">" ,"</span>, &ptr)) {</div>
|
|
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="keywordtype">char</span> name[100];</div>
|
|
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <span class="keywordtype">double</span> val;</div>
|
|
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="keywordtype">int</span> ret = sscanf (tok, <span class="stringliteral">"%100[^=]=%lf"</span>, name, &val);</div>
|
|
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  FAISS_THROW_IF_NOT_FMT (</div>
|
|
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  ret == 2, <span class="stringliteral">"could not interpret parameters %s"</span>, tok);</div>
|
|
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <a class="code" href="structfaiss_1_1ParameterSpace.html#ac630c153ffd12f9994452c92fe57dc17">set_index_parameter</a> (index, name, val);</div>
|
|
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  }</div>
|
|
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div>
|
|
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> }</div>
|
|
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div>
|
|
<div class="line"><a name="l00423"></a><span class="lineno"><a class="line" href="structfaiss_1_1ParameterSpace.html#ac630c153ffd12f9994452c92fe57dc17"> 423</a></span> <span class="keywordtype">void</span> <a class="code" href="structfaiss_1_1ParameterSpace.html#ac630c153ffd12f9994452c92fe57dc17">ParameterSpace::set_index_parameter</a> (</div>
|
|
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <a class="code" href="structfaiss_1_1Index.html">Index</a> * index, <span class="keyword">const</span> std::string & name, <span class="keywordtype">double</span> val)<span class="keyword"> const</span></div>
|
|
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="keyword"></span>{</div>
|
|
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keywordflow">if</span> (<a class="code" href="structfaiss_1_1ParameterSpace.html#a7a9f2292c4e0ac3aad569434edea87b0">verbose</a> > 1)</div>
|
|
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  printf(<span class="stringliteral">" set %s=%g\n"</span>, name.c_str(), val);</div>
|
|
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> </div>
|
|
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keywordflow">if</span> (name == <span class="stringliteral">"verbose"</span>) {</div>
|
|
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  index-><a class="code" href="structfaiss_1_1Index.html#a5590d847c5c2b958affd2a05e58a6f23">verbose</a> = int(val);</div>
|
|
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <span class="comment">// and fall through to also enable it on sub-indexes</span></div>
|
|
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  }</div>
|
|
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keywordflow">if</span> (DC (<a class="code" href="structfaiss_1_1IndexPreTransform.html">IndexPreTransform</a>)) {</div>
|
|
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  index = ix->index;</div>
|
|
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  }</div>
|
|
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordflow">if</span> (DC (<a class="code" href="structfaiss_1_1IndexShards.html">IndexShards</a>)) {</div>
|
|
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="comment">// call on all sub-indexes</span></div>
|
|
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> & shard_index : ix->shard_indexes) {</div>
|
|
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <a class="code" href="structfaiss_1_1ParameterSpace.html#ac630c153ffd12f9994452c92fe57dc17">set_index_parameter</a> (shard_index, name, val);</div>
|
|
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  }</div>
|
|
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="keywordflow">return</span>;</div>
|
|
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  }</div>
|
|
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="keywordflow">if</span> (name == <span class="stringliteral">"verbose"</span>) {</div>
|
|
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  index-><a class="code" href="structfaiss_1_1Index.html#a5590d847c5c2b958affd2a05e58a6f23">verbose</a> = int(val);</div>
|
|
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="comment">// in case it was an IndexPreTransform</span></div>
|
|
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  }</div>
|
|
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="keywordflow">if</span> (DC (<a class="code" href="structfaiss_1_1IndexRefineFlat.html">IndexRefineFlat</a>)) {</div>
|
|
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keywordflow">if</span> (name == <span class="stringliteral">"k_factor_rf"</span>) {</div>
|
|
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  ix->k_factor = int(val);</div>
|
|
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keywordflow">return</span>;</div>
|
|
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  }</div>
|
|
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  index = ix->base_index;</div>
|
|
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  }</div>
|
|
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">if</span> (DC (<a class="code" href="structfaiss_1_1IndexPreTransform.html">IndexPreTransform</a>)) {</div>
|
|
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  index = ix->index;</div>
|
|
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  }</div>
|
|
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <span class="keywordflow">if</span> (name == <span class="stringliteral">"verbose"</span>) {</div>
|
|
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  index-><a class="code" href="structfaiss_1_1Index.html#a5590d847c5c2b958affd2a05e58a6f23">verbose</a> = int(val);</div>
|
|
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <span class="keywordflow">return</span>; <span class="comment">// last verbose that we could find</span></div>
|
|
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  }</div>
|
|
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <span class="keywordflow">if</span> (name == <span class="stringliteral">"nprobe"</span>) {</div>
|
|
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="keywordflow">if</span> ( DC(<a class="code" href="structfaiss_1_1IndexIVF.html">IndexIVF</a>)) {</div>
|
|
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  ix->nprobe = int(val);</div>
|
|
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keywordflow">return</span>;</div>
|
|
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  }</div>
|
|
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  }</div>
|
|
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keywordflow">if</span> (name == <span class="stringliteral">"ht"</span>) {</div>
|
|
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="keywordflow">if</span> (DC (<a class="code" href="structfaiss_1_1IndexPQ.html">IndexPQ</a>)) {</div>
|
|
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="keywordflow">if</span> (val >= ix->pq.code_size * 8) {</div>
|
|
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  ix->search_type = <a class="code" href="structfaiss_1_1IndexPQ.html#a4fa05430935a02b62b7c15c9840c42fea00f77a4f8209c30c3ef37ccfd3d0c10a">IndexPQ::ST_PQ</a>;</div>
|
|
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  } <span class="keywordflow">else</span> {</div>
|
|
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  ix->search_type = <a class="code" href="structfaiss_1_1IndexPQ.html#a4fa05430935a02b62b7c15c9840c42feaf06a0e6b53f9cbe1c791c6912169b738">IndexPQ::ST_polysemous</a>;</div>
|
|
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  ix->polysemous_ht = int(val);</div>
|
|
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  }</div>
|
|
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <span class="keywordflow">return</span>;</div>
|
|
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (DC (<a class="code" href="structfaiss_1_1IndexIVFPQ.html">IndexIVFPQ</a>)) {</div>
|
|
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="keywordflow">if</span> (val >= ix->pq.code_size * 8) {</div>
|
|
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  ix->polysemous_ht = 0;</div>
|
|
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  } <span class="keywordflow">else</span> {</div>
|
|
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  ix->polysemous_ht = int(val);</div>
|
|
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  }</div>
|
|
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <span class="keywordflow">return</span>;</div>
|
|
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  }</div>
|
|
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  }</div>
|
|
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> </div>
|
|
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="keywordflow">if</span> (name == <span class="stringliteral">"k_factor"</span>) {</div>
|
|
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="keywordflow">if</span> (DC (<a class="code" href="structfaiss_1_1IndexIVFPQR.html">IndexIVFPQR</a>)) {</div>
|
|
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  ix->k_factor = val;</div>
|
|
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <span class="keywordflow">return</span>;</div>
|
|
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  }</div>
|
|
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  }</div>
|
|
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keywordflow">if</span> (name == <span class="stringliteral">"max_codes"</span>) {</div>
|
|
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="keywordflow">if</span> (DC (<a class="code" href="structfaiss_1_1IndexIVFPQ.html">IndexIVFPQ</a>)) {</div>
|
|
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  ix->max_codes = finite(val) ? size_t(val) : 0;</div>
|
|
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <span class="keywordflow">return</span>;</div>
|
|
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  }</div>
|
|
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  }</div>
|
|
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  FAISS_THROW_FMT (<span class="stringliteral">"ParameterSpace::set_index_parameter:"</span></div>
|
|
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="stringliteral">"could not set parameter %s"</span>,</div>
|
|
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  name.c_str());</div>
|
|
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> }</div>
|
|
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div>
|
|
<div class="line"><a name="l00503"></a><span class="lineno"><a class="line" href="structfaiss_1_1ParameterSpace.html#aa4bb1f0008689903aa936baee61d09d0"> 503</a></span> <span class="keywordtype">void</span> <a class="code" href="structfaiss_1_1ParameterSpace.html#aa4bb1f0008689903aa936baee61d09d0">ParameterSpace::display</a> ()<span class="keyword"> const</span></div>
|
|
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="keyword"></span>{</div>
|
|
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  printf (<span class="stringliteral">"ParameterSpace, %ld parameters, %ld combinations:\n"</span>,</div>
|
|
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <a class="code" href="structfaiss_1_1ParameterSpace.html#a334c1bb54bc2b70950a4a63950728cbb">parameter_ranges</a>.size (), <a class="code" href="structfaiss_1_1ParameterSpace.html#a488329e3c1f08b9980d8e0f9c1491c75">n_combinations</a> ());</div>
|
|
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < <a class="code" href="structfaiss_1_1ParameterSpace.html#a334c1bb54bc2b70950a4a63950728cbb">parameter_ranges</a>.size(); i++) {</div>
|
|
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keyword">const</span> <a class="code" href="structfaiss_1_1ParameterRange.html">ParameterRange</a> & pr = <a class="code" href="structfaiss_1_1ParameterSpace.html#a334c1bb54bc2b70950a4a63950728cbb">parameter_ranges</a>[i];</div>
|
|
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  printf (<span class="stringliteral">" %s: "</span>, pr.name.c_str ());</div>
|
|
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="keywordtype">char</span> sep = <span class="charliteral">'['</span>;</div>
|
|
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j < pr.values.size(); j++) {</div>
|
|
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  printf (<span class="stringliteral">"%c %g"</span>, sep, pr.values [j]);</div>
|
|
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  sep = <span class="charliteral">','</span>;</div>
|
|
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  }</div>
|
|
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  printf (<span class="stringliteral">"]\n"</span>);</div>
|
|
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  }</div>
|
|
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> }</div>
|
|
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> </div>
|
|
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div>
|
|
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> </div>
|
|
<div class="line"><a name="l00521"></a><span class="lineno"><a class="line" href="structfaiss_1_1ParameterSpace.html#ab7039882ec68aabc6c52cff883f75c28"> 521</a></span> <span class="keywordtype">void</span> <a class="code" href="structfaiss_1_1ParameterSpace.html#ab7039882ec68aabc6c52cff883f75c28">ParameterSpace::update_bounds</a> (<span class="keywordtype">size_t</span> cno, <span class="keyword">const</span> <a class="code" href="structfaiss_1_1OperatingPoint.html">OperatingPoint</a> & op,</div>
|
|
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="keywordtype">double</span> *upper_bound_perf,</div>
|
|
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <span class="keywordtype">double</span> *lower_bound_t)<span class="keyword"> const</span></div>
|
|
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="keyword"></span>{</div>
|
|
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <span class="keywordflow">if</span> (<a class="code" href="structfaiss_1_1ParameterSpace.html#a7cdedaf4bab33293771c4267d453a950">combination_ge</a> (cno, op.<a class="code" href="structfaiss_1_1OperatingPoint.html#a2c023f1484e4748e3e97681bb1f4b78e">cno</a>)) {</div>
|
|
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="keywordflow">if</span> (op.<a class="code" href="structfaiss_1_1OperatingPoint.html#a886492ffe2b337539fadc798c8f4a6a8">t</a> > *lower_bound_t) *lower_bound_t = op.<a class="code" href="structfaiss_1_1OperatingPoint.html#a886492ffe2b337539fadc798c8f4a6a8">t</a>;</div>
|
|
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  }</div>
|
|
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="keywordflow">if</span> (<a class="code" href="structfaiss_1_1ParameterSpace.html#a7cdedaf4bab33293771c4267d453a950">combination_ge</a> (op.<a class="code" href="structfaiss_1_1OperatingPoint.html#a2c023f1484e4748e3e97681bb1f4b78e">cno</a>, cno)) {</div>
|
|
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="keywordflow">if</span> (op.<a class="code" href="structfaiss_1_1OperatingPoint.html#ad218d1641b6e32d043a215542485a457">perf</a> < *upper_bound_perf) *upper_bound_perf = op.<a class="code" href="structfaiss_1_1OperatingPoint.html#ad218d1641b6e32d043a215542485a457">perf</a>;</div>
|
|
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  }</div>
|
|
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> }</div>
|
|
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> </div>
|
|
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> </div>
|
|
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> </div>
|
|
<div class="line"><a name="l00535"></a><span class="lineno"><a class="line" href="structfaiss_1_1ParameterSpace.html#a57728d29c4785d9003b9cd564d0c51b2"> 535</a></span> <span class="keywordtype">void</span> <a class="code" href="structfaiss_1_1ParameterSpace.html#a57728d29c4785d9003b9cd564d0c51b2">ParameterSpace::explore</a> (<a class="code" href="structfaiss_1_1Index.html">Index</a> *index,</div>
|
|
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <span class="keywordtype">size_t</span> nq, <span class="keyword">const</span> <span class="keywordtype">float</span> *xq,</div>
|
|
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <span class="keyword">const</span> <a class="code" href="structfaiss_1_1AutoTuneCriterion.html">AutoTuneCriterion</a> & crit,</div>
|
|
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <a class="code" href="structfaiss_1_1OperatingPoints.html">OperatingPoints</a> * ops)<span class="keyword"> const</span></div>
|
|
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="keyword"></span>{</div>
|
|
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  FAISS_THROW_IF_NOT_MSG (nq == crit.<a class="code" href="structfaiss_1_1AutoTuneCriterion.html#adcfaafb3f1b3449e2cfd553f0f603a5b">nq</a>,</div>
|
|
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <span class="stringliteral">"criterion does not have the same nb of queries"</span>);</div>
|
|
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> </div>
|
|
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  <span class="keywordtype">size_t</span> n_comb = <a class="code" href="structfaiss_1_1ParameterSpace.html#a488329e3c1f08b9980d8e0f9c1491c75">n_combinations</a> ();</div>
|
|
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> </div>
|
|
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <span class="keywordflow">if</span> (<a class="code" href="structfaiss_1_1ParameterSpace.html#a76aeae25b3269fb24a26194fbe013b86">n_experiments</a> == 0) {</div>
|
|
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> </div>
|
|
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> cno = 0; cno < n_comb; cno++) {</div>
|
|
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  <a class="code" href="structfaiss_1_1ParameterSpace.html#a55783994cee46e9181bad2b3a7a973f4">set_index_parameters</a> (index, cno);</div>
|
|
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  std::vector<Index::idx_t> I(nq * crit.<a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a3bb11e873707a812999f8391869aafab">nnn</a>);</div>
|
|
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  std::vector<float> D(nq * crit.<a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a3bb11e873707a812999f8391869aafab">nnn</a>);</div>
|
|
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> </div>
|
|
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <span class="keywordtype">double</span> t0 = <a class="code" href="namespacefaiss.html#af2a71f7d5402ae02ce169a4cc83020eb">getmillisecs</a> ();</div>
|
|
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  index-><a class="code" href="structfaiss_1_1Index.html#aced51b1ebc33c47ab3ae15ea906559a7">search</a> (nq, xq, crit.<a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a3bb11e873707a812999f8391869aafab">nnn</a>, D.data(), I.data());</div>
|
|
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  <span class="keywordtype">double</span> t_search = (<a class="code" href="namespacefaiss.html#af2a71f7d5402ae02ce169a4cc83020eb">getmillisecs</a>() - t0) / 1e3;</div>
|
|
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> </div>
|
|
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <span class="keywordtype">double</span> perf = crit.<a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a9084449e216b331c5f753a10c6de6a47">evaluate</a> (D.data(), I.data());</div>
|
|
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> </div>
|
|
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="keywordtype">bool</span> keep = ops-><a class="code" href="structfaiss_1_1OperatingPoints.html#a7afabe0576800255eeec680486cb30df">add</a> (perf, t_search, <a class="code" href="structfaiss_1_1ParameterSpace.html#a7bb416dbab456bb1ecd9ace433fa5312">combination_name</a> (cno), cno);</div>
|
|
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> </div>
|
|
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <span class="keywordflow">if</span> (<a class="code" href="structfaiss_1_1ParameterSpace.html#a7a9f2292c4e0ac3aad569434edea87b0">verbose</a>)</div>
|
|
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  printf(<span class="stringliteral">" %ld/%ld: %s perf=%.3f t=%.3f s %s\n"</span>, cno, n_comb,</div>
|
|
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  <a class="code" href="structfaiss_1_1ParameterSpace.html#a7bb416dbab456bb1ecd9ace433fa5312">combination_name</a> (cno).c_str(), perf, t_search,</div>
|
|
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  keep ? <span class="stringliteral">"*"</span> : <span class="stringliteral">""</span>);</div>
|
|
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  }</div>
|
|
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <span class="keywordflow">return</span>;</div>
|
|
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  }</div>
|
|
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> </div>
|
|
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordtype">int</span> n_exp = <a class="code" href="structfaiss_1_1ParameterSpace.html#a76aeae25b3269fb24a26194fbe013b86">n_experiments</a>;</div>
|
|
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> </div>
|
|
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keywordflow">if</span> (n_exp > n_comb) n_exp = n_comb;</div>
|
|
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  FAISS_THROW_IF_NOT (n_comb == 1 || n_exp > 2);</div>
|
|
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  std::vector<int> perm (n_comb);</div>
|
|
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="comment">// make sure the slowest and fastest experiment are run</span></div>
|
|
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  perm[0] = 0;</div>
|
|
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  <span class="keywordflow">if</span> (n_comb > 1) {</div>
|
|
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  perm[1] = n_comb - 1;</div>
|
|
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  rand_perm (&perm[2], n_comb - 2, 1234);</div>
|
|
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 2; i < perm.size(); i++) perm[i] ++;</div>
|
|
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  }</div>
|
|
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> </div>
|
|
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> xp = 0; xp < n_exp; xp++) {</div>
|
|
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="keywordtype">size_t</span> cno = perm[xp];</div>
|
|
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> </div>
|
|
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <span class="keywordflow">if</span> (<a class="code" href="structfaiss_1_1ParameterSpace.html#a7a9f2292c4e0ac3aad569434edea87b0">verbose</a>)</div>
|
|
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  printf(<span class="stringliteral">" %ld/%d: cno=%ld %s "</span>, xp, n_exp, cno,</div>
|
|
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <a class="code" href="structfaiss_1_1ParameterSpace.html#a7bb416dbab456bb1ecd9ace433fa5312">combination_name</a> (cno).c_str());</div>
|
|
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> </div>
|
|
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  {</div>
|
|
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="keywordtype">double</span> lower_bound_t = 0.0;</div>
|
|
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <span class="keywordtype">double</span> upper_bound_perf = 1.0;</div>
|
|
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < ops-><a class="code" href="structfaiss_1_1OperatingPoints.html#a48f457047b0511ecc531f250ef8b19c3">all_pts</a>.size(); i++) {</div>
|
|
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <a class="code" href="structfaiss_1_1ParameterSpace.html#ab7039882ec68aabc6c52cff883f75c28">update_bounds</a> (cno, ops-><a class="code" href="structfaiss_1_1OperatingPoints.html#a48f457047b0511ecc531f250ef8b19c3">all_pts</a>[i],</div>
|
|
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  &upper_bound_perf, &lower_bound_t);</div>
|
|
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  }</div>
|
|
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="keywordtype">double</span> best_t = ops-><a class="code" href="structfaiss_1_1OperatingPoints.html#a3a0723e0900f7048ac9567341de5ee56">t_for_perf</a> (upper_bound_perf);</div>
|
|
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <span class="keywordflow">if</span> (<a class="code" href="structfaiss_1_1ParameterSpace.html#a7a9f2292c4e0ac3aad569434edea87b0">verbose</a>)</div>
|
|
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  printf (<span class="stringliteral">"bounds [perf<=%.3f t>=%.3f] %s"</span>,</div>
|
|
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  upper_bound_perf, lower_bound_t,</div>
|
|
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  best_t <= lower_bound_t ? <span class="stringliteral">"skip\n"</span> : <span class="stringliteral">""</span>);</div>
|
|
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <span class="keywordflow">if</span> (best_t <= lower_bound_t) <span class="keywordflow">continue</span>;</div>
|
|
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  }</div>
|
|
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> </div>
|
|
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  <a class="code" href="structfaiss_1_1ParameterSpace.html#a55783994cee46e9181bad2b3a7a973f4">set_index_parameters</a> (index, cno);</div>
|
|
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  std::vector<Index::idx_t> I(nq * crit.<a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a3bb11e873707a812999f8391869aafab">nnn</a>);</div>
|
|
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  std::vector<float> D(nq * crit.<a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a3bb11e873707a812999f8391869aafab">nnn</a>);</div>
|
|
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> </div>
|
|
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <span class="keywordtype">double</span> t0 = <a class="code" href="namespacefaiss.html#af2a71f7d5402ae02ce169a4cc83020eb">getmillisecs</a> ();</div>
|
|
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> </div>
|
|
<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <span class="keywordflow">if</span> (<a class="code" href="structfaiss_1_1ParameterSpace.html#af6dc3b9c5631b509cbae99bf0f24170b">thread_over_batches</a>) {</div>
|
|
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="preprocessor">#pragma omp parallel for</span></div>
|
|
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> q0 = 0; q0 < nq; q0 += <a class="code" href="structfaiss_1_1ParameterSpace.html#aee8fd44e15656ba80fe98de4c65ed767">batchsize</a>) {</div>
|
|
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="keywordtype">size_t</span> q1 = q0 + <a class="code" href="structfaiss_1_1ParameterSpace.html#aee8fd44e15656ba80fe98de4c65ed767">batchsize</a>;</div>
|
|
<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="keywordflow">if</span> (q1 > nq) q1 = nq;</div>
|
|
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  index-><a class="code" href="structfaiss_1_1Index.html#aced51b1ebc33c47ab3ae15ea906559a7">search</a> (q1 - q0, xq + q0 * index-><a class="code" href="structfaiss_1_1Index.html#a2a002388d2c081c2dbab8508dcefe73d">d</a>,</div>
|
|
<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  crit.<a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a3bb11e873707a812999f8391869aafab">nnn</a>,</div>
|
|
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  D.data() + q0 * crit.<a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a3bb11e873707a812999f8391869aafab">nnn</a>,</div>
|
|
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  I.data() + q0 * crit.<a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a3bb11e873707a812999f8391869aafab">nnn</a>);</div>
|
|
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  }</div>
|
|
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  } <span class="keywordflow">else</span> {</div>
|
|
<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> q0 = 0; q0 < nq; q0 += <a class="code" href="structfaiss_1_1ParameterSpace.html#aee8fd44e15656ba80fe98de4c65ed767">batchsize</a>) {</div>
|
|
<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keywordtype">size_t</span> q1 = q0 + <a class="code" href="structfaiss_1_1ParameterSpace.html#aee8fd44e15656ba80fe98de4c65ed767">batchsize</a>;</div>
|
|
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <span class="keywordflow">if</span> (q1 > nq) q1 = nq;</div>
|
|
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  index-><a class="code" href="structfaiss_1_1Index.html#aced51b1ebc33c47ab3ae15ea906559a7">search</a> (q1 - q0, xq + q0 * index-><a class="code" href="structfaiss_1_1Index.html#a2a002388d2c081c2dbab8508dcefe73d">d</a>,</div>
|
|
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  crit.<a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a3bb11e873707a812999f8391869aafab">nnn</a>,</div>
|
|
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  D.data() + q0 * crit.<a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a3bb11e873707a812999f8391869aafab">nnn</a>,</div>
|
|
<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  I.data() + q0 * crit.<a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a3bb11e873707a812999f8391869aafab">nnn</a>);</div>
|
|
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  }</div>
|
|
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  }</div>
|
|
<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> </div>
|
|
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <span class="keywordtype">double</span> t_search = (<a class="code" href="namespacefaiss.html#af2a71f7d5402ae02ce169a4cc83020eb">getmillisecs</a>() - t0) / 1e3;</div>
|
|
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> </div>
|
|
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <span class="keywordtype">double</span> perf = crit.<a class="code" href="structfaiss_1_1AutoTuneCriterion.html#a9084449e216b331c5f753a10c6de6a47">evaluate</a> (D.data(), I.data());</div>
|
|
<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> </div>
|
|
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  <span class="keywordtype">bool</span> keep = ops-><a class="code" href="structfaiss_1_1OperatingPoints.html#a7afabe0576800255eeec680486cb30df">add</a> (perf, t_search, <a class="code" href="structfaiss_1_1ParameterSpace.html#a7bb416dbab456bb1ecd9ace433fa5312">combination_name</a> (cno), cno);</div>
|
|
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> </div>
|
|
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <span class="keywordflow">if</span> (<a class="code" href="structfaiss_1_1ParameterSpace.html#a7a9f2292c4e0ac3aad569434edea87b0">verbose</a>)</div>
|
|
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  printf(<span class="stringliteral">" perf %.3f t %.3f %s\n"</span>, perf, t_search,</div>
|
|
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  keep ? <span class="stringliteral">"*"</span> : <span class="stringliteral">""</span>);</div>
|
|
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  }</div>
|
|
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> }</div>
|
|
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> </div>
|
|
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="comment">/***************************************************************</span></div>
|
|
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="comment"> * index_factory</span></div>
|
|
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="comment"> ***************************************************************/</span></div>
|
|
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> </div>
|
|
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="keyword">namespace </span>{</div>
|
|
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> </div>
|
|
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="keyword">struct </span>VTChain {</div>
|
|
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  std::vector<VectorTransform *> chain;</div>
|
|
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  ~VTChain () {</div>
|
|
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < chain.size(); i++) {</div>
|
|
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <span class="keyword">delete</span> chain[i];</div>
|
|
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  }</div>
|
|
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  }</div>
|
|
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> };</div>
|
|
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> </div>
|
|
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="comment"></span></div>
|
|
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="comment">/// what kind of training does this coarse quantizer require?</span></div>
|
|
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="comment"></span><span class="keywordtype">char</span> get_trains_alone(<span class="keyword">const</span> Index *coarse_quantizer) {</div>
|
|
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  <span class="keywordflow">return</span></div>
|
|
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  <span class="keyword">dynamic_cast<</span><span class="keyword">const </span>MultiIndexQuantizer*<span class="keyword">></span>(coarse_quantizer) ? 1 :</div>
|
|
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  0;</div>
|
|
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> }</div>
|
|
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> </div>
|
|
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> </div>
|
|
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> }</div>
|
|
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> </div>
|
|
<div class="line"><a name="l00668"></a><span class="lineno"><a class="line" href="namespacefaiss.html#a0c95ec47726f2ce3fb668dcb1f9a3317"> 668</a></span> <a class="code" href="structfaiss_1_1Index.html">Index</a> *<a class="code" href="namespacefaiss.html#a0c95ec47726f2ce3fb668dcb1f9a3317">index_factory</a> (<span class="keywordtype">int</span> d, <span class="keyword">const</span> <span class="keywordtype">char</span> *description_in, <a class="code" href="namespacefaiss.html#afd12191c638da74760ff397cf319752c">MetricType</a> metric)</div>
|
|
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> {</div>
|
|
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  VTChain vts;</div>
|
|
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <a class="code" href="structfaiss_1_1Index.html">Index</a> *coarse_quantizer = <span class="keyword">nullptr</span>;</div>
|
|
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <a class="code" href="structfaiss_1_1Index.html">Index</a> *index = <span class="keyword">nullptr</span>;</div>
|
|
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  <span class="keywordtype">bool</span> add_idmap = <span class="keyword">false</span>;</div>
|
|
<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <span class="keywordtype">bool</span> make_IndexRefineFlat = <span class="keyword">false</span>;</div>
|
|
<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> </div>
|
|
<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <a class="code" href="structfaiss_1_1ScopeDeleter1.html">ScopeDeleter1<Index></a> del_coarse_quantizer, del_index;</div>
|
|
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> </div>
|
|
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  <span class="keywordtype">char</span> description[strlen(description_in) + 1];</div>
|
|
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <span class="keywordtype">char</span> *ptr;</div>
|
|
<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  memcpy (description, description_in, strlen(description_in) + 1);</div>
|
|
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> </div>
|
|
<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  <span class="keywordtype">int</span> ncentroids = -1;</div>
|
|
<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> </div>
|
|
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <span class="keywordflow">for</span> (<span class="keywordtype">char</span> *tok = strtok_r (description, <span class="stringliteral">" ,"</span>, &ptr);</div>
|
|
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  tok;</div>
|
|
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  tok = strtok_r (<span class="keyword">nullptr</span>, <span class="stringliteral">" ,"</span>, &ptr)) {</div>
|
|
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  <span class="keywordtype">int</span> d_out, opq_M, nbit, M, M2;</div>
|
|
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <span class="keywordtype">char</span> option[100];</div>
|
|
<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  std::string stok(tok);</div>
|
|
<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> </div>
|
|
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="comment">// to avoid mem leaks with exceptions:</span></div>
|
|
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  <span class="comment">// do all tests before any instanciation</span></div>
|
|
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> </div>
|
|
<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <a class="code" href="structfaiss_1_1VectorTransform.html">VectorTransform</a> *vt_1 = <span class="keyword">nullptr</span>;</div>
|
|
<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  <a class="code" href="structfaiss_1_1Index.html">Index</a> *coarse_quantizer_1 = <span class="keyword">nullptr</span>;</div>
|
|
<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  <a class="code" href="structfaiss_1_1Index.html">Index</a> *index_1 = <span class="keyword">nullptr</span>;</div>
|
|
<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> </div>
|
|
<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <span class="comment">// VectorTransforms</span></div>
|
|
<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <span class="keywordflow">if</span> (sscanf (tok, <span class="stringliteral">"PCA%d"</span>, &d_out) == 1) {</div>
|
|
<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  vt_1 = <span class="keyword">new</span> <a class="code" href="structfaiss_1_1PCAMatrix.html">PCAMatrix</a> (d, d_out);</div>
|
|
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  d = d_out;</div>
|
|
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sscanf (tok, <span class="stringliteral">"PCAR%d"</span>, &d_out) == 1) {</div>
|
|
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  vt_1 = <span class="keyword">new</span> <a class="code" href="structfaiss_1_1PCAMatrix.html">PCAMatrix</a> (d, d_out, 0, <span class="keyword">true</span>);</div>
|
|
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  d = d_out;</div>
|
|
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sscanf (tok, <span class="stringliteral">"PCAW%d"</span>, &d_out) == 1) {</div>
|
|
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  vt_1 = <span class="keyword">new</span> <a class="code" href="structfaiss_1_1PCAMatrix.html">PCAMatrix</a> (d, d_out, -0.5, <span class="keyword">false</span>);</div>
|
|
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  d = d_out;</div>
|
|
<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sscanf (tok, <span class="stringliteral">"PCAWR%d"</span>, &d_out) == 1) {</div>
|
|
<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  vt_1 = <span class="keyword">new</span> <a class="code" href="structfaiss_1_1PCAMatrix.html">PCAMatrix</a> (d, d_out, -0.5, <span class="keyword">true</span>);</div>
|
|
<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  d = d_out;</div>
|
|
<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sscanf (tok, <span class="stringliteral">"OPQ%d_%d"</span>, &opq_M, &d_out) == 2) {</div>
|
|
<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  vt_1 = <span class="keyword">new</span> <a class="code" href="structfaiss_1_1OPQMatrix.html">OPQMatrix</a> (d, opq_M, d_out);</div>
|
|
<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  d = d_out;</div>
|
|
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sscanf (tok, <span class="stringliteral">"OPQ%d"</span>, &opq_M) == 1) {</div>
|
|
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  vt_1 = <span class="keyword">new</span> <a class="code" href="structfaiss_1_1OPQMatrix.html">OPQMatrix</a> (d, opq_M);</div>
|
|
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (stok == <span class="stringliteral">"L2norm"</span>) {</div>
|
|
<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  vt_1 = <span class="keyword">new</span> <a class="code" href="structfaiss_1_1NormalizationTransform.html">NormalizationTransform</a> (d, 2.0);</div>
|
|
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> </div>
|
|
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> </div>
|
|
<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!coarse_quantizer &&</div>
|
|
<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  sscanf (tok, <span class="stringliteral">"IVF%d"</span>, &ncentroids) == 1) {</div>
|
|
<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <span class="keywordflow">if</span> (metric == METRIC_L2) {</div>
|
|
<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  coarse_quantizer_1 = <span class="keyword">new</span> <a class="code" href="structfaiss_1_1IndexFlatL2.html">IndexFlatL2</a> (d);</div>
|
|
<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  } <span class="keywordflow">else</span> { <span class="comment">// if (metric == METRIC_IP)</span></div>
|
|
<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  coarse_quantizer_1 = <span class="keyword">new</span> <a class="code" href="structfaiss_1_1IndexFlatIP.html">IndexFlatIP</a> (d);</div>
|
|
<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  }</div>
|
|
<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!coarse_quantizer && sscanf (tok, <span class="stringliteral">"IMI2x%d"</span>, &nbit) == 1) {</div>
|
|
<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  FAISS_THROW_IF_NOT_MSG (metric == METRIC_L2,</div>
|
|
<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  <span class="stringliteral">"MultiIndex not implemented for inner prod search"</span>);</div>
|
|
<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  coarse_quantizer_1 = <span class="keyword">new</span> <a class="code" href="structfaiss_1_1MultiIndexQuantizer.html">MultiIndexQuantizer</a> (d, 2, nbit);</div>
|
|
<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  ncentroids = 1 << (2 * nbit);</div>
|
|
<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (stok == <span class="stringliteral">"IDMap"</span>) {</div>
|
|
<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  add_idmap = <span class="keyword">true</span>;</div>
|
|
<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> </div>
|
|
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  <span class="comment">// IVFs</span></div>
|
|
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!index && stok == <span class="stringliteral">"Flat"</span>) {</div>
|
|
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  <span class="keywordflow">if</span> (coarse_quantizer) {</div>
|
|
<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  <span class="comment">// if there was an IVF in front, then it is an IVFFlat</span></div>
|
|
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  <a class="code" href="structfaiss_1_1IndexIVF.html">IndexIVF</a> *index_ivf = <span class="keyword">new</span> <a class="code" href="structfaiss_1_1IndexIVFFlat.html">IndexIVFFlat</a> (</div>
|
|
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  coarse_quantizer, d, ncentroids, metric);</div>
|
|
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  index_ivf-><a class="code" href="structfaiss_1_1IndexIVF.html#a28c248ae6a2b0991c012ab7abe13574a">quantizer_trains_alone</a> =</div>
|
|
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  get_trains_alone (coarse_quantizer);</div>
|
|
<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  index_ivf-><a class="code" href="structfaiss_1_1IndexIVF.html#a9746bcd42ecec1501f221e918b25e8e7">cp</a>.<a class="code" href="structfaiss_1_1ClusteringParameters.html#ad997fb511f574f7ddc69938c21612f8d">spherical</a> = metric == METRIC_INNER_PRODUCT;</div>
|
|
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  del_coarse_quantizer.release ();</div>
|
|
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  index_ivf-><a class="code" href="structfaiss_1_1IndexIVF.html#aed2e9757ad5f3c234fd8ad60175a2a73">own_fields</a> = <span class="keyword">true</span>;</div>
|
|
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  index_1 = index_ivf;</div>
|
|
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  } <span class="keywordflow">else</span> {</div>
|
|
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  index_1 = <span class="keyword">new</span> <a class="code" href="structfaiss_1_1IndexFlat.html">IndexFlat</a> (d, metric);</div>
|
|
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  }</div>
|
|
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!index && (stok == <span class="stringliteral">"SQ8"</span> || stok == <span class="stringliteral">"SQ4"</span>)) {</div>
|
|
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  <a class="code" href="structfaiss_1_1ScalarQuantizer.html#a1201dbd1611fa5c10782ade5d0e4952e">ScalarQuantizer::QuantizerType</a> qt =</div>
|
|
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  stok == <span class="stringliteral">"SQ8"</span> ? <a class="code" href="structfaiss_1_1ScalarQuantizer.html#a1201dbd1611fa5c10782ade5d0e4952ea1650389e3efa052ff60177d502328a2c">ScalarQuantizer::QT_8bit</a> :</div>
|
|
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  stok == <span class="stringliteral">"SQ4"</span> ? <a class="code" href="structfaiss_1_1ScalarQuantizer.html#a1201dbd1611fa5c10782ade5d0e4952eacd3d1bd71533a7bc52149e4b3d1db13b">ScalarQuantizer::QT_4bit</a> :</div>
|
|
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  <a class="code" href="structfaiss_1_1ScalarQuantizer.html#a1201dbd1611fa5c10782ade5d0e4952eacd3d1bd71533a7bc52149e4b3d1db13b">ScalarQuantizer::QT_4bit</a>;</div>
|
|
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  <span class="keywordflow">if</span> (coarse_quantizer) {</div>
|
|
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  <a class="code" href="structfaiss_1_1IndexIVFScalarQuantizer.html">IndexIVFScalarQuantizer</a> *index_ivf =</div>
|
|
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  <span class="keyword">new</span> <a class="code" href="structfaiss_1_1IndexIVFScalarQuantizer.html">IndexIVFScalarQuantizer</a> (</div>
|
|
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  coarse_quantizer, d, ncentroids, qt, metric);</div>
|
|
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  index_ivf-><a class="code" href="structfaiss_1_1IndexIVF.html#a28c248ae6a2b0991c012ab7abe13574a">quantizer_trains_alone</a> =</div>
|
|
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  get_trains_alone (coarse_quantizer);</div>
|
|
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  del_coarse_quantizer.release ();</div>
|
|
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  index_ivf-><a class="code" href="structfaiss_1_1IndexIVF.html#aed2e9757ad5f3c234fd8ad60175a2a73">own_fields</a> = <span class="keyword">true</span>;</div>
|
|
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  index_1 = index_ivf;</div>
|
|
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  } <span class="keywordflow">else</span> {</div>
|
|
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  index_1 = <span class="keyword">new</span> <a class="code" href="structfaiss_1_1IndexScalarQuantizer.html">IndexScalarQuantizer</a> (d, qt, metric);</div>
|
|
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  }</div>
|
|
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!index && sscanf (tok, <span class="stringliteral">"PQ%d+%d"</span>, &M, &M2) == 2) {</div>
|
|
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  FAISS_THROW_IF_NOT_MSG(coarse_quantizer,</div>
|
|
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  <span class="stringliteral">"PQ with + works only with an IVF"</span>);</div>
|
|
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  FAISS_THROW_IF_NOT_MSG(metric == METRIC_L2,</div>
|
|
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  <span class="stringliteral">"IVFPQR not implemented for inner product search"</span>);</div>
|
|
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  <a class="code" href="structfaiss_1_1IndexIVFPQR.html">IndexIVFPQR</a> *index_ivf = <span class="keyword">new</span> <a class="code" href="structfaiss_1_1IndexIVFPQR.html">IndexIVFPQR</a> (</div>
|
|
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  coarse_quantizer, d, ncentroids, M, 8, M2, 8);</div>
|
|
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  index_ivf-><a class="code" href="structfaiss_1_1IndexIVF.html#a28c248ae6a2b0991c012ab7abe13574a">quantizer_trains_alone</a> =</div>
|
|
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  get_trains_alone (coarse_quantizer);</div>
|
|
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  del_coarse_quantizer.release ();</div>
|
|
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  index_ivf-><a class="code" href="structfaiss_1_1IndexIVF.html#aed2e9757ad5f3c234fd8ad60175a2a73">own_fields</a> = <span class="keyword">true</span>;</div>
|
|
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  index_1 = index_ivf;</div>
|
|
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!index && sscanf (tok, <span class="stringliteral">"PQ%d%10s"</span>, &M, option) == 2) {</div>
|
|
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  std::string soption = option;</div>
|
|
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  <span class="comment">// np to disable polysemous trainign</span></div>
|
|
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  FAISS_THROW_IF_NOT(soption == <span class="stringliteral">""</span> || soption == <span class="stringliteral">"np"</span>);</div>
|
|
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="keywordflow">if</span> (coarse_quantizer) {</div>
|
|
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <a class="code" href="structfaiss_1_1IndexIVFPQ.html">IndexIVFPQ</a> *index_ivf = <span class="keyword">new</span> <a class="code" href="structfaiss_1_1IndexIVFPQ.html">IndexIVFPQ</a> (</div>
|
|
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  coarse_quantizer, d, ncentroids, M, 8);</div>
|
|
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  index_ivf-><a class="code" href="structfaiss_1_1IndexIVF.html#a28c248ae6a2b0991c012ab7abe13574a">quantizer_trains_alone</a> =</div>
|
|
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  get_trains_alone (coarse_quantizer);</div>
|
|
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  index_ivf-><a class="code" href="structfaiss_1_1Index.html#a8e18f641854b2bde83ecff0a2f9a6f4e">metric_type</a> = metric;</div>
|
|
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  index_ivf-><a class="code" href="structfaiss_1_1IndexIVF.html#a9746bcd42ecec1501f221e918b25e8e7">cp</a>.<a class="code" href="structfaiss_1_1ClusteringParameters.html#ad997fb511f574f7ddc69938c21612f8d">spherical</a> = metric == METRIC_INNER_PRODUCT;</div>
|
|
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  del_coarse_quantizer.release ();</div>
|
|
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  index_ivf-><a class="code" href="structfaiss_1_1IndexIVF.html#aed2e9757ad5f3c234fd8ad60175a2a73">own_fields</a> = <span class="keyword">true</span>;</div>
|
|
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  index_ivf-><a class="code" href="structfaiss_1_1IndexIVFPQ.html#a9d5373633df7a9bec4de69400b9adeed">do_polysemous_training</a> = soption != <span class="stringliteral">"np"</span>;</div>
|
|
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  index_1 = index_ivf;</div>
|
|
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  } <span class="keywordflow">else</span> {</div>
|
|
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <a class="code" href="structfaiss_1_1IndexPQ.html">IndexPQ</a> *index_pq = <span class="keyword">new</span> <a class="code" href="structfaiss_1_1IndexPQ.html">IndexPQ</a> (d, M, 8, metric);</div>
|
|
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  index_pq-><a class="code" href="structfaiss_1_1IndexPQ.html#af616e1f3c7bff7f62c2607b8079da43f">do_polysemous_training</a> = soption != <span class="stringliteral">"np"</span>;</div>
|
|
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  index_1 = index_pq;</div>
|
|
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  }</div>
|
|
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> </div>
|
|
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (stok == <span class="stringliteral">"RFlat"</span>) {</div>
|
|
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  make_IndexRefineFlat = <span class="keyword">true</span>;</div>
|
|
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  } <span class="keywordflow">else</span> {</div>
|
|
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  FAISS_THROW_FMT( <span class="stringliteral">"could not parse token \"%s\" in %s\n"</span>,</div>
|
|
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  tok, description_in);</div>
|
|
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  }</div>
|
|
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> </div>
|
|
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="keywordflow">if</span> (index_1 && add_idmap) {</div>
|
|
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  <a class="code" href="structfaiss_1_1IndexIDMap.html">IndexIDMap</a> *idmap = <span class="keyword">new</span> <a class="code" href="structfaiss_1_1IndexIDMap.html">IndexIDMap</a>(index_1);</div>
|
|
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  del_index.set (idmap);</div>
|
|
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  idmap-><a class="code" href="structfaiss_1_1IndexIDMap.html#affa8a764304410c96489c2b2e178bcdb">own_fields</a> = <span class="keyword">true</span>;</div>
|
|
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  index_1 = idmap;</div>
|
|
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  add_idmap = <span class="keyword">false</span>;</div>
|
|
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  }</div>
|
|
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> </div>
|
|
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  <span class="keywordflow">if</span> (vt_1) {</div>
|
|
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  vts.chain.push_back (vt_1);</div>
|
|
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  }</div>
|
|
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> </div>
|
|
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  <span class="keywordflow">if</span> (coarse_quantizer_1) {</div>
|
|
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  coarse_quantizer = coarse_quantizer_1;</div>
|
|
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  del_coarse_quantizer.set (coarse_quantizer);</div>
|
|
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  }</div>
|
|
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> </div>
|
|
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  <span class="keywordflow">if</span> (index_1) {</div>
|
|
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  index = index_1;</div>
|
|
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  del_index.set (index);</div>
|
|
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  }</div>
|
|
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  }</div>
|
|
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> </div>
|
|
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  FAISS_THROW_IF_NOT_FMT(index, <span class="stringliteral">"descrption %s did not generate an index"</span>,</div>
|
|
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  description_in);</div>
|
|
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> </div>
|
|
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  <span class="comment">// nothing can go wrong now</span></div>
|
|
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  del_index.release ();</div>
|
|
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  del_coarse_quantizer.release ();</div>
|
|
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> </div>
|
|
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  <span class="keywordflow">if</span> (add_idmap) {</div>
|
|
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  fprintf(stderr, <span class="stringliteral">"index_factory: WARNING: "</span></div>
|
|
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  <span class="stringliteral">"IDMap option not used\n"</span>);</div>
|
|
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  }</div>
|
|
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> </div>
|
|
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  <span class="keywordflow">if</span> (vts.chain.size() > 0) {</div>
|
|
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <a class="code" href="structfaiss_1_1IndexPreTransform.html">IndexPreTransform</a> *index_pt = <span class="keyword">new</span> <a class="code" href="structfaiss_1_1IndexPreTransform.html">IndexPreTransform</a> (index);</div>
|
|
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  index_pt-><a class="code" href="structfaiss_1_1IndexPreTransform.html#ae5ec3f184eb211e7d6e204082b52c8c0">own_fields</a> = <span class="keyword">true</span>;</div>
|
|
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  <span class="comment">// add from back</span></div>
|
|
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <span class="keywordflow">while</span> (vts.chain.size() > 0) {</div>
|
|
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  index_pt->prepend_transform (vts.chain.back());</div>
|
|
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  vts.chain.pop_back ();</div>
|
|
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  }</div>
|
|
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  index = index_pt;</div>
|
|
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  }</div>
|
|
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> </div>
|
|
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  <span class="keywordflow">if</span> (make_IndexRefineFlat) {</div>
|
|
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  <a class="code" href="structfaiss_1_1IndexRefineFlat.html">IndexRefineFlat</a> *index_rf = <span class="keyword">new</span> <a class="code" href="structfaiss_1_1IndexRefineFlat.html">IndexRefineFlat</a> (index);</div>
|
|
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  index_rf-><a class="code" href="structfaiss_1_1IndexRefineFlat.html#aaf0f6a094de0e9409effa81bedb9c7e2">own_fields</a> = <span class="keyword">true</span>;</div>
|
|
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  index = index_rf;</div>
|
|
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  }</div>
|
|
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> </div>
|
|
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="keywordflow">return</span> index;</div>
|
|
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> }</div>
|
|
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> </div>
|
|
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> </div>
|
|
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> </div>
|
|
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> </div>
|
|
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> }; <span class="comment">// namespace faiss</span></div>
|
|
<div class="ttc" id="structfaiss_1_1ParameterSpace_html_a57728d29c4785d9003b9cd564d0c51b2"><div class="ttname"><a href="structfaiss_1_1ParameterSpace.html#a57728d29c4785d9003b9cd564d0c51b2">faiss::ParameterSpace::explore</a></div><div class="ttdeci">void explore(Index *index, size_t nq, const float *xq, const AutoTuneCriterion &crit, OperatingPoints *ops) const </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8cpp_source.html#l00535">AutoTune.cpp:535</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexIVF_html"><div class="ttname"><a href="structfaiss_1_1IndexIVF.html">faiss::IndexIVF</a></div><div class="ttdef"><b>Definition:</b> <a href="IndexIVF_8h_source.html#l00045">IndexIVF.h:45</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1ParameterSpace_html_a334c1bb54bc2b70950a4a63950728cbb"><div class="ttname"><a href="structfaiss_1_1ParameterSpace.html#a334c1bb54bc2b70950a4a63950728cbb">faiss::ParameterSpace::parameter_ranges</a></div><div class="ttdeci">std::vector< ParameterRange > parameter_ranges</div><div class="ttdoc">all tunable parameters </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8h_source.html#l00134">AutoTune.h:134</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1OperatingPoint_html_aa13782d6d26168531764cb64da941ced"><div class="ttname"><a href="structfaiss_1_1OperatingPoint.html#aa13782d6d26168531764cb64da941ced">faiss::OperatingPoint::key</a></div><div class="ttdeci">std::string key</div><div class="ttdoc">key that identifies this op pt </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8h_source.html#l00089">AutoTune.h:89</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1ScalarQuantizer_html_a1201dbd1611fa5c10782ade5d0e4952e"><div class="ttname"><a href="structfaiss_1_1ScalarQuantizer.html#a1201dbd1611fa5c10782ade5d0e4952e">faiss::ScalarQuantizer::QuantizerType</a></div><div class="ttdeci">QuantizerType</div><div class="ttdef"><b>Definition:</b> <a href="IndexScalarQuantizer_8h_source.html#l00032">IndexScalarQuantizer.h:32</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexFlat_html"><div class="ttname"><a href="structfaiss_1_1IndexFlat.html">faiss::IndexFlat</a></div><div class="ttdef"><b>Definition:</b> <a href="IndexFlat_8h_source.html#l00023">IndexFlat.h:23</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1OperatingPoint_html_a2c023f1484e4748e3e97681bb1f4b78e"><div class="ttname"><a href="structfaiss_1_1OperatingPoint.html#a2c023f1484e4748e3e97681bb1f4b78e">faiss::OperatingPoint::cno</a></div><div class="ttdeci">long cno</div><div class="ttdoc">integer identifer </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8h_source.html#l00090">AutoTune.h:90</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexIVFPQR_html"><div class="ttname"><a href="structfaiss_1_1IndexIVFPQR.html">faiss::IndexIVFPQR</a></div><div class="ttdef"><b>Definition:</b> <a href="IndexIVFPQ_8h_source.html#l00168">IndexIVFPQ.h:168</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexPQ_html_af616e1f3c7bff7f62c2607b8079da43f"><div class="ttname"><a href="structfaiss_1_1IndexPQ.html#af616e1f3c7bff7f62c2607b8079da43f">faiss::IndexPQ::do_polysemous_training</a></div><div class="ttdeci">bool do_polysemous_training</div><div class="ttdoc">false = standard PQ </div><div class="ttdef"><b>Definition:</b> <a href="IndexPQ_8h_source.html#l00069">IndexPQ.h:69</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1OperatingPoints_html_a1702eeb680ce73ca8c1fd071955f0679"><div class="ttname"><a href="structfaiss_1_1OperatingPoints.html#a1702eeb680ce73ca8c1fd071955f0679">faiss::OperatingPoints::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8cpp_source.html#l00102">AutoTune.cpp:102</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1OperatingPoint_html"><div class="ttname"><a href="structfaiss_1_1OperatingPoint.html">faiss::OperatingPoint</a></div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8h_source.html#l00086">AutoTune.h:86</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexScalarQuantizer_html"><div class="ttname"><a href="structfaiss_1_1IndexScalarQuantizer.html">faiss::IndexScalarQuantizer</a></div><div class="ttdef"><b>Definition:</b> <a href="IndexScalarQuantizer_8h_source.html#l00082">IndexScalarQuantizer.h:82</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexIVF_html_a28c248ae6a2b0991c012ab7abe13574a"><div class="ttname"><a href="structfaiss_1_1IndexIVF.html#a28c248ae6a2b0991c012ab7abe13574a">faiss::IndexIVF::quantizer_trains_alone</a></div><div class="ttdeci">char quantizer_trains_alone</div><div class="ttdef"><b>Definition:</b> <a href="IndexIVF_8h_source.html#l00056">IndexIVF.h:56</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1OperatingPoints_html_ab146ed35f0c8f0c48983a054337a98e1"><div class="ttname"><a href="structfaiss_1_1OperatingPoints.html#ab146ed35f0c8f0c48983a054337a98e1">faiss::OperatingPoints::display</a></div><div class="ttdeci">void display(bool only_optimal=true) const </div><div class="ttdoc">easy-to-read output </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8cpp_source.html#l00221">AutoTune.cpp:221</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexPQ_html"><div class="ttname"><a href="structfaiss_1_1IndexPQ.html">faiss::IndexPQ</a></div><div class="ttdef"><b>Definition:</b> <a href="IndexPQ_8h_source.html#l00028">IndexPQ.h:28</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1OperatingPoint_html_ad218d1641b6e32d043a215542485a457"><div class="ttname"><a href="structfaiss_1_1OperatingPoint.html#ad218d1641b6e32d043a215542485a457">faiss::OperatingPoint::perf</a></div><div class="ttdeci">double perf</div><div class="ttdoc">performance measure (output of a Criterion) </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8h_source.html#l00087">AutoTune.h:87</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1ScalarQuantizer_html_a1201dbd1611fa5c10782ade5d0e4952eacd3d1bd71533a7bc52149e4b3d1db13b"><div class="ttname"><a href="structfaiss_1_1ScalarQuantizer.html#a1201dbd1611fa5c10782ade5d0e4952eacd3d1bd71533a7bc52149e4b3d1db13b">faiss::ScalarQuantizer::QT_4bit</a></div><div class="ttdoc">4 bits per component </div><div class="ttdef"><b>Definition:</b> <a href="IndexScalarQuantizer_8h_source.html#l00034">IndexScalarQuantizer.h:34</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1OperatingPoints_html"><div class="ttname"><a href="structfaiss_1_1OperatingPoints.html">faiss::OperatingPoints</a></div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8h_source.html#l00093">AutoTune.h:93</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1OperatingPoints_html_a3a0723e0900f7048ac9567341de5ee56"><div class="ttname"><a href="structfaiss_1_1OperatingPoints.html#a3a0723e0900f7048ac9567341de5ee56">faiss::OperatingPoints::t_for_perf</a></div><div class="ttdeci">double t_for_perf(double perf) const </div><div class="ttdoc">get time required to obtain a given performance measure </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8cpp_source.html#l00174">AutoTune.cpp:174</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1AutoTuneCriterion_html_a3bb11e873707a812999f8391869aafab"><div class="ttname"><a href="structfaiss_1_1AutoTuneCriterion.html#a3bb11e873707a812999f8391869aafab">faiss::AutoTuneCriterion::nnn</a></div><div class="ttdeci">idx_t nnn</div><div class="ttdoc">nb of NNs that the query should request </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8h_source.html#l00029">AutoTune.h:29</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1PCAMatrix_html"><div class="ttname"><a href="structfaiss_1_1PCAMatrix.html">faiss::PCAMatrix</a></div><div class="ttdef"><b>Definition:</b> <a href="VectorTransform_8h_source.html#l00124">VectorTransform.h:124</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexFlatL2_html"><div class="ttname"><a href="structfaiss_1_1IndexFlatL2.html">faiss::IndexFlatL2</a></div><div class="ttdef"><b>Definition:</b> <a href="IndexFlat_8h_source.html#l00079">IndexFlat.h:79</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1OperatingPoints_html_a7afabe0576800255eeec680486cb30df"><div class="ttname"><a href="structfaiss_1_1OperatingPoints.html#a7afabe0576800255eeec680486cb30df">faiss::OperatingPoints::add</a></div><div class="ttdeci">bool add(double perf, double t, const std::string &key, size_t cno=0)</div><div class="ttdoc">add a performance measure. Return whether it is an optimal point </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8cpp_source.html#l00112">AutoTune.cpp:112</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1OPQMatrix_html"><div class="ttname"><a href="structfaiss_1_1OPQMatrix.html">faiss::OPQMatrix</a></div><div class="ttdef"><b>Definition:</b> <a href="VectorTransform_8h_source.html#l00180">VectorTransform.h:180</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1ScopeDeleter1_html"><div class="ttname"><a href="structfaiss_1_1ScopeDeleter1.html">faiss::ScopeDeleter1</a></div><div class="ttdef"><b>Definition:</b> <a href="FaissException_8h_source.html#l00052">FaissException.h:52</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexIVFPQ_html_a9d5373633df7a9bec4de69400b9adeed"><div class="ttname"><a href="structfaiss_1_1IndexIVFPQ.html#a9d5373633df7a9bec4de69400b9adeed">faiss::IndexIVFPQ::do_polysemous_training</a></div><div class="ttdeci">bool do_polysemous_training</div><div class="ttdoc">reorder PQ centroids after training? </div><div class="ttdef"><b>Definition:</b> <a href="IndexIVFPQ_8h_source.html#l00034">IndexIVFPQ.h:34</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1ParameterSpace_html_aee8fd44e15656ba80fe98de4c65ed767"><div class="ttname"><a href="structfaiss_1_1ParameterSpace.html#aee8fd44e15656ba80fe98de4c65ed767">faiss::ParameterSpace::batchsize</a></div><div class="ttdeci">size_t batchsize</div><div class="ttdoc">maximum number of queries to submit at a time. </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8h_source.html#l00145">AutoTune.h:145</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1AutoTuneCriterion_html_a9084449e216b331c5f753a10c6de6a47"><div class="ttname"><a href="structfaiss_1_1AutoTuneCriterion.html#a9084449e216b331c5f753a10c6de6a47">faiss::AutoTuneCriterion::evaluate</a></div><div class="ttdeci">virtual double evaluate(const float *D, const idx_t *I) const =0</div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexPreTransform_html"><div class="ttname"><a href="structfaiss_1_1IndexPreTransform.html">faiss::IndexPreTransform</a></div><div class="ttdef"><b>Definition:</b> <a href="VectorTransform_8h_source.html#l00239">VectorTransform.h:239</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexIDMap_html"><div class="ttname"><a href="structfaiss_1_1IndexIDMap.html">faiss::IndexIDMap</a></div><div class="ttdef"><b>Definition:</b> <a href="MetaIndexes_8h_source.html#l00026">MetaIndexes.h:26</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1AutoTuneCriterion_html_adcfaafb3f1b3449e2cfd553f0f603a5b"><div class="ttname"><a href="structfaiss_1_1AutoTuneCriterion.html#adcfaafb3f1b3449e2cfd553f0f603a5b">faiss::AutoTuneCriterion::nq</a></div><div class="ttdeci">idx_t nq</div><div class="ttdoc">nb of queries this criterion is evaluated on </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8h_source.html#l00028">AutoTune.h:28</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexIVFFlat_html"><div class="ttname"><a href="structfaiss_1_1IndexIVFFlat.html">faiss::IndexIVFFlat</a></div><div class="ttdef"><b>Definition:</b> <a href="IndexIVF_8h_source.html#l00181">IndexIVF.h:181</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1OperatingPoints_html_a2829e78e01cc42c3a341622947663b31"><div class="ttname"><a href="structfaiss_1_1OperatingPoints.html#a2829e78e01cc42c3a341622947663b31">faiss::OperatingPoints::optimal_pts</a></div><div class="ttdeci">std::vector< OperatingPoint > optimal_pts</div><div class="ttdoc">optimal operating points, sorted by perf </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8h_source.html#l00098">AutoTune.h:98</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexFlatIP_html"><div class="ttname"><a href="structfaiss_1_1IndexFlatIP.html">faiss::IndexFlatIP</a></div><div class="ttdef"><b>Definition:</b> <a href="IndexFlat_8h_source.html#l00073">IndexFlat.h:73</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1AutoTuneCriterion_html_a174f0de8e6fd01905f5fa2170f5039d8"><div class="ttname"><a href="structfaiss_1_1AutoTuneCriterion.html#a174f0de8e6fd01905f5fa2170f5039d8">faiss::AutoTuneCriterion::set_groundtruth</a></div><div class="ttdeci">void set_groundtruth(int gt_nnn, const float *gt_D_in, const idx_t *gt_I_in)</div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8cpp_source.html#l00036">AutoTune.cpp:36</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1ParameterSpace_html_aeaa27a715fe3fceef5da18d894976833"><div class="ttname"><a href="structfaiss_1_1ParameterSpace.html#aeaa27a715fe3fceef5da18d894976833">faiss::ParameterSpace::add_range</a></div><div class="ttdeci">ParameterRange & add_range(const char *name)</div><div class="ttdoc">add a new parameter </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8cpp_source.html#l00322">AutoTune.cpp:322</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexRefineFlat_html"><div class="ttname"><a href="structfaiss_1_1IndexRefineFlat.html">faiss::IndexRefineFlat</a></div><div class="ttdef"><b>Definition:</b> <a href="IndexFlat_8h_source.html#l00103">IndexFlat.h:103</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1AutoTuneCriterion_html_a9b3a2242729a0873d255c1684881bbd4"><div class="ttname"><a href="structfaiss_1_1AutoTuneCriterion.html#a9b3a2242729a0873d255c1684881bbd4">faiss::AutoTuneCriterion::gt_nnn</a></div><div class="ttdeci">idx_t gt_nnn</div><div class="ttdoc">nb of GT NNs required to evaluate crterion </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8h_source.html#l00030">AutoTune.h:30</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1OperatingPoints_html_a84e6a4d2f595982b9d900c8585424f9b"><div class="ttname"><a href="structfaiss_1_1OperatingPoints.html#a84e6a4d2f595982b9d900c8585424f9b">faiss::OperatingPoints::all_to_gnuplot</a></div><div class="ttdeci">void all_to_gnuplot(const char *fname) const </div><div class="ttdoc">output to a format easy to digest by gnuplot </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8cpp_source.html#l00188">AutoTune.cpp:188</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexRefineFlat_html_aaf0f6a094de0e9409effa81bedb9c7e2"><div class="ttname"><a href="structfaiss_1_1IndexRefineFlat.html#aaf0f6a094de0e9409effa81bedb9c7e2">faiss::IndexRefineFlat::own_fields</a></div><div class="ttdeci">bool own_fields</div><div class="ttdoc">should the base index be deallocated? </div><div class="ttdef"><b>Definition:</b> <a href="IndexFlat_8h_source.html#l00110">IndexFlat.h:110</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1Index_html_a2a002388d2c081c2dbab8508dcefe73d"><div class="ttname"><a href="structfaiss_1_1Index.html#a2a002388d2c081c2dbab8508dcefe73d">faiss::Index::d</a></div><div class="ttdeci">int d</div><div class="ttdoc">vector dimension </div><div class="ttdef"><b>Definition:</b> <a href="Index_8h_source.html#l00064">Index.h:64</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1ProductQuantizer_html_aa61330eadb84772b71018b093773a5f9"><div class="ttname"><a href="structfaiss_1_1ProductQuantizer.html#aa61330eadb84772b71018b093773a5f9">faiss::ProductQuantizer::code_size</a></div><div class="ttdeci">size_t code_size</div><div class="ttdoc">byte per indexed vector </div><div class="ttdef"><b>Definition:</b> <a href="ProductQuantizer_8h_source.html#l00034">ProductQuantizer.h:34</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexIVFPQ_html"><div class="ttname"><a href="structfaiss_1_1IndexIVFPQ.html">faiss::IndexIVFPQ</a></div><div class="ttdef"><b>Definition:</b> <a href="IndexIVFPQ_8h_source.html#l00029">IndexIVFPQ.h:29</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexIVF_html_a9746bcd42ecec1501f221e918b25e8e7"><div class="ttname"><a href="structfaiss_1_1IndexIVF.html#a9746bcd42ecec1501f221e918b25e8e7">faiss::IndexIVF::cp</a></div><div class="ttdeci">ClusteringParameters cp</div><div class="ttdoc">to override default clustering params </div><div class="ttdef"><b>Definition:</b> <a href="IndexIVF_8h_source.html#l00059">IndexIVF.h:59</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1ParameterSpace_html_af6dc3b9c5631b509cbae99bf0f24170b"><div class="ttname"><a href="structfaiss_1_1ParameterSpace.html#af6dc3b9c5631b509cbae99bf0f24170b">faiss::ParameterSpace::thread_over_batches</a></div><div class="ttdeci">bool thread_over_batches</div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8h_source.html#l00149">AutoTune.h:149</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexIVF_html_aed2e9757ad5f3c234fd8ad60175a2a73"><div class="ttname"><a href="structfaiss_1_1IndexIVF.html#aed2e9757ad5f3c234fd8ad60175a2a73">faiss::IndexIVF::own_fields</a></div><div class="ttdeci">bool own_fields</div><div class="ttdoc">whether object owns the quantizer </div><div class="ttdef"><b>Definition:</b> <a href="IndexIVF_8h_source.html#l00057">IndexIVF.h:57</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1OperatingPoints_html_a48f457047b0511ecc531f250ef8b19c3"><div class="ttname"><a href="structfaiss_1_1OperatingPoints.html#a48f457047b0511ecc531f250ef8b19c3">faiss::OperatingPoints::all_pts</a></div><div class="ttdeci">std::vector< OperatingPoint > all_pts</div><div class="ttdoc">all operating points </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8h_source.html#l00095">AutoTune.h:95</a></div></div>
|
|
<div class="ttc" id="namespacefaiss_html_a8dbc652ba48d41f126b8815004899448"><div class="ttname"><a href="namespacefaiss.html#a8dbc652ba48d41f126b8815004899448">faiss::ranklist_intersection_size</a></div><div class="ttdeci">size_t ranklist_intersection_size(size_t k1, const long *v1, size_t k2, const long *v2_in)</div><div class="ttdef"><b>Definition:</b> <a href="utils_8cpp_source.html#l01574">utils.cpp:1574</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1AutoTuneCriterion_html"><div class="ttname"><a href="structfaiss_1_1AutoTuneCriterion.html">faiss::AutoTuneCriterion</a></div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8h_source.html#l00026">AutoTune.h:26</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1Index_html_a5590d847c5c2b958affd2a05e58a6f23"><div class="ttname"><a href="structfaiss_1_1Index.html#a5590d847c5c2b958affd2a05e58a6f23">faiss::Index::verbose</a></div><div class="ttdeci">bool verbose</div><div class="ttdoc">verbosity level </div><div class="ttdef"><b>Definition:</b> <a href="Index_8h_source.html#l00066">Index.h:66</a></div></div>
|
|
<div class="ttc" id="namespacefaiss_html_af2a71f7d5402ae02ce169a4cc83020eb"><div class="ttname"><a href="namespacefaiss.html#af2a71f7d5402ae02ce169a4cc83020eb">faiss::getmillisecs</a></div><div class="ttdeci">double getmillisecs()</div><div class="ttdoc">ms elapsed since some arbitrary epoch </div><div class="ttdef"><b>Definition:</b> <a href="utils_8cpp_source.html#l00074">utils.cpp:74</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1AutoTuneCriterion_html_a40e91caa9232a597c16fc946d0befd9b"><div class="ttname"><a href="structfaiss_1_1AutoTuneCriterion.html#a40e91caa9232a597c16fc946d0befd9b">faiss::AutoTuneCriterion::gt_D</a></div><div class="ttdeci">std::vector< float > gt_D</div><div class="ttdoc">Ground-truth distances (size nq * gt_nnn) </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8h_source.html#l00032">AutoTune.h:32</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexIVFScalarQuantizer_html"><div class="ttname"><a href="structfaiss_1_1IndexIVFScalarQuantizer.html">faiss::IndexIVFScalarQuantizer</a></div><div class="ttdef"><b>Definition:</b> <a href="IndexScalarQuantizer_8h_source.html#l00129">IndexScalarQuantizer.h:129</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1ParameterSpace_html_a7bb416dbab456bb1ecd9ace433fa5312"><div class="ttname"><a href="structfaiss_1_1ParameterSpace.html#a7bb416dbab456bb1ecd9ace433fa5312">faiss::ParameterSpace::combination_name</a></div><div class="ttdeci">std::string combination_name(size_t cno) const </div><div class="ttdoc">get string representation of the combination </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8cpp_source.html#l00277">AutoTune.cpp:277</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1Index_html_aced51b1ebc33c47ab3ae15ea906559a7"><div class="ttname"><a href="structfaiss_1_1Index.html#aced51b1ebc33c47ab3ae15ea906559a7">faiss::Index::search</a></div><div class="ttdeci">virtual void search(idx_t n, const float *x, idx_t k, float *distances, idx_t *labels) const =0</div></div>
|
|
<div class="ttc" id="structfaiss_1_1MultiIndexQuantizer_html"><div class="ttname"><a href="structfaiss_1_1MultiIndexQuantizer.html">faiss::MultiIndexQuantizer</a></div><div class="ttdef"><b>Definition:</b> <a href="IndexPQ_8h_source.html#l00135">IndexPQ.h:135</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1ParameterSpace_html_ab7039882ec68aabc6c52cff883f75c28"><div class="ttname"><a href="structfaiss_1_1ParameterSpace.html#ab7039882ec68aabc6c52cff883f75c28">faiss::ParameterSpace::update_bounds</a></div><div class="ttdeci">void update_bounds(size_t cno, const OperatingPoint &op, double *upper_bound_perf, double *lower_bound_t) const </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8cpp_source.html#l00521">AutoTune.cpp:521</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1VectorTransform_html"><div class="ttname"><a href="structfaiss_1_1VectorTransform.html">faiss::VectorTransform</a></div><div class="ttdef"><b>Definition:</b> <a href="VectorTransform_8h_source.html#l00028">VectorTransform.h:28</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexPreTransform_html_ae5ec3f184eb211e7d6e204082b52c8c0"><div class="ttname"><a href="structfaiss_1_1IndexPreTransform.html#ae5ec3f184eb211e7d6e204082b52c8c0">faiss::IndexPreTransform::own_fields</a></div><div class="ttdeci">bool own_fields</div><div class="ttdoc">! the sub-index </div><div class="ttdef"><b>Definition:</b> <a href="VectorTransform_8h_source.html#l00244">VectorTransform.h:244</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1ParameterSpace_html_a9304975f379738eda384385eace8ad76"><div class="ttname"><a href="structfaiss_1_1ParameterSpace.html#a9304975f379738eda384385eace8ad76">faiss::ParameterSpace::initialize</a></div><div class="ttdeci">virtual void initialize(const Index *index)</div><div class="ttdoc">initialize with reasonable parameters for the index </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8cpp_source.html#l00331">AutoTune.cpp:331</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1ParameterSpace_html_a7a9f2292c4e0ac3aad569434edea87b0"><div class="ttname"><a href="structfaiss_1_1ParameterSpace.html#a7a9f2292c4e0ac3aad569434edea87b0">faiss::ParameterSpace::verbose</a></div><div class="ttdeci">int verbose</div><div class="ttdoc">verbosity during exploration </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8h_source.html#l00139">AutoTune.h:139</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1OperatingPoints_html_a84baddccd8b803dee460739f8bcbc0c9"><div class="ttname"><a href="structfaiss_1_1OperatingPoints.html#a84baddccd8b803dee460739f8bcbc0c9">faiss::OperatingPoints::merge_with</a></div><div class="ttdeci">int merge_with(const OperatingPoints &other, const std::string &prefix="")</div><div class="ttdoc">add operating points from other to this, with a prefix to the keys </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8cpp_source.html#l00159">AutoTune.cpp:159</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1ParameterSpace_html_ac630c153ffd12f9994452c92fe57dc17"><div class="ttname"><a href="structfaiss_1_1ParameterSpace.html#ac630c153ffd12f9994452c92fe57dc17">faiss::ParameterSpace::set_index_parameter</a></div><div class="ttdeci">virtual void set_index_parameter(Index *index, const std::string &name, double val) const </div><div class="ttdoc">set one of the parameters </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8cpp_source.html#l00423">AutoTune.cpp:423</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1ParameterSpace_html_a488329e3c1f08b9980d8e0f9c1491c75"><div class="ttname"><a href="structfaiss_1_1ParameterSpace.html#a488329e3c1f08b9980d8e0f9c1491c75">faiss::ParameterSpace::n_combinations</a></div><div class="ttdeci">size_t n_combinations() const </div><div class="ttdoc">nb of combinations, = product of values sizes </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8cpp_source.html#l00268">AutoTune.cpp:268</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1Index_html_a8e18f641854b2bde83ecff0a2f9a6f4e"><div class="ttname"><a href="structfaiss_1_1Index.html#a8e18f641854b2bde83ecff0a2f9a6f4e">faiss::Index::metric_type</a></div><div class="ttdeci">MetricType metric_type</div><div class="ttdoc">type of metric this index uses for search </div><div class="ttdef"><b>Definition:</b> <a href="Index_8h_source.html#l00072">Index.h:72</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1ParameterSpace_html_a55783994cee46e9181bad2b3a7a973f4"><div class="ttname"><a href="structfaiss_1_1ParameterSpace.html#a55783994cee46e9181bad2b3a7a973f4">faiss::ParameterSpace::set_index_parameters</a></div><div class="ttdeci">void set_index_parameters(Index *index, size_t cno) const </div><div class="ttdoc">set a combination of parameters on an index </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8cpp_source.html#l00390">AutoTune.cpp:390</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1ScalarQuantizer_html_a1201dbd1611fa5c10782ade5d0e4952ea1650389e3efa052ff60177d502328a2c"><div class="ttname"><a href="structfaiss_1_1ScalarQuantizer.html#a1201dbd1611fa5c10782ade5d0e4952ea1650389e3efa052ff60177d502328a2c">faiss::ScalarQuantizer::QT_8bit</a></div><div class="ttdoc">8 bits per component </div><div class="ttdef"><b>Definition:</b> <a href="IndexScalarQuantizer_8h_source.html#l00033">IndexScalarQuantizer.h:33</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1Index_html"><div class="ttname"><a href="structfaiss_1_1Index.html">faiss::Index</a></div><div class="ttdef"><b>Definition:</b> <a href="Index_8h_source.html#l00060">Index.h:60</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexPQ_html_a4fa05430935a02b62b7c15c9840c42fea00f77a4f8209c30c3ef37ccfd3d0c10a"><div class="ttname"><a href="structfaiss_1_1IndexPQ.html#a4fa05430935a02b62b7c15c9840c42fea00f77a4f8209c30c3ef37ccfd3d0c10a">faiss::IndexPQ::ST_PQ</a></div><div class="ttdoc">asymmetric product quantizer (default) </div><div class="ttdef"><b>Definition:</b> <a href="IndexPQ_8h_source.html#l00076">IndexPQ.h:76</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1ParameterSpace_html_aa4bb1f0008689903aa936baee61d09d0"><div class="ttname"><a href="structfaiss_1_1ParameterSpace.html#aa4bb1f0008689903aa936baee61d09d0">faiss::ParameterSpace::display</a></div><div class="ttdeci">void display() const </div><div class="ttdoc">print a description on stdout </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8cpp_source.html#l00503">AutoTune.cpp:503</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexPQ_html_a4fa05430935a02b62b7c15c9840c42feaf06a0e6b53f9cbe1c791c6912169b738"><div class="ttname"><a href="structfaiss_1_1IndexPQ.html#a4fa05430935a02b62b7c15c9840c42feaf06a0e6b53f9cbe1c791c6912169b738">faiss::IndexPQ::ST_polysemous</a></div><div class="ttdoc">HE filter (using ht) + PQ combination. </div><div class="ttdef"><b>Definition:</b> <a href="IndexPQ_8h_source.html#l00080">IndexPQ.h:80</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexShards_html"><div class="ttname"><a href="structfaiss_1_1IndexShards.html">faiss::IndexShards</a></div><div class="ttdef"><b>Definition:</b> <a href="MetaIndexes_8h_source.html#l00086">MetaIndexes.h:86</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1ProductQuantizer_html"><div class="ttname"><a href="structfaiss_1_1ProductQuantizer.html">faiss::ProductQuantizer</a></div><div class="ttdef"><b>Definition:</b> <a href="ProductQuantizer_8h_source.html#l00025">ProductQuantizer.h:25</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1NormalizationTransform_html"><div class="ttname"><a href="structfaiss_1_1NormalizationTransform.html">faiss::NormalizationTransform</a></div><div class="ttdef"><b>Definition:</b> <a href="VectorTransform_8h_source.html#l00226">VectorTransform.h:226</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1ParameterSpace_html_a7cdedaf4bab33293771c4267d453a950"><div class="ttname"><a href="structfaiss_1_1ParameterSpace.html#a7cdedaf4bab33293771c4267d453a950">faiss::ParameterSpace::combination_ge</a></div><div class="ttdeci">bool combination_ge(size_t c1, size_t c2) const </div><div class="ttdoc">returns whether combinations c1 &gt;= c2 in the tuple sense </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8cpp_source.html#l00292">AutoTune.cpp:292</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1ClusteringParameters_html_ad997fb511f574f7ddc69938c21612f8d"><div class="ttname"><a href="structfaiss_1_1ClusteringParameters.html#ad997fb511f574f7ddc69938c21612f8d">faiss::ClusteringParameters::spherical</a></div><div class="ttdeci">bool spherical</div><div class="ttdoc">do we want normalized centroids? </div><div class="ttdef"><b>Definition:</b> <a href="Clustering_8h_source.html#l00029">Clustering.h:29</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1ParameterRange_html"><div class="ttname"><a href="structfaiss_1_1ParameterRange.html">faiss::ParameterRange</a></div><div class="ttdoc">possible values of a parameter, sorted from least to most expensive/accurate </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8h_source.html#l00125">AutoTune.h:125</a></div></div>
|
|
<div class="ttc" id="namespacefaiss_html_a0c95ec47726f2ce3fb668dcb1f9a3317"><div class="ttname"><a href="namespacefaiss.html#a0c95ec47726f2ce3fb668dcb1f9a3317">faiss::index_factory</a></div><div class="ttdeci">Index * index_factory(int d, const char *description_in, MetricType metric)</div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8cpp_source.html#l00668">AutoTune.cpp:668</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1ParameterSpace_html_a76aeae25b3269fb24a26194fbe013b86"><div class="ttname"><a href="structfaiss_1_1ParameterSpace.html#a76aeae25b3269fb24a26194fbe013b86">faiss::ParameterSpace::n_experiments</a></div><div class="ttdeci">int n_experiments</div><div class="ttdoc">nb of experiments during optimization (0 = try all combinations) </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8h_source.html#l00142">AutoTune.h:142</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1AutoTuneCriterion_html_af915fc4df215e3c8d9f71ff42d526144"><div class="ttname"><a href="structfaiss_1_1AutoTuneCriterion.html#af915fc4df215e3c8d9f71ff42d526144">faiss::AutoTuneCriterion::gt_I</a></div><div class="ttdeci">std::vector< idx_t > gt_I</div><div class="ttdoc">Ground-truth indexes (size nq * gt_nnn) </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8h_source.html#l00033">AutoTune.h:33</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1OperatingPoint_html_a886492ffe2b337539fadc798c8f4a6a8"><div class="ttname"><a href="structfaiss_1_1OperatingPoint.html#a886492ffe2b337539fadc798c8f4a6a8">faiss::OperatingPoint::t</a></div><div class="ttdeci">double t</div><div class="ttdoc">corresponding execution time (ms) </div><div class="ttdef"><b>Definition:</b> <a href="AutoTune_8h_source.html#l00088">AutoTune.h:88</a></div></div>
|
|
<div class="ttc" id="namespacefaiss_html_afd12191c638da74760ff397cf319752c"><div class="ttname"><a href="namespacefaiss.html#afd12191c638da74760ff397cf319752c">faiss::MetricType</a></div><div class="ttdeci">MetricType</div><div class="ttdoc">Some algorithms support both an inner product version and a L2 search version. </div><div class="ttdef"><b>Definition:</b> <a href="Index_8h_source.html#l00043">Index.h:43</a></div></div>
|
|
<div class="ttc" id="structfaiss_1_1IndexIDMap_html_affa8a764304410c96489c2b2e178bcdb"><div class="ttname"><a href="structfaiss_1_1IndexIDMap.html#affa8a764304410c96489c2b2e178bcdb">faiss::IndexIDMap::own_fields</a></div><div class="ttdeci">bool own_fields</div><div class="ttdoc">! the sub-index </div><div class="ttdef"><b>Definition:</b> <a href="MetaIndexes_8h_source.html#l00028">MetaIndexes.h:28</a></div></div>
|
|
</div><!-- fragment --></div><!-- contents -->
|
|
<!-- start footer part -->
|
|
<hr class="footer"/><address class="footer"><small>
|
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
</a> 1.8.5
|
|
</small></address>
|
|
</body>
|
|
</html>
|