cuda学习笔记1 - hello world实战
目录
- 写在前面
- 目录结构
- 完整代码
- 运行过程
- 碰到的坑
写在前面
因为要用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实战相关推荐
- CUDA学习笔记之 CUDA存储器模型
CUDA学习笔记之 CUDA存储器模型 标签: cuda存储bindingcache编程api 2010-12-14 01:33 1223人阅读 评论(0) 收藏 举报 分类: CUDA(26) GP ...
- CUDA学习笔记之程序优化
CUDA学习笔记之程序优化 标签: cuda优化conflict存储算法数学计算 2010-01-05 17:18 5035人阅读 评论(4) 收藏 举报 分类: CUDA(6) 版权声明:本文为博主 ...
- 深度学习(三十六)异构计算CUDA学习笔记(1)
异构计算CUDA学习笔记(1) 原文地址:http://blog.csdn.net/hjimce/article/details/51506207 作者:hjimce 近日因为感觉自己在深度学习工程化 ...
- CUDA学习笔记(持续更新——蜗速)
CUDA学习笔记(持续更新--蜗速) 1.CUDA 程序实现流程如下 2.内存管理 3.核函数 4.全局数据访问唯一索引 5.设备管理 附录代码 1.CUDA 程序实现流程如下 将数据从CPU内存拷贝 ...
- cuda学习笔记5——CUDA实现图像形态学腐蚀、膨胀
cuda学习笔记5--CUDA实现图像形态学腐蚀.膨胀 代码 linux如何编译cuda和opencv代码 耗时情况 代码 #include "cuda_runtime.h" #i ...
- 【一文弄懂】张正友标定法-完整学习笔记-从原理到实战
张正友标定法-完整学习笔记-从原理到实战 文章目录 张正友标定法-完整学习笔记-从原理到实战 (零)前言: 1 为什么需要标定? 2 相机标定的已知条件和待求解是什么? 标定前的已知条件: 待求信息: ...
- Cuda学习笔记(一)——sm流处理器簇对blocks的调度策略
由于GPU目前在各行各业的广泛应用,无论是深度学习.大数据.云计算等都离不开GPU的并行加速,前阵子自学了Cuda-c编程,希望将来的研究工作能够用得上. Cuda系列总共有4篇,这里主要用于记录本人 ...
- 《童虎学习笔记》20分钟实战ProxySQL MGR高可用及读写分离架构
本文章配套视频 https://www.ixigua.com/7086085500540289572?id=7087546160079962660 本专栏全部文章 https://blog.csdn. ...
- python3《机器学习实战系列》学习笔记----3.2 决策树实战
前言 一.ID3算法构造决策树 1.1 背景 1.2 信息增益计算 1.3 递归生成决策树 二.使用Matplotlib注解绘制树形图 2.1 Matplotlib注解 2.2 构造注解树 三.测试和 ...
最新文章
- 为什么使用ES6生成器
- 《Python 黑科技》程序员必须会的代理ip小技巧
- java更改用户邮箱_git修改user.name 和user.email
- 718. 最长重复子数组(JavaScript)
- heidsql(mysql)安装教程和mysql修改密码
- Java面试题及答案整理(2022最新版)
- 关于fftshift引发的问题与思考
- 报表开发工具FastReport开源代码2020首发更新!邀您免费下载
- sola染毒文件恢复工具
- 你靠谱吗?看看“价值观”究竟有多重要
- UE4中的Spline用法
- civil3D地形导入AIW(设置投影坐标系)
- LeetCode——150. 逆波兰表达式求值(Evaluate Reverse Polish Notation)[中等]——分析及代码(Java)
- PS-给文字填充图片纹理
- 手写数字识别画板前后端实现 | Flask+深度神经网络
- 如何成为一名合格的程序员?
- 无人驾驶汽车的相关技术,无人驾驶相关技术知识
- 大专生出身?mysql-uroot-p
- 手机控制汽车无钥匙进入一键启动方案设计
- 美国4大移动运营商手机网络制式及频段
热门文章
- 云炬随笔20190701
- A humble heart2019-11-09
- [我的1024开源程序]30元写的广义误差分布函数
- C/C++中Static的作用详述 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。
- ubuntu/Linux下 提示“conda:未找到命令”
- ATT汇编leave指令
- kernel_mktime() 详解 —— Linux-0.11 学习笔记(四)
- 板子ping不通PC怎么办——韦东山嵌入式Linux学习笔记07
- 代码段间转移控制时的特权级检查(JMP/CALL)——《x86汇编语言:从实模式到保护模式》读书笔记28
- Unity3D ShaderLab 物体相交