CUDA实践指南(一)

简介:

评估您的应用程序:
从超级计算机到手机,现代处理器越来越依赖并行性来提供性能。 核心计算单元(包括控制,算术,寄存器和典型的一些缓存)被复制一定次数并通过网络连接到内存。 因此,所有现代处理器都需要并行代码,以便充分利用其计算能力。
在处理器不断发展以向程序员公开更多细粒度的并行性时,许多现有的应用程序已经发展成为串行代码或粗粒度并行代码(例如,数据分解为并行处理的区域和子区域 使用MPI共享)。 为了从任何现代处理器架构(包括GPU)中获益,首先要评估应用程序以识别热点,确定它们是否可以并行化,并了解现在和将来的相关工作负载。
异构计算:
CUDA编程涉及在两个不同平台上同时运行代码:具有一个或多个CPU和一个或多个支持CUDA的NVIDIA GPU设备的主机系统。
虽然NVIDIA GPU经常与图形相关联,但它们也是强大的算术引擎,能够并行运行数千个轻量级线程。 这种能力使它们非常适合于可以利用并行执行的计算。
但是,该设备基于与主机系统完全不同的设计,因此了解这些差异以及如何确定CUDA应用程序的性能以便有效地使用CUDA非常重要。
主机和设备的区别:
主要区别在于线程模型和单独的物理内存:
线程资源:
主机系统上的执行流水线可以支持有限数量的并发线程。 目前拥有四个六核处理器的服务器可以同时运行24个线程(如果CPU支持超线程,则可以运行48个)。相比之下,CUDA设备上最小的可执行并行单元包含32个线程(称为warp线程)。 现代NVIDIA GPU可以为每个多处理器同时支持多达1536个活动线程(请参阅CUDA C编程指南的功能和规格)在具有16个多处理器的GPU上,这会导致超过24,000个并发活动线程。
线程:
CPU上的线程通常是重量级的实体。 操作系统必须交换CPU执行通道的线程以提供多线程功能。 上下文切换(当两个线程交换时)因此很慢并且很昂贵。 相比之下,GPU上的线程非常轻便。 在典型的系统中,数千个线程正在排队等待工作(每个线程有32个线程)。 如果GPU必须等待一个warp线程,它就会开始在另一个线程上执行工作。 由于单独的寄存器被分配给所有活动线程,因此在GPU线程之间切换时不需要交换寄存器或其他状态。 资源保持分配给每个线程,直到它完成其执行。 简而言之,CPU内核旨在最大限度地减少一个或两个线程的延迟,而GPU旨在处理大量并发的轻量级线程,以最大化吞吐量。
RAM:
主机系统和设备各自具有其自己独特的附加物理存储器。 由于主机和设备存储器被PCI Express(PCIe)总线隔开,主机存储器中的项目必须偶尔通过总线传送到设备存储器,反之亦然。
这些是CPU主机和GPU设备之间在并行编程方面的主要硬件差异。 讨论其他差异,因为它们出现在本文档的其他地方。 考虑到这些差异的应用程序可以将主机和设备组合在一起,将其视为一个内聚的异构系统,其中每个处理单元都可以充分利用其最擅长的工作方式:在主机上进行顺序工作,并在设备上进行并行工作。

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
目录
相关文章
|
Linux Anolis 异构计算
关于远程直接内存访问技术 RDMA 的高性能架构设计介绍
本文介绍 RDMA 技术的基本原理及交流在工程上的设计思路。
|
弹性计算 容器 RDMA
在Kubernetes上使用RDMA
### RDMA RDMA(全称RemoteDirect Memory Access) 它为了解决网络传输中服务器端数据处理的延迟而产生。 它的原理是将待传输的数据从一台计算机的内存,直接传输到另一台计算机的内存,整个传输过程无需操作系统和协议栈的介入。
10453 0
|
8月前
|
人工智能 网络性能优化 调度
Koordinator v1.6: 支持AI/ML场景的异构资源调度能力
如何高效管理和调度这些资源成为了行业关注的核心问题。在这一背景下,Koordinator积极响应社区诉求,持续深耕异构设备调度能力,并在最新的v1.6版本中推出了一系列创新功能,帮助客户解决异构资源调度难题。
|
网络协议 网络性能优化 API
TCP或RDMA
【10月更文挑战第1天】TCP或RDMA
633 2
|
编译器 C++
【C++】多态学习总结
多态就是调用一个函数时,展现出多种形态。比如买火车票这件事,普通人是全价,学生是半价,这就是一种多态。 多态分为静态的多态和动态的多态:
|
测试技术 开发工具 git
面向 C++ 的现代 CMake 教程(三)(3)
面向 C++ 的现代 CMake 教程(三)
504 0
|
开发者 异构计算 容器
NRI - 在容器的生命周期焊接“芯片”
个人调研containerd 1.7版本新特性NRI,欢迎指正
826 1
|
消息中间件 Kubernetes NoSQL
组播详解及示例代码
组播详解及示例代码
|
NoSQL 网络协议 算法
Redis客户端Lettuce深度分析介绍(上)
Spring Boot自2.0版本开始默认使用Lettuce作为Redis的客户端(注1)。Lettuce客户端基于Netty的NIO框架实现,对于大多数的Redis操作,只需要维持单一的连接即可高效支持业务端的并发请求 —— 这点与Jedis的连接池模式有很大不同。同时,Lettuce支持的特性更加全面,且其性能表现并不逊于,甚至优于Jedis。本文通过分析Lettuce的特性和内部实现(基于6.0版本),及其与Jedis的对照比较,对这两种客户端,以及Redis服务端进行深度探讨。
52396 8
Redis客户端Lettuce深度分析介绍(上)
|
弹性计算 编解码 Cloud Native
阿里云混合云组播最佳实践
场景介绍很多企业用户和电信运营商会在相关业务中使用组播技术,例如在线直播、视频会议、视频转码、金融交易平台、多媒体广播及多播传输系统(MBMS)等服务。现在越来越多的用户将本地数据中心的业务迁移到云上,用户不仅仅需要云上环境支持组播,还需要支持本地数据中心与云上之间的组播通信。云上环境的组播技术已经在云企业网-企业版中实现,通过云企业网-企业版实现VPC内或者跨VPC的组播通信,详细信息可以参考官
2060 1
阿里云混合云组播最佳实践