<divclass="line"><aname="l00005"></a><spanclass="lineno"> 5</span> <spanclass="comment"> * This source code is licensed under the BSD+Patents license found in the</span></div>
<divclass="line"><aname="l00006"></a><spanclass="lineno"> 6</span> <spanclass="comment"> * LICENSE file in the root directory of this source tree.</span></div>
<divclass="line"><aname="l00037"></a><spanclass="lineno"> 37</span> <spanclass="stringliteral">"float16 unsupported; need CUDA SDK >= 7.5"</span>);</div>
<divclass="line"><aname="l00058"></a><spanclass="lineno"> 58</span> <spanclass="stringliteral">"float16 unsupported; need CUDA SDK >= 7.5"</span>);</div>
<divclass="line"><aname="l00061"></a><spanclass="lineno"> 61</span> <spanclass="comment">// We haven't trained ourselves, so don't construct the IVFFlat</span></div>
<divclass="line"><aname="l00062"></a><spanclass="lineno"> 62</span> <spanclass="comment">// index yet</span></div>
<divclass="line"><aname="l00092"></a><spanclass="lineno"> 92</span> <spanclass="comment">// Otherwise, we can populate ourselves from the other index</span></div>
<divclass="line"><aname="l00107"></a><spanclass="lineno"> 107</span> <spanclass="comment">// GPU index can only support max int entries per list</span></div>
<divclass="line"><aname="l00110"></a><spanclass="lineno"> 110</span> <spanclass="stringliteral">"GPU inverted list can only support "</span></div>
<divclass="line"><aname="l00116"></a><spanclass="lineno"> 116</span>  i, (<spanclass="keyword">const</span><spanclass="keywordtype">float</span>*)(ivf->get_codes(i)),</div>
<divclass="line"><aname="l00125"></a><spanclass="lineno"> 125</span> <spanclass="comment">// We must have the indices in order to copy to ourselves</span></div>
<divclass="line"><aname="l00127"></a><spanclass="lineno"> 127</span> <spanclass="stringliteral">"Cannot copy to CPU as GPU index doesn't retain "</span></div>
<divclass="line"><aname="l00140"></a><spanclass="lineno"> 140</span> <spanclass="keywordflow">for</span> (<spanclass="keywordtype">int</span> i = 0; i <<aclass="code"href="classfaiss_1_1gpu_1_1GpuIndexIVF.html#aba606c141e714fab843493cc58167494">nlist_</a>; ++i) {</div>
<divclass="line"><aname="l00142"></a><spanclass="lineno"> 142</span>  i, index_-><aclass="code"href="classfaiss_1_1gpu_1_1IVFBase.html#a4a4ed220b9433aa788ed32db8f20a9db">getListIndices</a>(i).size(),</div>
<divclass="line"><aname="l00187"></a><spanclass="lineno"> 187</span> <spanclass="comment">// The quantizer is now trained; construct the IVF index</span></div>
<divclass="line"><aname="l00206"></a><spanclass="lineno"> 206</span> <spanclass="comment">// Device is already set in GpuIndex::addInternal_</span></div>
<divclass="line"><aname="l00217"></a><spanclass="lineno"> 217</span>  {(int) n, index_-><aclass="code"href="classfaiss_1_1gpu_1_1IVFBase.html#a4d44e8aebc380b7c846a8d8e6e835540">getDim</a>()});</div>
<divclass="line"><aname="l00227"></a><spanclass="lineno"> 227</span> <spanclass="comment">// Not all vectors may be able to be added (some may contain NaNs</span></div>
<divclass="line"><aname="l00238"></a><spanclass="lineno"> 238</span> <spanclass="comment">// Device is already set in GpuIndex::search</span></div>
<divclass="line"><aname="l00244"></a><spanclass="lineno"> 244</span> <spanclass="comment">// Make sure arguments are on the device we desire; use temporary</span></div>
<divclass="line"><aname="l00245"></a><spanclass="lineno"> 245</span> <spanclass="comment">// memory allocations to move it if necessary</span></div>
<divclass="line"><aname="l00251"></a><spanclass="lineno"> 251</span>  {(int) n, this-><aclass="code"href="structfaiss_1_1Index.html#a2a002388d2c081c2dbab8508dcefe73d">d</a>});</div>
<divclass="ttc"id="classfaiss_1_1gpu_1_1GpuResources_html_aa0354aa570c24e17a9f8a6a45b153ed2"><divclass="ttname"><ahref="classfaiss_1_1gpu_1_1GpuResources.html#aa0354aa570c24e17a9f8a6a45b153ed2">faiss::gpu::GpuResources::getDefaultStreamCurrentDevice</a></div><divclass="ttdeci">cudaStream_t getDefaultStreamCurrentDevice()</div><divclass="ttdoc">Calls getDefaultStream with the current device. </div><divclass="ttdef"><b>Definition:</b><ahref="GpuResources_8cpp_source.html#l00024">GpuResources.cpp:24</a></div></div>
<divclass="ttc"id="structfaiss_1_1ArrayInvertedLists_html"><divclass="ttname"><ahref="structfaiss_1_1ArrayInvertedLists.html">faiss::ArrayInvertedLists</a></div><divclass="ttdoc">simple (default) implementation as an array of inverted lists </div><divclass="ttdef"><b>Definition:</b><ahref="InvertedLists_8h_source.html#l00168">InvertedLists.h:168</a></div></div>
<divclass="ttc"id="classfaiss_1_1gpu_1_1GpuIndexIVFFlat_html_a3285302b227052fee57b3df10c2a482b"><divclass="ttname"><ahref="classfaiss_1_1gpu_1_1GpuIndexIVFFlat.html#a3285302b227052fee57b3df10c2a482b">faiss::gpu::GpuIndexIVFFlat::searchImpl_</a></div><divclass="ttdeci">void searchImpl_(faiss::Index::idx_t n, const float *x, faiss::Index::idx_t k, float *distances, faiss::Index::idx_t *labels) const override</div><divclass="ttdoc">Called from GpuIndex for search. </div><divclass="ttdef"><b>Definition:</b><ahref="GpuIndexIVFFlat_8cu_source.html#l00233">GpuIndexIVFFlat.cu:233</a></div></div>
<divclass="ttc"id="classfaiss_1_1gpu_1_1IVFBase_html_a4d44e8aebc380b7c846a8d8e6e835540"><divclass="ttname"><ahref="classfaiss_1_1gpu_1_1IVFBase.html#a4d44e8aebc380b7c846a8d8e6e835540">faiss::gpu::IVFBase::getDim</a></div><divclass="ttdeci">int getDim() const </div><divclass="ttdoc">Return the number of dimensions we are indexing. </div><divclass="ttdef"><b>Definition:</b><ahref="IVFBase_8cu_source.html#l00099">IVFBase.cu:99</a></div></div>
<divclass="ttc"id="structfaiss_1_1InvertedLists_html_a9bd256053ee360473842105460fe285f"><divclass="ttname"><ahref="structfaiss_1_1InvertedLists.html#a9bd256053ee360473842105460fe285f">faiss::InvertedLists::list_size</a></div><divclass="ttdeci">virtual size_t list_size(size_t list_no) const =0</div><divclass="ttdoc">get the size of a list </div></div>
<divclass="ttc"id="classfaiss_1_1gpu_1_1IVFBase_html_a02e1e2d080ee31bf7835f89b9f2a13a9"><divclass="ttname"><ahref="classfaiss_1_1gpu_1_1IVFBase.html#a02e1e2d080ee31bf7835f89b9f2a13a9">faiss::gpu::IVFBase::reserveMemory</a></div><divclass="ttdeci">void reserveMemory(size_t numVecs)</div><divclass="ttdoc">Reserve GPU memory in our inverted lists for this number of vectors. </div><divclass="ttdef"><b>Definition:</b><ahref="IVFBase_8cu_source.html#l00044">IVFBase.cu:44</a></div></div>
<divclass="ttc"id="classfaiss_1_1gpu_1_1GpuIndexIVFFlat_html_a64bd89e18b8199ae7a88066890b10a0e"><divclass="ttname"><ahref="classfaiss_1_1gpu_1_1GpuIndexIVFFlat.html#a64bd89e18b8199ae7a88066890b10a0e">faiss::gpu::GpuIndexIVFFlat::addImpl_</a></div><divclass="ttdeci">void addImpl_(faiss::Index::idx_t n, const float *x, const faiss::Index::idx_t *ids) override</div><divclass="ttdoc">Called from GpuIndex for add/add_with_ids. </div><divclass="ttdef"><b>Definition:</b><ahref="GpuIndexIVFFlat_8cu_source.html#l00203">GpuIndexIVFFlat.cu:203</a></div></div>
<divclass="ttc"id="classfaiss_1_1gpu_1_1GpuIndexIVFFlat_html_a3c5b3760acb01814892fe93c72f08304"><divclass="ttname"><ahref="classfaiss_1_1gpu_1_1GpuIndexIVFFlat.html#a3c5b3760acb01814892fe93c72f08304">faiss::gpu::GpuIndexIVFFlat::train</a></div><divclass="ttdeci">void train(Index::idx_t n, const float *x) override</div><divclass="ttdef"><b>Definition:</b><ahref="GpuIndexIVFFlat_8cu_source.html#l00173">GpuIndexIVFFlat.cu:173</a></div></div>
<divclass="ttc"id="classfaiss_1_1gpu_1_1GpuIndexIVF_html_a187bdcbbac02bf8fd0e6bb40a1c0426b"><divclass="ttname"><ahref="classfaiss_1_1gpu_1_1GpuIndexIVF.html#a187bdcbbac02bf8fd0e6bb40a1c0426b">faiss::gpu::GpuIndexIVF::nprobe_</a></div><divclass="ttdeci">int nprobe_</div><divclass="ttdoc">Number of inverted list probes per query. </div><divclass="ttdef"><b>Definition:</b><ahref="GpuIndexIVF_8h_source.html#l00090">GpuIndexIVF.h:90</a></div></div>
<divclass="ttc"id="classfaiss_1_1gpu_1_1GpuIndexIVFFlat_html_a329d7734f1285788d10c1fbf1f88d72f"><divclass="ttname"><ahref="classfaiss_1_1gpu_1_1GpuIndexIVFFlat.html#a329d7734f1285788d10c1fbf1f88d72f">faiss::gpu::GpuIndexIVFFlat::reserveMemory</a></div><divclass="ttdeci">void reserveMemory(size_t numVecs)</div><divclass="ttdoc">Reserve GPU memory in our inverted lists for this number of vectors. </div><divclass="ttdef"><b>Definition:</b><ahref="GpuIndexIVFFlat_8cu_source.html#l00070">GpuIndexIVFFlat.cu:70</a></div></div>
<divclass="ttc"id="classfaiss_1_1gpu_1_1GpuIndex_html_a67750633faa35677ee505a1e61cfe142"><divclass="ttname"><ahref="classfaiss_1_1gpu_1_1GpuIndex.html#a67750633faa35677ee505a1e61cfe142">faiss::gpu::GpuIndex::device_</a></div><divclass="ttdeci">const int device_</div><divclass="ttdoc">The GPU device we are resident on. </div><divclass="ttdef"><b>Definition:</b><ahref="GpuIndex_8h_source.html#l00093">GpuIndex.h:93</a></div></div>
<divclass="ttc"id="classfaiss_1_1gpu_1_1GpuIndex_html_a17b82a8a11783da6eb1b07c9aab98c36"><divclass="ttname"><ahref="classfaiss_1_1gpu_1_1GpuIndex.html#a17b82a8a11783da6eb1b07c9aab98c36">faiss::gpu::GpuIndex::resources_</a></div><divclass="ttdeci">GpuResources * resources_</div><divclass="ttdoc">Manages streans, cuBLAS handles and scratch memory for devices. </div><divclass="ttdef"><b>Definition:</b><ahref="GpuIndex_8h_source.html#l00090">GpuIndex.h:90</a></div></div>
<divclass="ttc"id="classfaiss_1_1gpu_1_1GpuIndexIVF_html_a1db0a796b8b2917d989952c5f07fbe55"><divclass="ttname"><ahref="classfaiss_1_1gpu_1_1GpuIndexIVF.html#a1db0a796b8b2917d989952c5f07fbe55">faiss::gpu::GpuIndexIVF::copyTo</a></div><divclass="ttdeci">void copyTo(faiss::IndexIVF *index) const </div><divclass="ttdoc">Copy what we have to the CPU equivalent. </div><divclass="ttdef"><b>Definition:</b><ahref="GpuIndexIVF_8cu_source.html#l00148">GpuIndexIVF.cu:148</a></div></div>
<divclass="ttc"id="structfaiss_1_1Index_html_a040c6aed1f224f3ea7bf58eebc0c31a4"><divclass="ttname"><ahref="structfaiss_1_1Index.html#a040c6aed1f224f3ea7bf58eebc0c31a4">faiss::Index::idx_t</a></div><divclass="ttdeci">long idx_t</div><divclass="ttdoc">all indices are this type </div><divclass="ttdef"><b>Definition:</b><ahref="Index_8h_source.html#l00064">Index.h:64</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVF_html_a4eb943aeb7df30d44ad9b665452bfcf7"><divclass="ttname"><ahref="structfaiss_1_1IndexIVF.html#a4eb943aeb7df30d44ad9b665452bfcf7">faiss::IndexIVF::replace_invlists</a></div><divclass="ttdeci">void replace_invlists(InvertedLists *il, bool own=false)</div><divclass="ttdoc">replace the inverted lists, old one is deallocated if own_invlists </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8cpp_source.html#l00486">IndexIVF.cpp:486</a></div></div>
<divclass="ttc"id="classfaiss_1_1gpu_1_1GpuIndexIVF_html_aba606c141e714fab843493cc58167494"><divclass="ttname"><ahref="classfaiss_1_1gpu_1_1GpuIndexIVF.html#aba606c141e714fab843493cc58167494">faiss::gpu::GpuIndexIVF::nlist_</a></div><divclass="ttdeci">int nlist_</div><divclass="ttdoc">Number of inverted lists that we manage. </div><divclass="ttdef"><b>Definition:</b><ahref="GpuIndexIVF_8h_source.html#l00087">GpuIndexIVF.h:87</a></div></div>
<divclass="ttc"id="structfaiss_1_1Index_html_a6970683faa021b7a6f1a0865c0d4eccd"><divclass="ttname"><ahref="structfaiss_1_1Index.html#a6970683faa021b7a6f1a0865c0d4eccd">faiss::Index::ntotal</a></div><divclass="ttdeci">idx_t ntotal</div><divclass="ttdoc">total nb of indexed vectors </div><divclass="ttdef"><b>Definition:</b><ahref="Index_8h_source.html#l00067">Index.h:67</a></div></div>
<divclass="ttc"id="classfaiss_1_1gpu_1_1GpuIndex_html_af304169eac7781b573f76d545f37b7d9"><divclass="ttname"><ahref="classfaiss_1_1gpu_1_1GpuIndex.html#af304169eac7781b573f76d545f37b7d9">faiss::gpu::GpuIndex::memorySpace_</a></div><divclass="ttdeci">const MemorySpace memorySpace_</div><divclass="ttdoc">The memory space of our primary storage on the GPU. </div><divclass="ttdef"><b>Definition:</b><ahref="GpuIndex_8h_source.html#l00096">GpuIndex.h:96</a></div></div>
<divclass="ttc"id="classfaiss_1_1gpu_1_1GpuIndexIVF_html_aaa7dd748e3cbd7ef68f2e384ac503eab"><divclass="ttname"><ahref="classfaiss_1_1gpu_1_1GpuIndexIVF.html#aaa7dd748e3cbd7ef68f2e384ac503eab">faiss::gpu::GpuIndexIVF::quantizer_</a></div><divclass="ttdeci">GpuIndexFlat * quantizer_</div><divclass="ttdoc">Quantizer for inverted lists. </div><divclass="ttdef"><b>Definition:</b><ahref="GpuIndexIVF_8h_source.html#l00093">GpuIndexIVF.h:93</a></div></div>
<divclass="ttc"id="classfaiss_1_1gpu_1_1IVFFlat_html_a6652ca90a8a30512104fc909f0a0a6b8"><divclass="ttname"><ahref="classfaiss_1_1gpu_1_1IVFFlat.html#a6652ca90a8a30512104fc909f0a0a6b8">faiss::gpu::IVFFlat::query</a></div><divclass="ttdeci">void query(Tensor< float, 2, true >&queries, int nprobe, int k, Tensor< float, 2, true >&outDistances, Tensor< long, 2, true >&outIndices)</div><divclass="ttdef"><b>Definition:</b><ahref="IVFFlat_8cu_source.html#l00286">IVFFlat.cu:286</a></div></div>
<divclass="ttc"id="classfaiss_1_1gpu_1_1IVFFlat_html_a78473b609750b8ec7dfe3d137f50c650"><divclass="ttname"><ahref="classfaiss_1_1gpu_1_1IVFFlat.html#a78473b609750b8ec7dfe3d137f50c650">faiss::gpu::IVFFlat::getListVectors</a></div><divclass="ttdeci">std::vector< float > getListVectors(int listId) const </div><divclass="ttdoc">Return the vectors of a particular list back to the CPU. </div><divclass="ttdef"><b>Definition:</b><ahref="IVFFlat_8cu_source.html#l00352">IVFFlat.cu:352</a></div></div>
<divclass="ttc"id="structfaiss_1_1Index_html_a8e18f641854b2bde83ecff0a2f9a6f4e"><divclass="ttname"><ahref="structfaiss_1_1Index.html#a8e18f641854b2bde83ecff0a2f9a6f4e">faiss::Index::metric_type</a></div><divclass="ttdeci">MetricType metric_type</div><divclass="ttdoc">type of metric this index uses for search </div><divclass="ttdef"><b>Definition:</b><ahref="Index_8h_source.html#l00074">Index.h:74</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVF_html_aa0e8fc5e04cbd8e0dde61f98bc7dd0bc"><divclass="ttname"><ahref="structfaiss_1_1IndexIVF.html#aa0e8fc5e04cbd8e0dde61f98bc7dd0bc">faiss::IndexIVF::invlists</a></div><divclass="ttdeci">InvertedLists * invlists</div><divclass="ttdoc">Acess to the actual data. </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8h_source.html#l00093">IndexIVF.h:93</a></div></div>
<divclass="ttc"id="classfaiss_1_1gpu_1_1IVFBase_html_a4a4ed220b9433aa788ed32db8f20a9db"><divclass="ttname"><ahref="classfaiss_1_1gpu_1_1IVFBase.html#a4a4ed220b9433aa788ed32db8f20a9db">faiss::gpu::IVFBase::getListIndices</a></div><divclass="ttdeci">std::vector< long > getListIndices(int listId) const </div><divclass="ttdoc">Return the list indices of a particular list back to the CPU. </div><divclass="ttdef"><b>Definition:</b><ahref="IVFBase_8cu_source.html#l00206">IVFBase.cu:206</a></div></div>
<divclass="ttc"id="classfaiss_1_1gpu_1_1GpuIndexIVF_html_a94c2c171f9a2d27085dea9101067bdf2"><divclass="ttname"><ahref="classfaiss_1_1gpu_1_1GpuIndexIVF.html#a94c2c171f9a2d27085dea9101067bdf2">faiss::gpu::GpuIndexIVF::copyFrom</a></div><divclass="ttdeci">void copyFrom(const faiss::IndexIVF *index)</div><divclass="ttdoc">Copy what we need from the CPU equivalent. </div><divclass="ttdef"><b>Definition:</b><ahref="GpuIndexIVF_8cu_source.html#l00080">GpuIndexIVF.cu:80</a></div></div>
<divclass="ttc"id="structfaiss_1_1Index_html_a6e92732617c4dbe364e7678dd8773a7f"><divclass="ttname"><ahref="structfaiss_1_1Index.html#a6e92732617c4dbe364e7678dd8773a7f">faiss::Index::is_trained</a></div><divclass="ttdeci">bool is_trained</div><divclass="ttdoc">set if the Index does not require training, or if training is done already </div><divclass="ttdef"><b>Definition:</b><ahref="Index_8h_source.html#l00071">Index.h:71</a></div></div>
<divclass="ttc"id="structfaiss_1_1gpu_1_1GpuIndexIVFConfig_html_af432221761d48e4753f501208a60264d"><divclass="ttname"><ahref="structfaiss_1_1gpu_1_1GpuIndexIVFConfig.html#af432221761d48e4753f501208a60264d">faiss::gpu::GpuIndexIVFConfig::indicesOptions</a></div><divclass="ttdeci">IndicesOptions indicesOptions</div><divclass="ttdoc">Index storage options for the GPU. </div><divclass="ttdef"><b>Definition:</b><ahref="GpuIndexIVF_8h_source.html#l00030">GpuIndexIVF.h:30</a></div></div>
<divclass="ttc"id="classfaiss_1_1gpu_1_1GpuIndexIVFFlat_html_a88676a893e9b44041e7a52327d960b54"><divclass="ttname"><ahref="classfaiss_1_1gpu_1_1GpuIndexIVFFlat.html#a88676a893e9b44041e7a52327d960b54">faiss::gpu::GpuIndexIVFFlat::reset</a></div><divclass="ttdeci">void reset() override</div><divclass="ttdoc">removes all elements from the database. </div><divclass="ttdef"><b>Definition:</b><ahref="GpuIndexIVFFlat_8cu_source.html#l00161">GpuIndexIVFFlat.cu:161</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVF_html_a46d1aeddb60643c5b3f096147c3e028f"><divclass="ttname"><ahref="structfaiss_1_1IndexIVF.html#a46d1aeddb60643c5b3f096147c3e028f">faiss::IndexIVF::code_size</a></div><divclass="ttdeci">size_t code_size</div><divclass="ttdoc">code size per vector in bytes </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8h_source.html#l00096">IndexIVF.h:96</a></div></div>
<divclass="ttc"id="namespacefaiss_html_afd12191c638da74760ff397cf319752c"><divclass="ttname"><ahref="namespacefaiss.html#afd12191c638da74760ff397cf319752c">faiss::MetricType</a></div><divclass="ttdeci">MetricType</div><divclass="ttdoc">Some algorithms support both an inner product version and a L2 search version. </div><divclass="ttdef"><b>Definition:</b><ahref="Index_8h_source.html#l00045">Index.h:45</a></div></div>