![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
CUDA 编程指南 Shane Cook
文章平均质量分 88
早期入门CUDA的书籍,涵盖经典知识
高性能计算工程师
做一个极客!
展开
-
第10章 第5节 编写自己的内核摘录
10.5 编写自己的内核在高层指定并行性让编译器执行繁重的lifting到使用更擅长利用硬件的人开发函数库。选择用一些涉及并不精通的领域内容的函数库也是很重要的。使用函数库可能遇到的常见的问题是内存分配。大多数基于GPU的解决方案并不分配锁页内存。找那些可以让用户控制管理或者支持锁页内存的函数库。指令与函数库的下一个问题是,除非特意编写,否则它们对多GPU不敏感。现在问题是自己编写多少代码,通常关于性能。使用指令时,付出了一定百分比的性能以实现更快的程序开发。通过对比,函数库可能会在减少原创 2021-12-08 22:03:21 · 257 阅读 · 0 评论 -
第9章 应用程序性能优化(2) 摘录
9.3 策略: 传输9.3.1 锁页内存为对某一数据集进行操作,你需要将数据从主机传输到设备上、在数据集是哪个进行操作,然后将结果传输回主机。由于是在完全串行的方式下执行的,这将导致主机和GPU在一段时间内实现制的,白白浪费了传输能力与计算能力。在本章,我们详细介绍了多GPU的使用,包括如何使用流以确保GPU总是有工作可做。使用简单的双缓冲技术,尽管GPU正在将结果传输回主机并且请求一个新的工作包,但另一个缓冲仍然能被计算引擎来处理下一个数据块。主机处理器支持虚拟内存系统,其中物理内存页可以原创 2021-12-08 21:38:25 · 1806 阅读 · 0 评论 -
第9章 应用程序性能优化(1) 摘录
本章针对程序的性能优化,分解为如下7个步骤:策略1: 理解问题,并正确分解问题为串行/并行的工作负载。策略2: 理解并优化内存带宽、延迟和缓存使用问题。策略3: 理解与主机端传输数据的玄机。考察锁页内存、零复制内存的表现和某些硬件的带宽限制。策略4: 理解线程结构和计算能力,并了解它们对性能的影响方式。策略5: 结合一些通用算法的优化实例,讨论如何实现算法。策略6: 关注性能分析,定位应用程序的瓶颈所在及其来源。策略7: 考察如何让应用程序根据各种硬件实现自我调优。9.1 策原创 2021-12-06 20:47:26 · 573 阅读 · 0 评论 -
第8章 多CPU与GPU解决方案 摘录
8.1 简介在现代计算机系统中通常由多个设备:CPU和GPU。在CPU方面将讨论卡槽和核。卡槽是指主板用来放置CPU的物理插槽。一个CPU可能包含一个或多个核。每个核实际上式一个独立的实体。许多CPU和GPU卡槽都位于单个节点或计算机系统。了解核、卡槽已经节点的物理布局,会使得我们更有效地调度和分配任务。8.2 局部性局部性原理在GPU和CPU上是相当不错的。接近设备的内存(GPU上共享内存或CPU上的高速缓存)会更快地访问。一个卡槽内(比如核之间)的通信远远快于和不同卡槽上的另一核的通信.原创 2021-12-05 16:10:29 · 987 阅读 · 0 评论 -
第6章 CUDA内存处理 摘录
6.1 简介抽象已经在现代程序语言中成为一种趋势。它使程序员离底层硬件越来越大,以确保程序员不必过多了解底层硬件就可以编写程序。但它仍然灵活的编译器将上层的抽象转换成底层硬件能够理解的形式。有两个比较重要的概念,一个是存储带宽(memeory bandwidth),即在一定时间内从DRAM中读出或写入的数据量。一个是延迟(latency),即响应一个获取内存的请求所花费的时间,通常这个时间会是上百个处理器周期。从内存总线带宽与内存设备时钟频率的角度来看,处理器的设计也出现了相同的权衡点。设备上硅原创 2021-12-03 08:15:15 · 598 阅读 · 0 评论 -
第7章 CUDA实践之道 摘录
7.2 串行编码与并行编码7.2.1 CPU与GPU的设计目标CPU使用的MIMD的解决方案,而GPU采用SIMT指令模型。CPU并行的方法是执行多个独立的指令流,并在这些指令流中尝试提取出指令级并行。因此,CPU的指令流水线非常长,CPU从指令流水线中找出可以送到独立执行单元的指令。这些执行单元通常包括至少一个浮点单元、至少一个整数单元、一个分支预测单元和至少一个加载/存储单元。分支(if, branch prediction)是可以静态预测的。一些编译器通过对分支指令设置一个比特位来判断原创 2021-12-04 21:17:14 · 407 阅读 · 0 评论 -
第5章 线程结构 摘录
5.1简介并行编程的核心是线程的概念,一个线程就是程序中一个单一的执行流,就像一件衣服上的一块棉,一块块棉交织在一起组成了衣服。同样,一个个线程组合在一起就形成了并行程序。CUDA的编程模型将线程组合在一起形成了线程束、线程块以及线程网格。5.2 线程线程是并行程序的基本构建块。5.2.1 问题分解CPU领域的并行化是向着一个CPU上执行不止(单一线程)程序的方向发展。但这只是我们之前所提的任务并行。如果程序具有比较密集的数据集,我们可以采用数据并行模式,将任务分解成N个,每个部分单独.原创 2021-12-01 21:52:43 · 2178 阅读 · 0 评论 -
第2章 使用GPU理解并行计算 摘录
对于并行程序设计的基本概念及其与GPU技术的联系做一个宽广的介绍。原创 2021-11-29 22:03:51 · 1361 阅读 · 0 评论 -
第1章 超级计算简史 摘录
1.2冯诺依曼计算机架构几乎所有处理器都以冯诺依曼提出的处理结构为工作基础。在该结构中,处理器从存储器中取出指令、解码,然后执行该指令。通常,每个指令长32位。内存速度和时钟速度的比率是限制CPU和GPU吞吐量的一个重要因素。大多数应用程序属于“内存受限”,而不是“处理时钟或负载受限型”。CPU厂商试图通过使用缓存和突发内存访问来解决“内存受限”的问题。当需要从内存中取数据或指令时,处理器首先查询缓存。如果数据或指令在缓存中,则高速缓存直接将其交给处理器。典型的现代CPU缓存组成结.原创 2021-11-14 22:42:13 · 502 阅读 · 0 评论