转载请注明出处!

CUDA 版本10.2

#define FLANN_USE_CUDA
#include <flann/flann.hpp>
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include<iostream>
#include <fstream>#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <vector_functions.h>
//
void main()
{int tmpDataSize = 1000;float* tmpData(new float[tmpDataSize * 3]);float* tmpDataq(new float[tmpDataSize * 3]);int tmpNN = 4;for (int iPt = 0; iPt < tmpDataSize; ++iPt){tmpData[iPt * 3] = iPt;tmpData[iPt * 3 + 1] = iPt + 1;tmpData[iPt * 3 + 2] = iPt + 2;}for (int iPt = 0; iPt < tmpDataSize; ++iPt){tmpDataq[iPt * 3] = iPt + 1;tmpDataq[iPt * 3 + 1] = iPt + 1;tmpDataq[iPt * 3 + 2] = iPt + 1;}std::cout << "tmpData 012: " << tmpData[0] << " " << tmpData[1] << " " << tmpData[2] << std::endl;flann::Matrix<float> dataset(tmpData, tmpDataSize, 3);flann::Matrix<float> query(tmpDataq, tmpDataSize, 3);std::cout << "dataset 012: " << dataset[0][0] << " " << dataset[0][1] << " " << dataset[0][2] << std::endl;thrust::host_vector<float4> data_host(tmpDataSize);std::cout << "dataset.rows: " << dataset.rows << std::endl;for (int i = 0; i < dataset.rows; i++){data_host[i] = make_float4(dataset[i][0], dataset[i][1], dataset[i][2], 0);//std::cout << dataset[i][0]<<" "<< dataset[i][1]<<" "<< dataset[i][2] << std::endl;}thrust::device_vector<float4> data_device = data_host;float4 a = data_device[0];std::cout<<"data:" << a.x << a.y << a.z <<a.w<< std::endl;thrust::host_vector<float4> query_host(dataset.rows);/* thrust::host_vector<float4> query_host;query_host.resize(dataset.rows);*/for (int i = 0; i < dataset.rows; i++){query_host[i] = make_float4(query[i][0], query[i][1], query[i][2], 0);// std::cout << "query:" << query[i][0] << " " << query[i][1] << " " << query[i][2] << std::endl;}thrust::device_vector<float4> query_device = query_host;std::cout << "query:" << std::endl;float4 q = query_device[0];std::cout << q.x << q.y << q.z << q.w << std::endl;//0120flann::Matrix<float> data_device_matrix((float*)thrust::raw_pointer_cast(&data_device[0]), tmpDataSize, 3/*3D*/, 4 * sizeof(float)/*stride*/);flann::Matrix<float> query_device_matrix((float*)thrust::raw_pointer_cast(&query_device[0]), tmpDataSize, 3, 4 * sizeof(float));if (query_device_matrix.ptr() == nullptr || data_device_matrix.ptr() == nullptr)std::cout << "NULL" << std::endl;elsestd::cout << "NOT NULL PTR" << std::endl;int* indices = new int[query.rows * tmpNN];float* dists = new float[query.rows * tmpNN];//malloc or newflann::Matrix<int> cpu_indices(indices, query.rows, tmpNN);flann::Matrix<float> cpu_dists(dists, query.rows, tmpNN);//flann::KDTreeCuda3dIndexParams index_params;index_params["input_is_gpu_float4"] = true;/*flann::Index<flann::L2_Simple<float> > tmpGPUIndex(data_device_matrix, index_params);*/
#ifdef UNEXPECTEDLY_FINISHED_CRASHflann::Index<L2_Simple<float> > index(data_device_matrix, index_params);
#elseflann::KDTreeCuda3dIndex<flann::L2_Simple<float> /*flann::L2<float>*/ > GPUIndex(data_device_matrix, index_params);
#endif//Build KdTreeGPUIndex.buildIndex();thrust::device_vector<int> indices_device(query.rows * tmpNN);thrust::device_vector<float> dists_device(query.rows * tmpNN);flann::Matrix<int> indices_device_matrix((int*)thrust::raw_pointer_cast(&indices_device[0]), tmpDataSize, tmpNN);flann::Matrix<float> dists_device_matrix((float*)thrust::raw_pointer_cast(&dists_device[0]), tmpDataSize, tmpNN);cpu_indices.cols = tmpNN;cpu_dists.cols = tmpNN;flann::SearchParams sp;sp.matrices_in_gpu_ram = true;GPUIndex.knnSearch(query_device_matrix, indices_device_matrix, dists_device_matrix, tmpNN, sp);/* int* indices = new int[tmpDataSize * tmpNN];float* dists = new float[tmpDataSize * tmpNN];*/flann::Matrix<int> indices_host(new int[query.rows * tmpNN], query.rows, tmpNN);flann::Matrix<float> dists_host(new float[query.rows * tmpNN], query.rows, tmpNN);printf("size: %d", dists_device.size());std::cout << "dist:" << std::endl;float d0 = dists_device[tmpDataSize - 1];int i0 = indices_device[tmpDataSize - 1];printf("d0 i0: %f ,%d\n", d0, i0);std::cout << "size: " << dists_device.size() << std::endl;std::vector<float> dis_vector(dists_device.size());std::vector<int> ind_vector(indices_device.size());thrust::copy(dists_device.begin(), dists_device.end(), dis_vector.begin());thrust::copy(indices_device.begin(), indices_device.end(), ind_vector.begin());thrust::copy(dists_device.begin(), dists_device.end(), dists_host.ptr());thrust::copy(indices_device.begin(), indices_device.end(), indices_host.ptr());for (int i = 0; i < tmpDataSize; i++)for (int j = 0; j < tmpNN; j++){printf("dist_host: %f\n", dis_vector[tmpNN * i + j]);printf("indices_host: %d\n", ind_vector[tmpNN * i + j]);/*  std::cout << "dist_host[" << i << "]" << "[" << j << "]:" << dists_host[i][j] << std::endl;std::cout << "indices: " << indices_host[i][j] << std::endl;*/}// std::cout << "dist_vec[0].size: "<<cpu_dists[tmpNN*i] <<" "<< cpu_dists[tmpNN*i+1]<<" "<< cpu_dists[tmpNN * i + 2]<< std::endl;// K nearest Neighbor Search// tmpGPUIndex.knnSearch(query, indices, dists, 1, flann::SearchParams(-1));delete[] dataset.ptr();delete[] query.ptr();delete[] cpu_dists.ptr();delete[] cpu_indices.ptr();}

参考:FLANN快速近似最邻近算法官方指导文档_oxidane-lin的博客-CSDN博客FLANN快速近似最邻近算法官方指导文档IntroductionQuick Start 快速学习Downloading and compiling FLANN 下载和编译Upgrading from a previous version 版本升级Compiling FLANN with multithreading support 多线程支持Using FLANN 使用细则Using FLANN from C++flann::Indexflann::Index::buildIndexflann::Indexhttps://blog.csdn.net/weixin_45687825/article/details/110881552
https://www.pclcn.org/bbs/forum.php?mod=viewthread&tid=2166https://www.pclcn.org/bbs/forum.php?mod=viewthread&tid=2166

FLANN GPU 版本测试相关推荐

  1. tensorflow2.0 GPU 版本安装测试教程及新特性初探

    安装与测试 TensorFlow2.0安装: pip install tensorflow-gpu==2.2.0 -i https://pypi.douban.com/simple/ conda in ...

  2. python中GPU版本的opencv常用方法介绍

    引言 本篇是以python的视角介绍相关的函数还有自我使用中的一些问题,本想在这篇之前总结一下opencv编译的全过程,但遇到了太多坑,暂时不太想回看做过的笔记,所以这里主要总结python下GPU版 ...

  3. 详解python中GPU版本的opencv常用方法介绍

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接:好看站 http://www.nrso.net/ 高州阳光论坛https://www.hnthzk.com/ 引 ...

  4. TensorFlow2.0 系列开篇: Windows下GPU版本详细安装教程

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 [导读]今年三月谷歌在TensorFlow开发者峰会上宣布TensorFlow 2.0 ...

  5. Ubuntu tensorflow自定义GPU版本op节点

    参考:https://blog.csdn.net/qq_27637315/article/details/79114633 windows增加op节点: https://github.com/tens ...

  6. tensorflow运行环境linux,在ubuntu或者min运行环境下安装gpu版本的tensorflow

    转载请注明出处:blog.csdn.net/sproll 本文描述在ubuntu系列操作系统上安装gpu版本的tensorflow的过程. 0,准备工作 BIOS中关闭板载显卡,显示器接在nvidia ...

  7. Visual Tracking:运行ECO模型的GPU版本

    我之前发表过一片博客https://blog.csdn.net/ms961516792/article/details/81219707,写的是如何运行ECO模型,但是GPU版本跑不起来,今天又试了一 ...

  8. vs最好的版本_Win10 环境下,LightGBM GPU 版本的安装

    由于知乎的编辑器不能完全支持 MarkDown 语法, 所以部分文字可能无法正常排版, 如果你想追求更好的阅读体验, 请移步至该博客的简书的链接. Win10 平台下, LightGBM GPU 版本 ...

  9. 英伟达3060Ti安装GPU版本TensorFlow2.X

    查看Python与TensorFlow对应版本 安装GPU版本的TensorFlow的时候,我们需要考虑的一个问题是Python版本与TensorFlow版本的对应关系,可以参考下面这个链接: Pyt ...

最新文章

  1. 【鉴轻尘】你说你炒的了币,开发得了项目,然而这些你都知道吗?
  2. linux shell 检查端口开放
  3. mysql makefile_编译安装mysql,找不到makefile
  4. R语言实战(七)图形进阶
  5. 如何处理SAP HANA Web-Based Development Workbench的403 Forbidden错误
  6. 前端必备知识点—SVG
  7. plotloss记录
  8. 系统接口对接的进度工作应该谁来干_协同OA办公系统的选型要谨慎!浅谈其具体缘由有哪些...
  9. 24 MM配置-采购-配额管理-定义编码范围
  10. 关于Xcode的一些方法-15-05-02
  11. Elasticsearch自动补全(拼音查询自动补全)
  12. npm打包项目报错:npm ERR! A complete log of this run can be found in:npm ERR! C:\Users\AppData\Roa...
  13. 随便做各种题(无规律)
  14. 图表xAxis文字竖排显示
  15. Azure Blob Storage 基本用法上传/下载(Java)
  16. 3.1.2 消费者客户端的线程模型
  17. 【转】国内超级计算机发展情况简介
  18. 关键信息基础设施保护条例_五个图表:读懂网络安全等级保护制度与关键信息基础设施保护制度...
  19. 初学Java时使用记事本开发出现的中文乱码问题
  20. aardio web.blink打开网址

热门文章

  1. RMQ的ST算法(区间最值)
  2. 【Python知识点梳理】5.Python内置函数
  3. 在uniapp的webview组件引用的网页内如何实时定位
  4. jquery时间计时器
  5. Oracle Primavera P6 单机版SQLite的使用(Professional)
  6. 牛津大学计算机学申请条件,牛津大学申请条件:本科课程要求解析!
  7. go语言linux下载文件,linux-Golang安装包下载及环境配置
  8. Windows OpenGL ES 图像绿幕抠图
  9. CentOS8系统开机停留1m30s的问题如何解决?
  10. 下载好的avi格式怎么快速转换成mp4格式