CUDA ---- Hello World From GPU
本篇博文仅实现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 <<<, >>>(); cudaDeviceReset(); return ;
}
这里顺便提及下,我们将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程序结构包含五个主要步骤:
- 分配GPU空间。
- 将数据从CPU端复制到GPU端。
- 调用CUDA kernel来执行计算。
- 计算完成后将数据从GPU拷贝回CPU。
- 清理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的更多相关文章
- 《CUDA并行程序设计:GPU编程指南》
<CUDA并行程序设计:GPU编程指南> 基本信息 原书名:CUDA Programming:A Developer’s Guide to Parallel Computing with ...
- OpenCL与CUDA,CPU与GPU
OpenCL OpenCL(全称Open Computing Language,开放运算语言)是第一个面向异构系统通用目的并行编程的开放式.免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计 ...
- CUDA中记录执行时间-GPU端
事件eventcudaEvent_t start,stop;cudaEventCreate(&start);cudaEventCreate(&stop);cudaEventRecord ...
- CUDA直方图实例=CPU+GPU(global)+GPU(shared)
项目打包下载链接 顺便批判下CSDN上传坑爹现象,好多次都是到了95%或者99%就不动了.我……
- CPU、GPU、CUDA、cuDNN
CPU擅长逻辑处理控制,GPU适合高强度的并行计算任务,为什么会存在这种差别?今天搜集了些相关资料,摘抄总结如下. 一.什么是GPU GPU这个概念是由Nvidia公司于1999年提出的.GPU是显卡 ...
- 显卡、GPU和CUDA简介
http://blog.csdn.net/wu_nan_nan/article/details/45603299 声明: 本文部分内容来自网络.由于知识有限,有错误的地方还请指正.本帖为自己学习过程的 ...
- 【CUDA并行程序设计系列(1)】GPU技术简介
http://www.cnblogs.com/5long/p/cuda-parallel-programming-1.html 本系列目录: [CUDA并行程序设计系列(1)]GPU技术简介 [CUD ...
- GPU计算的后CUDA时代-OpenACC(转)
在西雅图超级计算大会(SC11)上发布了新的基于指令的加速器并行编程标准,既OpenACC.这个开发标准的目的是让更多的编程人员可以用到GPU计算,同时计算结果可以跨加速器使用,甚至能用在多核CPU上 ...
- 把书《CUDA By Example an Introduction to General Purpose GPU Programming》读薄
鉴于自己的毕设需要使用GPU CUDA这项技术,想找一本入门的教材,选择了Jason Sanders等所著的书<CUDA By Example an Introduction to Genera ...
随机推荐
- BZOJ 1257 余数之和sum
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1257 题意:计算sigama(m%i)(1<=i<=n). 思路: 这样就简 ...
- Hibernate 的<generator class="native"></generator>的不同属性含义
1) assigned主键由外部程序负责生成,无需Hibernate参与. 2) hilo通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态. 3) seqhilo与hil ...
- Redis 网络通信及连接机制学习
看了这篇文章 http://blog.nosqlfan.com/html/4153.html 本文所述内容基于 Redis2.6 及以上版本. 注:在客户端通过 info 命令可以查看服务器版本信息, ...
- hdu1052(田忌赛马 贪心)
好坑的一道题,不过确实是贪心的一道好题,想了好久一直无法解决平局的情况. 参考了别人的思路,然后结合了自己的想法,总算是想出来了. 这题有些步骤是必须要执行的,有四个步骤 一.当期状态田忌的最慢的马 ...
- UVa 247 Calling Circles【传递闭包】
题意:给出n个人的m次电话,问最后构成多少个环,找出所有的环 自己想的是:用map来储存人名,每个人名映射成一个数字编号,再用并查集,求出有多少块连通块,输出 可是map不熟,写不出来,而且用并查集输 ...
- vijos 1379 字符串的展开
23333333333333333 #include<iostream> #include<cstdio> #include<cstring> #include&l ...
- 记录一次Spring boot 搭建框架连接Mysql数据库注解事务不回滚的故障
搭建了一个新框架,使用了spring boot 替换以简化原来繁杂的spring配置,使用Spring注解管理事务,持久层使用mybatis. 连接mysql数据库完成项目的过程中发现不支持事务,因为 ...
- 20160206.CCPP体系详解(0016天)
代码片段(01):.指针.c+02.间接赋值.c 内容概要:内存 ///01.指针 #include <stdio.h> #include <stdlib.h> //01.取地 ...
- HDU 4750
解题方法,,,首先应该可以看出来是一颗 最小生成树,任意一条的边的价值是不同的:所以计算出最小生成树的每一条边有多少对顶点满足他的 f 值就是这条边的 权值,因此可以在生成最小生成树的时候,进行一下统 ...
- openssl rsa 加解密
<h4>1.openssl进行rsa加密解密</h4>首先介绍下命令台下openssl工具的简单使用:生成一个密钥:<pre lang="c" esc ...