1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<!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: /tmp/faiss/gpu/GpuDistance.h 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>
<!-- 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 id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_af0e5773a0d3761542ab6067d117c294.html">gpu</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">GpuDistance.h</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> </div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#pragma once</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"></span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include "../Index.h"</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="keyword">namespace </span>faiss { <span class="keyword">namespace </span>gpu {</div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="keyword">class </span>GpuResources;</div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"></span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">/// A wrapper for gpu/impl/Distance.cuh to expose direct brute-force k-nearest</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/// neighbor searches on an externally-provided region of memory (e.g., from a</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">/// pytorch tensor).</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">/// The data (vectors, queries, outDistances, outIndices) can be resident on the</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment">/// GPU or the CPU, but all calculations are performed on the GPU. If the result</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/// buffers are on the CPU, results will be copied back when done.</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">///</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment">/// All GPU computation is performed on the current CUDA device, and ordered</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment">/// with respect to resources->getDefaultStreamCurrentDevice().</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment">///</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment">/// For each vector in `queries`, searches all of `vectors` to find its k</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment">/// nearest neighbors with respect to the given metric</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"></span><span class="keywordtype">void</span> bruteForceKnn(GpuResources* resources,</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <a class="code" href="namespacefaiss.html#afd12191c638da74760ff397cf319752c">faiss::MetricType</a> metric,</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="comment">// A region of memory size numVectors x dims, with dims</span></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="comment">// innermost</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">const</span> <span class="keywordtype">float</span>* vectors,</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keywordtype">int</span> numVectors,</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="comment">// A region of memory size numQueries x dims, with dims</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="comment">// innermost</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">const</span> <span class="keywordtype">float</span>* queries,</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordtype">int</span> numQueries,</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordtype">int</span> dims,</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordtype">int</span> k,</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="comment">// A region of memory size numQueries x k, with k</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="comment">// innermost</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordtype">float</span>* outDistances,</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="comment">// A region of memory size numQueries x k, with k</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="comment">// innermost</span></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <a class="code" href="structfaiss_1_1Index.html#a040c6aed1f224f3ea7bf58eebc0c31a4">faiss::Index::idx_t</a>* outIndices);</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> } } <span class="comment">// namespace</span></div>
<div class="ttc" id="structfaiss_1_1Index_html_a040c6aed1f224f3ea7bf58eebc0c31a4"><div class="ttname"><a href="structfaiss_1_1Index.html#a040c6aed1f224f3ea7bf58eebc0c31a4">faiss::Index::idx_t</a></div><div class="ttdeci">long idx_t</div><div class="ttdoc">all indices are this type </div><div class="ttdef"><b>Definition:</b> <a href="Index_8h_source.html#l00064">Index.h:64</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#l00045">Index.h:45</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>