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 ...
随机推荐
- [Golang]使用自建代理访问指定网站
由于爬虫过于频繁访问某一个网站而被禁ip,只因为贪恋一时爽快而忘记了使用代理,这大概是大多数爬虫初学者遇到的问题吧.但是有一些网站不只是爬虫需要访问,人也是需要访问的.这时候就需要使用代理服务器来访问 ...
- 【转载】关于XML文档的xmlns、xmlns:xsi和xsi:schemaLocation
原文在: https://yq.aliyun.com/articles/40353 这里有转载:http://www.cnblogs.com/zhao1949/p/5652167.html 先来一段S ...
- UTC的相互转换(java)
SimpleDateFormat foo = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); System.out.println(& ...
- Qt之Tab键切换焦点顺序
简介 Qt的窗口部件按用户的习惯来处理键盘焦点.也就是说,其出发点是用户的焦点能定向到任何一个窗口,或者窗口中任何一个部件. 焦点获取方式比较多,例如:鼠标点击.Tab键切换.快捷键.鼠标滚轮等. 习 ...
- R2的版本由来
给人一杯水,自己先有一桶水.上课.备课,那么备课中就常有一些稀奇古怪的问题. 学生问:SP2和R2是一样的吗? 老师答:不一样,一个是补丁程序,另一个是服务器操作系统. 学生不解:R2如果是操作系统, ...
- mysql三
修改字段名 mysql> alter table users change id user_id INT UNSIGNED AUTO_INCREMENT; 修改字段类型 mysql> al ...
- PHP Simple HTML DOM Parser Manual-php解析DOM
PHP Simple HTML DOM Parser Manual http://www.lupaworld.com/doc-doc-api-770.html PHP Simple HTML DOM ...
- 正则化,数据集扩增,Dropout
正则化方法:防止过拟合,提高泛化能力 在训练数据不够多时,或者overtraining时,常常会导致overfitting(过拟合).其直观的表现如下图所示,随着训练过程的进行,模型复杂度增加,在tr ...
- python numpy array 的一些问题
1 将list转换成array 如果list的嵌套数组是不规整的,如 a = [[1,2], [3,4,5]] 则a = numpy.array(a)之后 a的type是ndarray,但是a中得元素 ...
- php使用第三方登录
目前只做了微博和qq的,前面的去connect.qq.com,open.weibo.com注册的步骤省略 qq和weibo站点都有可以现在的php版本的api,qq的api相对高大上一些. <s ...