本篇博文仅实现hello world,先看到效果,具体细节将在后续博文解释。

准备

如果你是第一次使用CUDA,在Linux下可以使用下面的命令来检查CUDA编译器是否安装正确:

$ which nvcc

一般,该指令输出为:

/usr/local/cuda/bin/nvcc

另外,你可能还需要检查下你机器上的GPU型号,可以使用给下面的命令查询:

$ ls  -l /dev/nv*

可能的输出为:

crw-rw-rw- 1 root root 195, 0 Jul 3 13:44 /dev/nvidia0

crw-rw-rw- 1 root root 195, 1 Jul 3 13:44 /dev/nvidia1

crw-rw-rw- 1 root root 195, 255 Jul 3 13:44 /dev/nvidiactl

crw-rw---- 1 root root 10, 144 Jul 3 13:39 /dev/nvram

以上输出显示这里有两个GPU显卡安装在机器上。

写一段CUDA程序的基本过程为:

  • 创建源文件,以”.cu”为后缀。
  • 用nvcc编译程序。
  • 命令行运行。

代码

首先,为了对比,先写一段简单的C程序输出hello world:

#include <stdio.h>iint main(void){printf(“helllo world!\n”);}

然后是我们所谓的kernel function(即CUDA代码):

__global__ void helloFromGpu(void){printf(“hello world form GPU!\\n”);}

限定符__global__告诉编译器这个function将由CPU调用在GPU上执行,其调用形式为:

helloFromGPU<<<1,10>>>();

一个kernel是由一组线程执行,所有线程执行相同的代码。上面一行三对尖括号中的1和10 表明了该function将有10个线程,具体含义之后博文中会详述。下面是完整代码:

#include <stdio.h>__global__ void helloFromGPU (void)
{printf(“Hello World from GPU!\n”);
}int main(void)
{
// hello from cpu
printf(“Hello World from CPU!\n”);helloFromGPU <<<1, 10>>>();cudaDeviceReset();return 0;
}

这里顺便提及下,我们将CPU端称为host,GPU端称为device。

cudaDeviceReset()用来显式的摧毁清理CUDA程序占用的资源。现在用下面的命令编译:

$nvcc –arch sm_20 hello.cu –o hello

-arch sm_20是用来指定编译器使用Fermi架构产生device代码。编译成功后执行$ ./hello:

Hello World from CPU!

Hello World from GPU!

Hello World from GPU!

Hello World from GPU!

Hello World from GPU!

Hello World from GPU!

Hello World from GPU!

Hello World from GPU!

Hello World from GPU!

Hello World from GPU!

Hello World from GPU!

一个典型的CUDA程序结构包含五个主要步骤:

  1. 分配GPU空间。
  2. 将数据从CPU端复制到GPU端。
  3. 调用CUDA kernel来执行计算。
  4. 计算完成后将数据从GPU拷贝回CPU。
  5. 清理GPU内存空间。

参考书:《professional cuda c programming》

NVIDIA CUDA板块:https://developer.nvidia.com/cuda-zone

CUDA在线文档:http://docs.nvidia.com/cuda/index.html#

CUDA ---- Hello World From GPU相关推荐

  1. CUDA和cuDNN到底是啥关系?(cuDNN是基于CUDA的深度学习GPU加速库)

    1.什么是CUDA CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台. CUDA是一种由NVIDIA推出的通用并行计算架构,该架构 ...

  2. Nvidia CUDA初级教程4 GPU体系架构概述

    Nvidia CUDA初级教程4 GPU体系架构概述 视频:https://www.bilibili.com/video/BV1kx411m7Fk?p=5 讲师:周斌 本节内容: 为什么需要GPU 三 ...

  3. 什么是CUDA、什么是GPU?

    为什么要了解:深度学习需要用到GPU,有cuda就能安装GPU CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台. CUDA™是 ...

  4. 教你从头到尾利用DL学梵高作画:GTX 1070 cuda 8.0 tensorflow gpu版

    教你从头到尾利用DL学梵高作画 作者:七月在线开发/市场团队中的三人,骁哲.李伟.July.本教程主要由骁哲撰写,李伟负责Linux命令部分. 时间:二零一六年九月二十五日 配置:GTX 1070 c ...

  5. 教你从头到尾利用DL学梵高作画 GTX 1070 cuda 8 0 tensorflow gpu版

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 教你从头 ...

  6. 【GPU结构与CUDA系列4】GPU存储资源:寄存器,本地内存,共享内存,缓存,显存等存储器细节

    0 软件抽象和硬件结构对应关系的例子 把GPU跟一个学校对应起来,学校里有教学楼.操场.食堂,还有老师和学生们:很快有领导(CPU)来检查卫生(需要执行的任务Host程序),因此这个学校的学生们要完成 ...

  7. DL之IDE:深度学习环境安装之CUDA的简介(显卡GPU/驱动/CUDA间的关系)、安装(根据本地电脑的NVIDIA显卡驱动版本去正确匹配CUDA版本)之详细攻略

    DL之IDE:深度学习环境安装之CUDA的简介(显卡GPU/驱动/CUDA间的关系).安装(根据本地电脑的NVIDIA显卡驱动版本去正确匹配CUDA版本)之详细攻略 目录 CUDA的简介 1.显卡GP ...

  8. CUDA 编程上手指南:CUDA C 编程及 GPU 基本知识

    作者丨科技猛兽 编辑丨极市平台 本文原创首发于极市平台,转载请获得授权并标明出处. 推荐大家关注极市平台公众号,每天都会更新最新的计算机视觉论文解读.综述盘点.调参攻略.面试经验等干货~ 目录 1 C ...

  9. 查看torch依赖的cuda版本_torch多GPU情况下模型建立遇到的问题

    问题:最近在实现bert pytorch版本的过程中遇到一个不能使用多GPU的问题,然而github原始版本是可以使用的,修改过程中的一些改动导致使用多GPU时会报如下的错误: arguments a ...

最新文章

  1. g++代码编译用选项-O3前后对比,前后执行时间对比如下
  2. 以赛促学,飞桨助力大学生智能车竞赛升级
  3. centos6.4下配置nginx服务器更改根目录
  4. 联想Z5手机夺得京东销量第一,联想这是要翻盘的节奏吗?
  5. java温故笔记(二)java的数组HashMap、ConcurrentHashMap、ArrayList、LinkedList
  6. Oralce 9.2.0.6 到 9.2.0.8 升级 小结
  7. 项目整体管理:实施整体变更控制
  8. Go channel详解
  9. java 子网掩码 位数_java实现子网掩码转换为网络标识位 | 学步园
  10. D365几个功能开发思路
  11. 区块链:核心技术概览
  12. mysql 按记录编号_告别硬编码,mysql 如何实现按某字段的不同取值进行统计
  13. python 正则表达式生成器_正则表达式生成器
  14. 机器人可操作度 matlab,双臂机器人运动学与可操作性及其优化的研究
  15. Leetcode 994 腐烂的柿子
  16. 人工智能必读书籍推荐—“花书”/计算机视觉/深度学习书籍
  17. 光猫灯显示正常但是报651错误解决办法
  18. uniapp实现canvas制作微信小程序海报,线上图片
  19. [导入]猪年新年贺词猪年短信猪年祝福语
  20. php违章查询接口,基于聚合数据的全国违章直连查询接口示例-PHP版

热门文章

  1. Learnopengl
  2. lbs与gis的计算机存储模式,基于GIS的移动终端LBS系统建设与实现
  3. app令牌登录解决session超时重登陆的问题
  4. -xdebug java8_多种高级debug方法,帮你更快定位问题
  5. 二叉搜索树 java_二叉查找树之 Java的实现【下】
  6. 为热门项目 若依(ruoyi) 添加请求日志输出
  7. Windows Phone7成为诺基亚核心目标
  8. 2020-02-16 Git客户端下载
  9. ArcGIS水文分析实战教程(18) 河段桩号与线性参考
  10. 树莓派上搭建ActiveMQ