[CUDA]随笔一

简介

一、 CUDA是什么

CUDA是一种编程语言,全称"Compute Unified Device Architecture",简称"CUDA",中文翻译为计算统一设备架构编程语言.
其出现是为了从串行编程转向并行编程,我们通常使用的线程操作都是利用CPU去进行并行操作,而CUDA是面向GPU进行编程,GPU相比于CPU能够实现更大批量的并行处理,图形化处理单元(Graphice Processor Unit, GPU)就是为高速图形处理而设计的,具有天然的并行性.CUDA采用一种简单的数据并行模型,再结合编程模型,从而操纵复杂的图形基元,无论是之前的CPU的多线程编程还是将要学习GPU编程,其目的都是为了提供对大量数据的并行处理,通过并行处理不断减少对大量数据的处理时间,已达到更好的用户体验。
CUDA不需要程序员对于图形和图形基元有更深的了解,使GPU看起来与其他编程设备一样.
计算机的发展趋势是异构计算-人们视图通过将中央处理器(CPU)和图形处理器(GPU)技术混合在一起来实现高性能计算.
下面为了解CPU的一些硬件知识。

二、寄存器和cache的定义

寄存器是位于CPU内部的一组用于临时存储数据的存储器件,用来加快CPU对数据的处理速度。Cache是位于CPU和主存储器之间的一个高速缓存,用于加速对主存中数据的访问。

三、寄存器和cache的容量

寄存器通常有几十个到上百个,而cache的容量则通常在数十KB到数MB不等。

四、寄存器和cache的速度

寄存器是CPU内部的存储器件,速度非常快,可以在一个时钟周期内完成读写操作;而cache的速度比主存快很多,但比起寄存器还是慢了很多。

五、寄存器和cache的作用

寄存器的主要作用是为CPU提供更快速度的数据暂存区域,可以减少CPU与主存的数据传输,提升CPU的效率。而cache的主要作用是缓存主存中的数据,避免重复从主存中读取数据,从而加快CPU对数据的处理速度。

l六、关于cache

在一些复杂的处理器中cache分为多层:当有多级缓存时CPU读取数据的顺序为:
如果数据不在以及缓存中则处理器向二级或三级缓存中发出读取请求,如果所有缓存中都没有数据,则需要从主存(通常说的内存)中读取.一级缓存的工作速度通常能达到或接近CPU的处理速度,如果工作都在缓存中执行,就很有可能接近CPU的全速运行,但是各级缓存的大小和速度都是不一样的,一级缓存大小通常只有16k或者32k大小,二级缓存就更慢些,空间大概256k,三级缓存既要大得多,通常有几兆字节大小,但比二级缓存要慢得多.
实际的程序中循环程序经常会比较大,缓存往往放不下,所以尽管设置了缓存,处理器仍然会因为收到内存吞吐率或带宽的限制无法发回其具有的处理能力.

七、连接机技术

个人理解是将很多个cpu连接在一起处理一个任务,还有一些其他的技术,连接机采用的是单指令多数据型并行处理.这个技术先定义好一个数据范围,然后让处理器在这个数据范围内进行某种操作,连接机技术会使用成千上万个处理器,各个处理器之间的同步和通信将是很大的问题.

八、Cell处理器

它的思想是用一个常规处理器作为监管处理器(PPC),该处理器与大量的高速流处理器(SPE)相连.常规处理器担任与流处理器和外部世界的接口,流处理器在常规处理器管理下处理数据集.Cell处理器的编程,需要写一个子啊PPC上运行的程序,对程序要求比较高,必须从程序和数据两个方面明确管理多个SPE,以及在PPC上运行的串行程序,由于具有和相应处理器直接对话的能力,所以很多问题可以拆分成一系列简单的步骤来实现PPC可以取一段待处理的数据将它分成多份分配给多个SPE处理,每个SPE所做的处理都想同,然后所有SPE完成工作后,PPC再从每个SPE核取回处理后的数据,然后将所有数据在内存中组合起来.Cell被设计为以组的方式工作,与连接机的设计相同.
当分组中的所有按照串行形式连接,将整个任务拆分成多个小任务分配给多个SPE处理,因为SPE只负责指定的小部分任务所有会很快处理完,类似流水线作业,会受到带宽有,数据传递到下一阶段的开销问题,并最终受到最慢的那个处理,最终受到最慢的处理步骤的限制.

九、应用程序中的并行类型

分为任务并行和数据并行:
任务并行:当许多任务或函数可以独立的大规模的并行执行时这就是任务并行,重点在于利用多核系统对任务进行分配.
数据并行:可以同时处理许多数据.数据并行的重点在于利用多核系统进行数据分配.
CUDA适合解决数据并行计算问题.
数据并行程序设计第一步是对数据进行划分:
块划分:一组连续的数据被分到一个块内,每个数据块以任意次序被安排给一个线程,线程在同一时间只处理一个数据块.
周期划分:更少的数据被分到一个数据块内,相邻的线程处理相邻的数据块,每个线程可以处理多个数据块,为一个待处理的线程选择一个新的块,就意味着要跳过和现有线程一样多的数据块

十、根据指令和数据进入CPU的方式和对计算机架构进行分类

单指令单数据(SISD):传统计算机,串行架构,单核心,任何时间点一个指令流处理一个数据流
单指令多数据(SIMD)一种并行架构类型,多个核心,任何时间点所有核心只有一个指令流处理不同的数据流
多指令单数据(MISD):每个核心通过多个指令流处理同一个数据流.
多指令多数据(MIMD)并行架构,多个核心使用多个指令刘来异步处理多个数据流

十一、计算机架构根据内存组织方式进行划分

分布式内存的多节点系统:大型计算引擎是由许多网络连接的处理器构成,处理期间通过网络通信,有自己的本地内存,通常叫做集群.
共享内存的多处理器系统:大小在双处理器到几十或几百个处理器之间,这些处理器要么与同一个物理内存相关联,要么共用一个低延迟的链路

十二、GPU核心和CPU核心

CPU核心比较重,用来处理比较复杂的控制逻辑,以优化串行程序执行.
GPU核心较轻,用于优化具有简单控制逻辑的数据并行任务,注重并行程序的吞吐量.
异构架构一个典型的异构计算节点包括两个多核CPU插槽和两个或多个众核GPU.GPU不是一个独立运行的平台二十CPU的协处理器,因此,GPU必须通过PCle总线和CPU的主机相连来进行操作.CPU的位置叫主机端GPU的位置叫设备端

十三、异构应用

包括主机代码和设备代码
主机代码在CPU上运行,设备代码在GPU上运行.

十四、GPU容量的两个重要特征

CUDA核心数量,内存大小

十五、两种不同指标评估GPU的性能

峰值计算性能,内存带宽

十六、两个方面区分CPU和GPU应用的范围

并行级,数据规模
如果一个问题有较小的数据规模,复杂的控制逻辑或很少的并行性,最好选择CPU处理,因为它有处理复杂逻辑和指令级并行性的能力,如果该问题包含较大规模的待处理数据并表现出大量的数据并行性,那么使用GPU是最好的选择.
为了获得最佳性能,可以同事使用CPU和GPU执行应用程序,在CPU上执行串行部分或任务并行部分,在GPU上执行数据密集并行部分

十七、CUDA一种异构计算平台

CUDA是一种通用的并行计算平台和编程模型,利用NVIDIAGPU中的并行计算引擎能更有效解决复杂的计算问题,通过使用CUDA可以像在CPU上那样通过GPU来进行计算.

十八、CUDA提供了两层API来管理GPU设备和组织线程

CUDA驱动API:一种低级API,相对来说较难编程,但对于GPU设备使用提供了更多的控制
CUDA运行时API一种高级API在驱动API的上层实现,每个运行时AI函数都被分解为更多传给驱动API的基本运算
运行时API和驱动API之间没有明显的性能差异,在设备端,内核是如何使用内存以及你是如何组织线程的,对性能有更显著的影响
这两种API是相互排斥的必须使用两者之一,从两者中混合函数调用是不可能的

十九、CUDA编程结构

一个典型的CUDA编程结构包括5个主要步骤:
1.分配GPU内存
2.从CPU内存中拷贝数据到GPU内存
3.调用CUDA内核函数来完成程序指定的运算
4.将数据从GPU拷回CPU内存
5.释放GPU内存控件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值