CUDA C编程权威指南 第一章
基础
CUDA(Compute Unified Device Architecture)是NVIDIA提出
CPU和GPU是的PCI-Express总线相连
cpu
CPU则负责管理设备端的资源;
CPU核心比较重,用来处理非常复杂的控制逻辑,以优化串行程序执行。
CPU线程:操作系统必须交替线程使用启用或关闭CPU执行通道以提供多线程处理功能。上下文的切换缓慢且开销大gpu
GPU用来提高计算密集型应用程序中并行程序段的执行速度,
GPU代表了一种众核架构(many cores),包含多线程、MIMD(多指令多数据)、SIMD(单指令多数据),以及指令级并行。英伟达称:SIMT(单指令多线程)
GPU核心较轻,用于优化具有简单控制逻辑的数据并行任务,注重并行程序的吞吐量。
GPU线程,GPU上的线程是高度轻量级的。GPU性能
GPU容量特征:1. CUDA核心数 2. 内存大小
GPU性能评估:
1. 峰值计算性能,用GFlops(每秒十亿次浮点运算),TFlops(每秒万亿次浮点运算)
2. 内存带宽读取或写入数据的比率,GB/s
带宽是单位时间内可处理的数据量,通常表示为MB/s或GB/s。
吞吐量是单位时间内成功处理的运算数量,通常表示为gflops(即每秒十亿次的浮点运算数量)
- 异构架构
异构应用包含:主机代码和设备代码
GPU不是一个独立运行的平台而是CPU的协处理器。GPU必须通过PCIe总线与基于CPU的主机相连来进行操作,么CPU所在的位置被称作主机端而GPU,所在的位置被称作设备端。
CPU计算适合处理控制密集型任务,GPU计算适合处理包含数据并行的计算密集型任务。
- 代码:
在CPU上运行的主机代码
在GPU上运行的设备代码
NVIDIA的CUDA nvcc编译器在编译过程中将设备代码从主机代码中分离出来
例子:
检查nvcc编译器是否安装
which nvcc
# /usr/local/cuda/bin/nvcc
检查GPU加速卡
ls -l /dev/nv*
CUDA C程序步骤
- 扩展名
.cu
- CUDA nvcc 编译器来编译程序
__global__ void helloFromGPU()//__global__指明该函数在GPU上执行
{printf("Hello World from GPU!\n");
}int main(int argc, char **argv)
{printf("Hello World from CPU!\n");helloFromGPU<<<1, 10>>>();//GPU函数调用,<<>>中是线程的个数,这里是10个cudaDeviceReset();//释放GPU资源,清空缓冲区, 不然不会打印return 0;
}
cuda程序执行5个步骤
- 分配GPU内存
- 从CPU拷贝数据到GPU
- 调用CUDA内核来完成程序的指定运算
- 数据从GPU拷贝回CPU内存
- 释放GPU内存空间
其他
·分布式内存的多节点系统:
每个处理器有自己的本地内存,而且处理器之间可以通过网络进行通信这种系统常被称作集群.
·共享内存的多处理器系统
多处理器和同一个物理内存相关联或共用一个低延迟的链路(如PCI-Express或PCIe)
CUDA C编程权威指南 第一章相关推荐
- CUDA C编程权威指南 第二章 CUDA编程模型
CUDA6.0开始 有"统一寻址"(Unified Memory)编程模型,可以用单个指针访问CPU和GPU内存,无须手动拷贝 主机启动内核后,管理权立刻返回给主机(类似启动线程后 ...
- 《CUDA C编程权威指南》——3.4 避免分支分化
本节书摘来自华章计算机<CUDA C编程权威指南>一书中的第3章,第3.4节,作者 [美] 马克斯·格罗斯曼(Max Grossman),译 颜成钢 殷建 李亮,更多章节内容可以访问云栖社 ...
- c cuda 指定gpu_《CUDA C编程权威指南》——1.3 用GPU输出Hello World-阿里云开发者社区...
本节书摘来自华章计算机<CUDA C编程权威指南>一书中的第1章,第1.3节,作者 [美] 马克斯·格罗斯曼(Max Grossman),译 颜成钢 殷建 李亮,更多章节内容可以访问云栖社 ...
- 《CUDA C编程权威指南》——1.5节总结
本节书摘来自华章社区<CUDA C编程权威指南>一书中的第1章,第1.5节总结,作者[美] 马克斯·格罗斯曼(Max Grossman) ,更多章节内容可以访问云栖社区"华章社区 ...
- 《CUDA C编程权威指南》——2.2 给核函数计时
本节书摘来自华章计算机<CUDA C编程权威指南>一书中的第2章,第2.2节,作者 [美] 马克斯·格罗斯曼(Max Grossman),译 颜成钢 殷建 李亮,更多章节内容可以访问云栖社 ...
- 《CUDA C编程权威指南》——2.4节设备管理
本节书摘来自华章社区<CUDA C编程权威指南>一书中的第2章,第2.4节设备管理,作者[美] 马克斯·格罗斯曼(Max Grossman) ,更多章节内容可以访问云栖社区"华章 ...
- CUDA C 编程权威指南 Grossman 第4章 全局内存
4.1 CUDA内存模型概述 内存访问和管理是所有编程语言的重要部分. 因为多数工作负载被加载和存储数据的速度所限制,所以有大量低延迟.高带宽的内存对性能是十分有利的. 大容量.低延迟的内存造价高且不 ...
- cuda C 编程权威指南 Grossman 第2章 CUDA编程模型
2.1 CUDA编程模型概述 CUDA编程模型提供了一个计算机架构抽象作为应用程序和其可用硬件之间的桥梁. 通信抽象是程序与编程模型实现之间的分界线,它通过专业的硬件原语和操作系统的编译器或库来实现. ...
- netty权威指南第一章
本章内容如下: 5种网络I/O模型的介绍 I/O多路复用的介绍 1.I/O基础入门 在Java1.4之前,Java对I/O的支持不完善,开发人员在开发高性能I/O的程序时,会面临以下问题: 没有数据缓 ...
最新文章
- CentOS修改忘记密码
- 撬开骁龙8一看,满满都是顶会论文
- 阿里8亿加持B端智能化后,本地生活服务更好做了吗?
- Python之删除字符串中不需要的字符
- [Android] 开发第二天
- ueditor php 网络链接错误,ueditor使用editor.execCommand( 'link', {})插入链接无效的问题...
- CentOS 安装jdk1.7 64位
- PHP gd库 验证码
- 概括ADO.NET数据库连接的所有形式(基础)
- 【clickhouse】docker安装clickhouse后本地无法连接
- (一)开始使用混合边缘AI进行面部识别
- 从零在阿里云服务器上部署一个Springboot博客网站
- C/C++基础::sizeof() 与 sizeof(string)
- java数据库编程入门
- linux lightdm启动阶段黑屏,Ubuntu卡logo、卡住、黑屏无法正常启动、屏幕和键盘背光无法调节等一系列问题的罪恢祸首:NVIDIA显卡驱动...
- Modbus转Profinet将英威腾CHF100A变频器接入PROFINET网络
- matlab实验感悟,2019年matlab实验心得体会学习matlab的心得体会
- 新颖的自我介绍_三句有创意的自我介绍
- mysql语句批量更新数据库_sql 更新批量数据库语句
- [AndroidStudio]Building Apps with Over 64K Methods
热门文章
- 帮写python代码_10个工具,帮你写出更好的Python代码
- 使用Python自由切分pdf文件提取任意页面
- Python生成器对象send()方法用法
- udp协议服务器客户端流程图,UDP 协议通信服务器端客户端.doc
- 队列处理高并发_高并发架构消息队列面试题解析
- 2021-07-29动态规划自学笔记
- jsp--请求转发与重定向
- 多系统引导工具支持Linux,多系统引导工具(BootThink)
- 188. 买卖股票的zui佳时机 IV(JavaScript)
- 力扣350.两个数组的交集 II(JavaScript)