cuda学习笔记:一、概述

一、入门

一个程序应包含两个基本组成部分:指令和数据。

当一个计算程序被分成多个小计算单元后,每个计算单元都是一个任务。每个任务中单独的指令负责处理输入和调用一个函数并产生输出。

如何一个任务处理的是另一个任务的输出,那他们就是相关的,否则是独立的。

在并行算法的视线中,相关性是限制并行性的主要因素。大多数情况下,有依赖关系任务之间的独立的关系链为并行化提供良好的机会。

并行类型:

        1.任务并行:

                当许多任务或函数可以独立地、大规模地并行执行时,这就是任务 并行。任务并行的重点在于利用多核系统对任务进行分配。

        2.数据并行

                当可以同时处理许多数据时,这就是数据并行。数据并行的重点在 于利用多核系统对数据进行分配。

                数据并行程序第一步是把数据按照线程进行划分,每个线程处理一部分数据,此过程有两种方法:块划分和周期划分。在块划分中,一组连续的数据被分到一个块内。每个数据块以任意次序被安排给 一个线程,线程通常在同一时间只处理一个数据块。在周期划分中,更 少的数据被分到一个块内。相邻的线程处理相邻的数据块,每个线程可 以处理多个数据块。为一个待处理的线程选择一个新的块,就意味着要 跳过和现有线程一样多的数据块。

对一维数据进行划分

对二维数据划分的几个例子

二、计算机架构

佛林分类法:

根据指令和数据进入CPU的方式,对计算机架构分为四种类型:

SISD指的是传统计算机:一种串行架构。在这种计算机上只有一个 核心。在任何时间点上只有一个指令流在处理一个数据流。

SIMD是一种并行架构类型。在这种计算机上有多个核心。在任何 时间点上所有的核心只有一个指令流处理不同的数据流。向量机是一种 典型的SIMD类型的计算机,现在大多数计算机都采用了SIMD架构。 SIMD最大的优势或许就是,在CPU上编写代码时,程序员可以继续按 串行逻辑思考但对并行数据操作实现并行加速,而其他细节则由编译器 来负责。

MISD类架构比较少见,在这种架构中,每个核心通过使用多个指 令流处理同一个数据流。

MIMD是一种并行架构,在这种架构中,多个核心使用多个指令流 来异步处理多个数据流,从而实现空间上的并行性。许多MIMD架构还 包括SIMD执行的子组件。

性能分析:

延迟:延迟是一个操作从开始到完成所需要的时间,常用微秒来表示。

带宽:带 宽是单位时间内可处理的数据量,通常表示为MB/sGB/s

吞吐量:单位时间内成功处理的运算数量,通常表示为gflops(即每秒十亿次的浮点运算数量)。

三、异构计算

同构计算使用 的是同一架构下的一个或多个处理器来执行一个应用。而异构计算则使 用一个处理器架构来执行一个应用,为任务选择适合它的架构,使其最 终对性能有所改进。

GPU在发展过程中从图形加速器进化为更强大且更广义的处理器,在大规模并行计算中有卓越的性能和效率

一个典型的异构节点:

        

GPU作为CPU的协处理器而不是独立运行的平台,GPU必须通过PCIe总线与CPU相连接,由此CPU侧被称为主机端(host),GPU侧被称为设备端(device)。图中可以看出,CPU可以实现复杂的逻辑和指令并行能力,他有较大的控制器和指令缓存等,而GPU则有更多的计算核心(core),可以支持大规模多线程运算,但这牺牲了对复杂逻辑判断的能力,其他单元都为核心让步

异构应用构成:

主机代码和设备代码,其在相应节点上运行,应用通常由CPU初始化,在设备端(GPU)加载计算密集任务之前,CPU代码负责管理设备端的环境、代码和数据。

当CPU与一个物理上分离的硬件来提高计算执行速度时,这个组件就成为一个硬件加速器,GPU是最为常见的硬件加速器

了解:

四个应用nvidia的GPU计算的应用:

·Tegra 是专为移动和嵌入式设备而设计的,如平板电脑和手机。

·GeForce 面向图形用户。

·Quadro 用于专业绘图设计。

·Tesla 用于大 规模的并行计算。

FermiTesla系列产品中的一种,用作GPU加速器, 近来在高性能计算中获得了广泛应用。NVIDIA2010年发布的Fermi架 构是世界上第一款完整的GPU计算架构。Fermi GPU加速器的出现让许 多领域的高性能计算有了新的发展,如地震资料处理、生化模拟、天气 和气候建模、信号处理、计算金融、计算机辅助工程、计算流体力学和 数据分析等。Fermi之后的新一代GPU计算架构Kepler,于2012年秋季发布,其处理能力相比以往的GPU有很大提升,并且提供了新的方法来优 化和提高GPU并行工作的执行,有望将高性能计算提升到新的高度。Tegra K1包含一个Kepler GPU,并能满足GPU在嵌入式应用中的一切要求。

描述GPU容量的两个重要特征:CUDA核心数量,内存大小
两种指标来评估GPU的性能:峰值计算性能(通常定义为每秒能处理的单精度或双精度浮点运算的数量),内存带宽(是从内存中读取或写入数据的比率)

计算能力

NVIDIA使用一个术语计算能力compute capability)来描述整个 Tesla系列的GPU加速器的硬件版本。表1-2给出了Tesla产品的各个版本 及其计算能力。

具有相同主版本号的设备具有相同的核心架构。

主版本NO.3Kepler类架构。

主版本NO.2Fermi类架构。

主版本NO.1Tesla类架构。

GPU和CPU线程

CPU上的线程通常是重量级的实体。操作系统必须交替线程使用启 用或关闭CPU执行通道以提供多线程处理功能。上下文的切换缓慢且开 销大。

GPU上的线程是高度轻量级的。在一个典型的系统中会有成千上万 的线程排队等待工作。如果GPU必须等待一组线程执行结束,那么它只要调用另一组线程执行其他任务即可。

CPU的核被设计用来尽可能减少一个或两个线程运行时间的延迟,而GPU的核是用来处理大量并发的、轻量级的线程,以最大限度地提高 吞吐量。

现在,四核CPU上可以同时运行16个线程,如果CPU支持超线程可 支持多至32个线程。

现代的NVIDIA GPU在每个多处理器上最多可以并发支持1536个同 时活跃的线程。有16个多处理器的GPU,可以并发支持超过24000个同 时活跃的线程。

CUDA

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

CUDA C是标准ANSI C语言的一个扩展,它带有的少数语言扩展功 能使异构编程成为可能,同时也能通过API来管理设备、内存和其他任 务。CUDA还是一个可扩展的编程模型,它使程序能对有不同数量核的 GPU明显地扩展其并行性,同时对熟悉C编程语言的程序员来说也比较 容易上手。

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

CUDA驱动API

CUDA运行时API

驱动API是一种低级API,它相对来说较难编程,但是它对于在 GPU设备使用上提供了更多的控制。

运行时API是一个高级API,它在驱动API的上层实现。每个运行时API函数都被分解为更多传给驱动API 的基本运算。

运行时API和驱动API之间没有明显的性能差异。在设备端,内核 是如何使用内存以及你是如何组织线程的,对性能有更显著的影响。

这两种API是相互排斥的,你必须使用两者之一,从两者中混合函 数调用是不可能的。

一个CUDA程序包含了以下两个部分的混合。

·CPU上运行的主机代码

·GPU上运行的设备代码

NVIDIA的nvcc编译器在变异过程中将设备代码从主机代码(也就是我们编写的代码)中分离出来,之后主机代码使用C编译器斌阿姨,设备代码(核函数)使用扩展的带有标记数据并行函数关键字的CUDA C语言编写的,通过nvcc编译。链接阶段在内核中调用和显示GPU设备操作中添加CUDA运行时库。

总结

总的来说先简单介绍一下cuda,当做我的一个学习笔记。

由于此部分都是专有名词解释等,大部分还是在抄书,之后会深入理解cuda。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值