首页 > 其他分享 >CUDA ---- Hello World From GPU

CUDA ---- Hello World From GPU

时间:2023-06-02 21:32:18浏览次数:49  
标签:hello ---- CUDA GPU World root Hello

本篇博文仅实现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 hello.cu  -o hello
[root@localhost bonelee]# ./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!

  

 

现在用下面的命令编译:

$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#

 

分类: c/c++, CUDA

标签:hello,----,CUDA,GPU,World,root,Hello
From: https://blog.51cto.com/u_11908275/6405151

相关文章

  • fortiXDR调研
    chrome-extension://bocbaocobfecmglnmeaeppambideimao/pdf/viewer.html?file=https%3A%2F%2Fwww.cybereason.com%2Fhubfs%2Fdam%2Fcollateral%2Freports%2Fgartner-newsletter-xdr-final.pdf chrome-extension://bocbaocobfecmglnmeaeppambideimao/pdf/viewer.html?file=http......
  • owsap top 10 2018
    OWASP-Top10Vulnerabilitiesinwebapplications(updatedfor2018) IntroductionOWASP(Openwebapplicationsecurityproject)communityhelpsorganizationsdevelopsecureapplications.Theycomeupwithstandards,freewaretoolsandconferencesthathelp......
  • 数据倾斜
    大数据----“数据倾斜”的问题0.7862018.11.1311:21:28字数897阅读4,411一、Hadoop中的数据倾斜:什么是数据倾斜?(见下图) 简单来说数据倾斜就是数据的key的分化严重不均,造成一部分数据很多,一部分数据很少的局面。举个wordcount的入门例子:它的map阶段就是形成(“aaa”,1)的......
  • Map系列集合的遍历方式三:Lambda
          ......
  • [Debug] Debug and inspect event listeners with Devtools
    Youcanuse getEventListeners(button)directlyinsidechromedevtool,butnotinsideapplicationcode. Youcanuse monitorEvents(button,'keydown'),noweverytimeskeydownhappens,eventwillbeloggedintotheconsole.Use unmonitorEvents(but......
  • 经济电流密度-1
      我们也按经济电流密度选择电缆和导线,关于经济电流密度的计算,有介绍,但是都不足以完全能够实用。  这里介绍一下《车间电力线路-设计与敷设问题》这本前苏联书籍的计算方法;  这本书非常严谨和实用,介绍了理论,公式推导、图表和例子,每一个都介绍的非常清楚,值得学习。 ......
  • 文心一言 VS 讯飞星火 VS chatgpt (29)-- 算法导论5.2 1题
    一、在HIRE-ASSISTANT中,假设应聘者以随机顺序出现,你正好雇用一次的概率是多少?正好雇用n次的概率是多少?文心一言:讯飞星火:华为盘古:在HIRE-ASSISTANT中,假设应聘者以随机顺序出现,那么在每个时间点上随机选出一名应聘者进行面试的概率为:P(N)=1-random.randint(1)其中,ra......
  • Markdown的学习
    Markdown学习标题使用#号,最好再后面再加一个空格,几级标题相对应几个#号三级标题四级标题字体使内容加粗可在内容两边各添加**使内容倾斜可在内容两边各添加*同理,想要让内容倾斜并加粗两边同时添加即可***使内容中间添加一条横线,在左右两边添加~~引用在内容......
  • windows应急响应
    Windows应急响应目录Windows应急响应常见应急响应事件分类:一、入侵排查1.1检查系统账号安全1.2检查异常端口、进程1.2.1检查端口连接情况1.2.2进程1.2.3检查异常端口、进程二、权限维持排查2.1检查服务器是否有异常的启动项2.2检查计划任务2.3检查服务自启动2.4破除权限......
  • 数据仓库项目介绍与分析
    项目效果展示本身我们这个数据仓库项目其实是一个纯后台项目,不过为了让大家能够更加直观的感受项目的效果,我们可以基于数据仓库中的数据统计一些指标进行展现。我们这个项目要讲的重点不是这个大屏,这个大屏只是一个效果,为了让大家感受更加直观一些而已,我们主要讲的是这些指标对......