《CUDA C编程权威指南》——1.3 用GPU输出Hello World

简介:

本节书摘来自华章计算机《CUDA C编程权威指南》一书中的第1章,第1.3节,作者 [美] 马克斯·格罗斯曼(Max Grossman),译 颜成钢 殷建 李亮,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.3 用GPU输出Hello World

学习一个新编程语言的最好方法就是使用这种新语言来编写程序。在本节,你将开始编写在GPU上运行的第一个内核代码。像其他任何编程语言一样编写GPU上的第一个程序是输出字符串“Hello World”。

如果这是你第一次使用CUDA,在Linux系统中,你可能想使用以下命令来检查CUDA编译器是否正确安装:

image

通常的结果可能是:

image

你还需要检查你的机器上是否安装了GPU加速卡。对此你可以在Linux系统上使用以下命令:

image

通常的结果是:

image

在这个例子中,你安装了两个GPU卡(不同的用户配置可能有所不同,因此显示结果会有所差异)。现在你要准备好写你的第一个CUDA C程序。写一个CUDA C程序,你需要以下几个步骤:

1.用专用扩展名.cu来创建一个源文件。
2.使用CUDA nvcc编译器来编译程序。
3.从命令行运行可执行文件,这个文件有可在GPU上运行的内核代码。

首先,我们编写一个C语言程序来输出“Hello World”,如下所示:

image

把代码保存到hello.cu中,然后使用nvcc编译器来编译。CUDA nvcc编译器和gcc编译器及其他编译器有相似的语义。

image

如果你运行可执行文件hello,将会输出:

image

接下来,编写一个内核函数,命名为helloFromGPU,用它来输出字符串“Hello World from GPU!”。

image

修饰符__global__告诉编译器这个函数将会从CPU中调用,然后在GPU上执行。用下面的代码启动内核函数。

image

三重尖括号意味着从主线程到设备端代码的调用。一个内核函数通过一组线程来执行,所有线程执行相同的代码。三重尖括号里面的参数是执行配置,用来说明使用多少线程来执行内核函数。在这个例子中,有10个GPU线程被调用。综上所述,得到代码清单1-1所示的程序。

image

函数cudaDeviceRest()用来显式地释放和清空当前进程中与当前设备有关的所有资源。如下所示,在nvcc命令行中使用-arch sm_20进行编译:

image

开关语句-arch sm_20使编译器为Fermi架构生成设备代码。运行这个可执行文件,它将输出10条字符串“Hello World from GPU”,每个线程输出1条。

image

image
image

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
机器学习/深度学习 并行计算 API
【GPU】CUDA是什么?以及学习路线图!
【GPU】CUDA是什么?以及学习路线图!
4485 0
|
1月前
|
存储 并行计算 调度
迈向可编程观测:在GPU Kernel中构建类eBPF风格的性能探针
本文旨在梳理作者学习路径,带领读者共同探索 GPU Kernel 性能分析从宏观到微观的技术演进。
513 24
迈向可编程观测:在GPU Kernel中构建类eBPF风格的性能探针
|
并行计算 Linux Docker
Docker【部署 07】镜像内安装tensorflow-gpu及调用GPU多个问题处理Could not find cuda drivers+unable to find libcuda.so...
Docker【部署 07】镜像内安装tensorflow-gpu及调用GPU多个问题处理Could not find cuda drivers+unable to find libcuda.so...
1208 0
|
26天前
|
人工智能 并行计算 PyTorch
以Lama Cleaner的AI去水印工具理解人工智能中经常会用到GPU来计算的CUDA是什么? 优雅草-卓伊凡
以Lama Cleaner的AI去水印工具理解人工智能中经常会用到GPU来计算的CUDA是什么? 优雅草-卓伊凡
91 4
|
6月前
|
缓存 并行计算 PyTorch
PyTorch CUDA内存管理优化:深度理解GPU资源分配与缓存机制
本文深入探讨了PyTorch中GPU内存管理的核心机制,特别是CUDA缓存分配器的作用与优化策略。文章分析了常见的“CUDA out of memory”问题及其成因,并通过实际案例(如Llama 1B模型训练)展示了内存分配模式。PyTorch的缓存分配器通过内存池化、延迟释放和碎片化优化等技术,显著提升了内存使用效率,减少了系统调用开销。此外,文章还介绍了高级优化方法,包括混合精度训练、梯度检查点技术及自定义内存分配器配置。这些策略有助于开发者在有限硬件资源下实现更高性能的深度学习模型训练与推理。
1161 0
|
5月前
|
人工智能 并行计算 开发者
CUDA重大更新:原生Python可直接编写高性能GPU程序
NVIDIA在2025年GTC大会上宣布CUDA并行计算平台正式支持原生Python编程,消除了Python开发者进入GPU加速领域的技术壁垒。这一突破通过重新设计CUDA开发模型,引入CUDA Core、cuPyNumeric、NVMath Python等核心组件,实现了Python与GPU加速的深度集成。开发者可直接用Python语法进行高性能并行计算,显著降低门槛,扩展CUDA生态,推动人工智能、科学计算等领域创新。此更新标志着CUDA向更包容的语言生态系统转型,未来还将支持Rust、Julia等语言。
409 3
CUDA重大更新:原生Python可直接编写高性能GPU程序
|
11月前
|
人工智能 并行计算 流计算
【AI系统】GPU 架构与 CUDA 关系
本文介绍了英伟达GPU硬件基础概念,重点解析了A100 GPU架构中的GPC、TPC、SM等组件及其功能。接着深入讲解了CUDA并行计算平台和编程模型,特别是CUDA线程层次结构。最后,文章探讨了如何根据CUDA核心数量、核心频率等因素计算GPU的算力峰值,这对于评估大模型训练的算力需求至关重要。
871 3
|
存储 并行计算 算法
CUDA统一内存:简化GPU编程的内存管理
在GPU编程中,内存管理是关键挑战之一。NVIDIA CUDA 6.0引入了统一内存,简化了CPU与GPU之间的数据传输。统一内存允许在单个地址空间内分配可被两者访问的内存,自动迁移数据,从而简化内存管理、提高性能并增强代码可扩展性。本文将详细介绍统一内存的工作原理、优势及其使用方法,帮助开发者更高效地开发CUDA应用程序。
|
机器学习/深度学习 并行计算 算法框架/工具
Anaconda+Cuda+Cudnn+Pytorch(GPU版)+Pycharm+Win11深度学习环境配置
Anaconda+Cuda+Cudnn+Pytorch(GPU版)+Pycharm+Win11深度学习环境配置
|
缓存 并行计算 算法
上帝视角看GPU(5):图形流水线里的不可编程单元
上帝视角看GPU(5):图形流水线里的不可编程单元
519 0

热门文章

最新文章