CUDA C 1

CUDA C

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:初识cuda c


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


使用GPU输出Hello World

提示:这里可以添加本文要记录的大概内容:

例如:使用cuda c 编写程序调用GPU输出Hello World。


提示:以下是本篇文章正文内容,下面案例可供参考

一、检查cuda编译器

f@f:~/Desktop$ which nvcc
/usr/local/cuda/bin/nvcc

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、查看GPU加速卡

f@f:~/Desktop$ ls -l /dev/nv*
crw-rw-rw- 1 root root 195,   0 127 23:26 /dev/nvidia0
crw-rw-rw- 1 root root 195, 255 127 23:26 /dev/nvidiactl
crw-rw-rw- 1 root root 195, 254 127 23:26 /dev/nvidia-modeset

nvidia0就是指显卡。

三 编写CUDA C 程序步骤

  • 创建源文件 xx.cu
  • 使用CUDA nvcc编译器编译程序
  • 运行可执行文件

创建源文件 hello.cu

f@f:~/Desktop/cuda 编程/cuda$ touch hello.cu
f@f:~/Desktop/cuda 编程/cuda$ vim hello.cu 


#include <stdio.h>
int main(void)
{
  printf("Hello World from CPU!\n")
}

使用CUDA nvcc编译器编译程序

f@f:~/Desktop/cuda 编程/cuda$ nvcc hello.cu  -o hello
f@f:~/Desktop/cuda 编程/cuda c$ ls
hello  hello.cu

执行可执行文件

f@f:~/Desktop/cuda 编程/cuda c$ ./hello 
Hello World from CPU!

四 编写内核函数,输出字符

1 创建源文件

f@f:~/Desktop/cuda 编程/cuda c$ touch 2_helloFromGPU.cu
f@f:~/Desktop/cuda 编程/cuda c$ ls
2_helloFromGPU.cu  hello  hello.cu
f@f:~/Desktop/cuda 编程/cuda c$ vim 2_helloFromGPU.cu 

2 使用CUDA nvcc编译器编译程序

#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>>>(); //主线程到端代码的调用 1个块区域和10个线程
    cudaDeviceReset(); //重置当前线程所关联过的当前设备的所有资源
    return 0;
}

3 执行可执行文件

f@f:~/Desktop/cuda 编程/cuda c$ nvcc 2_helloFromGPU.cu -o 2_helloFromGPU
f@f:~/Desktop/cuda 编程/cuda c$ ./2_helloFromGPU 
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!

  • 三重尖号意味着从主线程到端代码的调用。1和10分别表示有1个块区域和10个线程
  • cudaDeviceReset 表示重置当前线程所关联过的当前设备的所有资源
  • 修饰符__global__告诉编译器这是一个内核函数,它将从CPU中调用,然后在GPU上执行,在CPU上通过下面的代码启动内核函数

五 NVCC 使用 arch sm_86编译

常见显卡算力

常用的Nvidia GPU对应的算力flag。

  • Fermi(CUDA 3.2 until CUDA 8) (deprecated from CUDA 9):

SM20 or SM_20, compute_30 - Older cards such as GeForce 400,500,600, GT-630 (Completely dropped from CUDA 10 onwards)

  • Kepler(CUDA 5 and later):

SM30 or SM_30, compute_30 - Kepler architecture(generic - Tesla K40/K80, GeForce 700, GT-730)

Adds support for unified memory programming. (Completely dropped from CUDA 11 onwards.)

SM35 or SM_35, compute_35 – More specific Tesla K40

Adds support for dynamic parallelism. (Deprecated from CUDA 11, will be dropped in future versions.)

SM37 or SM_37, compute_37 – More specific Tesla K80

Adds a few more registers. (Deprecated from CUDA 11, will be dropped in future versions.)

  • Maxwell(CUDA 6 until CUDA 11):

SM50 or SM_50, compute_50 – Tesla/Quadro M series (Deprecated from CUDA 11, will be dropped in future versions)

SM52 or SM_52, compute_52 – Quadro M6000 , GeForce 900, GTX-970, GTX-980, GTX Titan X

SM53 or SM_53, compute_53 – Tegra (Jetson) TX1 / Tegra X1, Drive CX, Drive PX, Jetson Nano.

  • Pascal(CUDA 8 and later):

SM60 or SM_60, compute_60 – GP100/Tesla P100 – DGX-1 (Generic Pascal)

SM61 or SM_61, compute_61 – GTX 1080, GTX 1070, GTX 1060, GTX 1050, GTX 1030, Titan Xp, Tesla P40, Tesla P4, Discrete GPU on the NVIDIA Drive PX2

SM62 or SM_62, compute_62 – Integrated GPU on the NVIDIA Drive PX2, Tegra (Jetson) TX2

  • Volta(CUDA 9 and later):

SM70 or SM_70, compute_70 – DGX-1 with Volta, Tesla V100, GTX 1180 (GV104), Titan V, Quadro GV100

SM72 or SM_72, compute_72 – Jetson AGX Xavier, Drive AGX Pegasus, Xavier NX

  • Turing(CUDA 10 and later):

SM75 or SM_75, compute_75 – GTX/RTX Turing – GTX 1660 Ti, RTX 2060, RTX 2070, RTX 2080, Titan RTX, Quadro RTX 4000, Quadro RTX 5000, Quadro RTX 6000, Quadro RTX 8000, Quadro T1000/T2000, Tesla T4

  • Ampere(CUDA 11 and later):

SM80 or SM_80, compute_80 – NVIDIA A100 (the name “Tesla” has been dropped – GA100), NVIDIA DGX-A100

SM86 or SM_86, compute_86 – (from CUDA 11.1 onwards) Tesla GA10x cards, RTX Ampere – RTX 3080, GA102 – RTX 3090, RTX A6000, RTX A40, GA106 – RTX 3060, GA104 – RTX 3070, GA107 – RTX 3050

  • Hopper(CUDA 12[planned] and later):

SM90 or SM_90, compute_90 - NVIDIA H100(GH100)

f@f:~/Desktop/cuda 编程/cuda c$ rm 2_helloFromGPU
f@f:~/Desktop/cuda 编程/cuda c$ nvcc -arch sm_86 2_helloFromGPU.cu -o 2_hello
f@f:~/Desktop/cuda 编程/cuda c$ ls
2_hello  2_helloFromGPU.cu  hello  hello.cu
f@f:~/Desktop/cuda 编程/cuda c$ ./2_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 编程结构

一个典型的 CUDA 编程结构应该包括下面5个主要的步骤:

  1. 分配GPU内存
  2. 从CPU内存中拷贝数据到GPU内存中去
  3. 调用 CUDA 内核函数来完成程序指定的运算
  4. 将数据从GPU中拷回CPU内存
  5. 释放GPU内存空间

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值