《CUDA C编程权威指南》——1.4 使用CUDA C编程难吗

简介:

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

1.4 使用CUDA C编程难吗

CPU编程和GPU编程的主要区别是程序员对GPU架构的熟悉程度。用并行思维进行思考并对GPU架构有了基本的了解,会使你编写规模达到成百上千个核的并行程序,如同写串行程序一样简单。

如果你想编写一个像并行程序一样高效的代码,那么你需要对CPU架构有基本的了解。例如,数据局部性在并行编程中是一个非常重要的概念。数据局部性指的是数据重用,以降低内存访问的延迟。数据局部性有两种基本类型。时间局部性是指在相对较短的时间段内数据和/或资源的重用。空间局部性是指在相对较接近的存储空间内数据元素的重用。现代的CPU架构使用大容量缓存来优化具有良好空间局部性和时间局部性的应用程序。设计高效利用CPU缓存的算法是程序员的工作。程序员必须处理低层的缓存优化,但由于线程在底层架构中的安排是透明的,所以这一点程序员是没有办法优化的。

CUDA中有内存层次和线程层次的概念,使用如下结构,有助于你对线程执行进行更高层次的控制和调度:

  • 内存层次结构
  • 线程层次结构

例如,在CUDA编程模型中使用的共享内存(一个特殊的内存)。共享内存可以视为一个被软件管理的高速缓存,通过为主内存节省带宽来大幅度提高运行速度。有了共享内存,你可以直接控制代码的数据局部性。

当用ANSI C语言编写一个并行程序时,你需要使用pthreads或者OpenMP来显式地组织线程,这两项技术使得在大多数处理器架构以及操作系统中支持并行编程。当用CUDA C编写程序时,实际上你只编写了被单个线程调用的一小段串行代码。GPU处理这个内核函数,然后通过启动成千上万个线程来实现并行化,所有的线程都执行相同的计算。CUDA编程模型提供了一个层次化地组织线程的方法,它直接影响到线程在GPU上的执行顺序。因为CUDA C是C语言的扩展,通常可以直接将C程序移植到CUDA C程序中。概念上,剥离代码中的循环后产生CUDA C实现的内核代码。

CUDA抽象了硬件细节,且不需要将应用程序映射到传统图形API上。CUDA核中有3个关键抽象:线程组的层次结构,内存的层次结构以及障碍同步。这3个抽象是最小的一组语言扩展。随着CUDA版本的更新,NVIDIA正在对并行编程进行不断简化。尽管一些人仍然认为CUDA的概念比较低级,但如果稍稍提高抽象级,对你控制应用程序和平台之间的互动关系来说会增加很大难度。如果那样的话,不管你掌握了多少底层架构的知识,你的应用程序的性能都将超出控制。

因此,你的目标应是学习GPU架构的基础及掌握CUDA开发工具和环境。

image

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
存储 移动开发 JavaScript
H5加载Android本地路径图片
H5加载Android本地路径图片
1601 0
|
存储 Python
海明距离(Hamming Distance)
海明距离(Hamming Distance)是用来衡量两个二进制数之间差异程度的指标,它表示两个二进制数之间最多有多少个比特的差异。海明距离可以用于衡量数据传输或存储中的错误率,以及检测噪声干扰。 海明距离的计算方法是:对于两个 n 位二进制数,将它们进行逐位比较,如果对应位上的数字不同,则计算距离时增加 1。然后将所有位上的距离加在一起,得到海明距离。
3194 1
|
网络安全
编译原理复习二:Top-Down分析LL(1)文法的判断与LL(1)分析表的构造(附题目与答案 超详细)
编译原理复习二:Top-Down分析LL(1)文法的判断与LL(1)分析表的构造(附题目与答案 超详细)
1203 1
|
前端开发 JavaScript Java
一个软件开发工程师需要学几种编程语言?为什么?
一个软件开发工程师需要学几种编程语言?为什么?
894 64
|
人工智能 算法 芯片
天天都在说的“算力”到底是个啥?一文全讲透!
算力是数字经济发展的重要支撑,尤其在AI和大数据应用中起着关键作用。阿里云致力于构建全球领先的算力基础设施,助力各行业数字化转型。吴泳铭和马云均强调了算力在未来科技竞争中的核心地位。2023年底,我国算力总规模达230EFLOPS,位居全球第二。算力分为通用、智能和超算算力,广泛应用于人工智能训练与推理等场景。中国正加速建设智算中心,推动算力产业链发展,并注重绿色低碳和智能运维,以应对日益增长的计算需求。
20107 19
|
人工智能 安全 机器人
LLM对齐数据全自动合成!UW华人博士生提出Magpie方法,Macbook Air即可运行
【8月更文挑战第11天】在AI领域,大型语言模型(LLM)的行为对齐一直是个挑战。华盛顿大学研究人员提出名为Magpie的新方法,能自动高效生成高质量指令数据,减少人工干预,提升LLM的对齐效果。通过输入模板,Magpie利用已对齐LLM生成能力自动生成指令数据,仅需少量GPU资源即可创建大规模数据集。实验显示,使用Magpie数据集微调的模型性能媲美传统监督方法。尽管如此,Magpie仍需进一步优化以生成特定领域指令并确保数据安全性。[论文](https://arxiv.org/abs/2406.08464)
662 60
|
Java 关系型数据库 数据库连接
SSM整合(详细配置文件)
这是一个关于SSM(Spring、SpringMVC、MyBatis)整合的项目配置摘要。`pom.xml`包含了所有必要的依赖,如JUnit、MySQL驱动、C3P0连接池、Servlet、JSP、MyBatis、MyBatis-Spring和Spring框架等。`web.xml`配置了DispatcherServlet、字符编码过滤器和Session超时。MyBatis的`mybatis-config.xml`设置了日志和数据源。`spring-dao.xml`配置了数据源。
438 2
|
JavaScript Java 测试技术
基于SpringBoot+Vue的旅游管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的旅游管理系统的设计与实现(源码+lw+部署文档+讲解等)
345 1
|
算法 Java 数据安全/隐私保护
Android App开发之利用JNI实现加密和解密操作实战(附源码 简单易懂)
Android App开发之利用JNI实现加密和解密操作实战(附源码 简单易懂)
764 0
RTSP服务器之————rtsp-server(轻量级RTSP / RTP流媒体服务器)
github:https://github.com/revmischa/rtsp-server 轻量级RTSP / RTP流媒体服务器
10308 1