目录

  • 写在前面
  • 目录结构
  • 完整代码
  • 运行过程
  • 碰到的坑

写在前面

因为要用TensorRT写自定义层,一定会用到cuda,所以学一下。

目录结构

– <my_dir> – fuc.cu
                               fuc.h
                               test.cu
                               CMakeLists.txt

完整代码

  • fuc.cu
#include <stdio.h>
#include "fuc.h"__global__ void kernel()
{printf("hello world!");
}
  • fuc.h
extern __global__ void kernel();
  • test.cu
#include <stdio.h>
#include "fuc.h"int main(void)
{kernel<<<1,1>>>();cudaDeviceSynchronize();printf("hello world!\n");return 0;
}
  • CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(helloworld C CXX)# find_package(<Name>)命令首先会在模块路径中寻找 Find<name>.cmake,这是查找库的一个典型方式
# QUIET 可选字段,表示如果查找失败,不会在屏幕进行输出(但是如果指定了REQUIRED字段,则QUIET无效,仍然会输出查找失败提示语)
find_package(CUDA QUIET REQUIRED)
# 下面这行注释掉的代码和上面那行代码起到一样的作用
# include(/usr/share/cmake-3.5/Modules/FindCUDA.cmake)set(CUDA_INCLUDE_DIRS /usr/local/a-9.0/include)
set(CUDA_LIBRARY_DIRS /usr/local/cuda-9.0/lib64)include_directories(${CUDA_INCLUDE_DIRS})
link_directories(${CUDA_LIBRARY_DIRS})cuda_add_executable(helloworld test.cu fuc.cu)

运行过程

  • cd <my_dir>
  • mkdir build && pushd build
  • cmake ..
  • make
  • ./helloworld 得到如下图输出:
  • popd

碰到的坑

  • 不要把test.cu文件命名为test.cpp,因为cpp文件会使用c++编译器来处理,我们在test.cpp中include了func.h,同时在func.h中声明了__global__函数。
  • 使用如下CMakeLists.txt在make的时候会报“main函数重复定义”的错误,我还没懂是为什么。
cmake_minimum_required(VERSION 2.8)
project(helloworld C CXX)
find_package(CUDA QUIET REQUIRED)set(CUDA_INCLUDE_DIRS /usr/local/a-9.0/include)
set(CUDA_LIBRARY_DIRS /usr/local/cuda-9.0/lib64)include_directories(${CUDA_INCLUDE_DIRS})
link_directories(${CUDA_LIBRARY_DIRS})# 原:
# cuda_add_executable(helloworld test.cu fuc.cu)# 改为以下两行:
file(GLOB_RECURSE CURRENT_INCLUDE ./*.h ./*.hpp ./*.cuh)
cuda_add_executable(cuda_test ${CURRENT_INCLUDE})

cuda学习笔记1 - hello world实战相关推荐

  1. CUDA学习笔记之 CUDA存储器模型

    CUDA学习笔记之 CUDA存储器模型 标签: cuda存储bindingcache编程api 2010-12-14 01:33 1223人阅读 评论(0) 收藏 举报 分类: CUDA(26) GP ...

  2. CUDA学习笔记之程序优化

    CUDA学习笔记之程序优化 标签: cuda优化conflict存储算法数学计算 2010-01-05 17:18 5035人阅读 评论(4) 收藏 举报 分类: CUDA(6) 版权声明:本文为博主 ...

  3. 深度学习(三十六)异构计算CUDA学习笔记(1)

    异构计算CUDA学习笔记(1) 原文地址:http://blog.csdn.net/hjimce/article/details/51506207 作者:hjimce 近日因为感觉自己在深度学习工程化 ...

  4. CUDA学习笔记(持续更新——蜗速)

    CUDA学习笔记(持续更新--蜗速) 1.CUDA 程序实现流程如下 2.内存管理 3.核函数 4.全局数据访问唯一索引 5.设备管理 附录代码 1.CUDA 程序实现流程如下 将数据从CPU内存拷贝 ...

  5. cuda学习笔记5——CUDA实现图像形态学腐蚀、膨胀

    cuda学习笔记5--CUDA实现图像形态学腐蚀.膨胀 代码 linux如何编译cuda和opencv代码 耗时情况 代码 #include "cuda_runtime.h" #i ...

  6. 【一文弄懂】张正友标定法-完整学习笔记-从原理到实战

    张正友标定法-完整学习笔记-从原理到实战 文章目录 张正友标定法-完整学习笔记-从原理到实战 (零)前言: 1 为什么需要标定? 2 相机标定的已知条件和待求解是什么? 标定前的已知条件: 待求信息: ...

  7. Cuda学习笔记(一)——sm流处理器簇对blocks的调度策略

    由于GPU目前在各行各业的广泛应用,无论是深度学习.大数据.云计算等都离不开GPU的并行加速,前阵子自学了Cuda-c编程,希望将来的研究工作能够用得上. Cuda系列总共有4篇,这里主要用于记录本人 ...

  8. 《童虎学习笔记》20分钟实战ProxySQL MGR高可用及读写分离架构

    本文章配套视频 https://www.ixigua.com/7086085500540289572?id=7087546160079962660 本专栏全部文章 https://blog.csdn. ...

  9. python3《机器学习实战系列》学习笔记----3.2 决策树实战

    前言 一.ID3算法构造决策树 1.1 背景 1.2 信息增益计算 1.3 递归生成决策树 二.使用Matplotlib注解绘制树形图 2.1 Matplotlib注解 2.2 构造注解树 三.测试和 ...

最新文章

  1. 为什么使用ES6生成器
  2. 《Python 黑科技》程序员必须会的代理ip小技巧
  3. java更改用户邮箱_git修改user.name 和user.email
  4. 718. 最长重复子数组(JavaScript)
  5. heidsql(mysql)安装教程和mysql修改密码
  6. Java面试题及答案整理(2022最新版)
  7. 关于fftshift引发的问题与思考
  8. 报表开发工具FastReport开源代码2020首发更新!邀您免费下载
  9. sola染毒文件恢复工具
  10. 你靠谱吗?看看“价值观”究竟有多重要
  11. UE4中的Spline用法
  12. civil3D地形导入AIW(设置投影坐标系)
  13. LeetCode——150. 逆波兰表达式求值(Evaluate Reverse Polish Notation)[中等]——分析及代码(Java)
  14. PS-给文字填充图片纹理
  15. 手写数字识别画板前后端实现 | Flask+深度神经网络
  16. 如何成为一名合格的程序员?
  17. 无人驾驶汽车的相关技术,无人驾驶相关技术知识
  18. 大专生出身?mysql-uroot-p
  19. 手机控制汽车无钥匙进入一键启动方案设计
  20. 美国4大移动运营商手机网络制式及频段

热门文章

  1. 云炬随笔20190701
  2. A humble heart2019-11-09
  3. [我的1024开源程序]30元写的广义误差分布函数
  4. C/C++中Static的作用详述 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。
  5. ubuntu/Linux下 提示“conda:未找到命令”
  6. ATT汇编leave指令
  7. kernel_mktime() 详解 —— Linux-0.11 学习笔记(四)
  8. 板子ping不通PC怎么办——韦东山嵌入式Linux学习笔记07
  9. 代码段间转移控制时的特权级检查(JMP/CALL)——《x86汇编语言:从实模式到保护模式》读书笔记28
  10. Unity3D ShaderLab 物体相交