ROS中调用CUDA
来源:互联网 发布:数据结构和算法分析pdf 编辑:程序博客网 时间:2024/05/22 16:42
网上有说.cpp调用cuda函数的,实际上ROS中是一样的,都是利用cmake进行编译。
举个例子,ROS中创建一个cpp文件,功能是调用GPU函数做单线程加法运算并且打印hello。
hello.cpp
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 extern "C" int func(); 5 int main(void) 6 { 7 func(); 8 printf("hello\n"); 9 return 0; 10 }
add.cu
#include <stdio.h>#include <stdlib.h>#include <cuda_runtime.h>#define DATA_SIZE 1048576int data[DATA_SIZE];void GenerateNumbers(int* number,int size){ srand(time(0)); for(int i = 0;i < size;i++) { number[i] = rand()%10; }}__global__ static void sumOfSquares(int *num,int* result,clock_t* time,float* costtime){ int sum = 0; int i; clock_t start = clock(); for(i = 0;i < DATA_SIZE;i++) { sum += num[i]*num[i]; } *result = sum; *time = clock() - start; *costtime = (float)(*time)/CLOCKS_PER_SEC;}extern "C" int func(){ int* gpudata,*result; clock_t* time; float* costtime; GenerateNumbers(data,DATA_SIZE); cudaMalloc((void**)&gpudata,sizeof(int)*DATA_SIZE); cudaMalloc((void**)&result,sizeof(int)); cudaMalloc((void**)&time,sizeof(clock_t)); cudaMalloc((void**)&costtime,sizeof(float)); cudaMemcpy(gpudata,data,sizeof(int)*DATA_SIZE,cudaMemcpyHostToDevice); sumOfSquares<<<1,1,0>>>(gpudata,result,time,costtime); float time_used; clock_t time_f; int sum; cudaMemcpy(&sum,result,sizeof(int),cudaMemcpyDeviceToHost); cudaMemcpy(&time_used,costtime,sizeof(float),cudaMemcpyDeviceToHost); cudaMemcpy(&time_f,time,sizeof(clock_t),cudaMemcpyDeviceToHost); time_used = time_used/900; printf("sum:[%d] time_used:[%lfs] time_f:[%ld]\n",sum,time_used,time_f); return 0;}
CMakeLists.txt
1 CMAKE_MINIMUM_REQUIRED(VERSION 2.8) 2 PROJECT(test_cuda) 3 INCLUDE(/home/super/opencv-3.2.0/cmake/FindCUDA.cmake) 4 CUDA_ADD_EXECUTABLE(test_cuda 5 add.cu hello.cpp)
解释一下,在.cpp中调用cuda函数时,需要这样声明extern “C” int func();
而在add.cu中同样需要这样定义
extern “C” int func()
{
}
CMakeLists.txt 需要添加FindCUDA.cmake支持,这个在linux下直接find . -name FindCUDA.cmake,查看安装的cmake是否支持CUDA。
阅读全文
0 0
- ROS中调用CUDA
- MATLAB中调用cuda程序
- MATLAB中调用cuda程序
- VS2010 + QT中调用CUDA
- 【VS开发】【CUDA开发】如何在MFC中调用CUDA
- 如何在VS2010 + QT中调用CUDA
- 在.c文件中调用cuda函数
- 在.c文件中调用cuda函数
- Matlab中调用CUDA加速的方法……
- 为什么在cuda中调用__syncthreads()显示未定义标识符
- OpenCV编程中调用CUDA时,CMakeLists的编写
- C#调用CUDA DLL
- java 调用cuda程序
- CUDA函数库调用问题解决
- CUDA: DLL封装调用
- CUDA函数库调用问题解决
- theano调用cuda加速
- CUDA常见问题之无法在c文件中调用cu文件中定义的函数
- Python 数据处理实践(1)--遍历文件和map()函数
- Ubuntu配置开发环境
- 为什么要重写hashcode() 方法
- 如何生成RDF数据?
- Android开发——Intent中的各种FLAG
- ROS中调用CUDA
- python之正则表达式以及网络爬虫
- 关于 boost 多线程(一)
- 怎么解决Ubuntu中"检测到系统程序错误"的错误
- Shiro 配置简单的HelloWord实例
- 机器学习中的数学(1)-回归(regression)、梯度下降(gradient descent)
- svn命令行回滚到指定版本
- pyinstaller UI python 的一个打包exe工具
- OffsetDateTime工具类