`

CUDA编程模型

    博客分类:
  • GPU
阅读更多

CUDA编程模型

CUDA将CPU作为主机(Host),GPU作为设备(Device)。一个系统中可以有一个主机和多个设备。CPU负责逻辑性强的事务处理和串行计算,GPU专注于执行高度线程化的并行处理任务。它们拥有相互独立的存储器(主机端的内存和显卡端的显存)。

运行在GPU上的函数称为kernel(内核函数)。一个完整的CUDA程序是由一些列的kernel函数和主机端的串行处理步骤共同完成的。CPU串行代码的工作包括在kernel启动前进行的数据准备、设备初始化以及在kernel之间进行一些串行化计算。

kernel函数以函数类型限定符_global_定义,并且只能在主机端代码中调用。调用时需要制定kernel的Grid中的block数目以及每个block中thread的数目。每个线程有自己的blockID和threadID,可用来区分其它的线程,这两个内建变量是只读的,由专用寄存器提供,只能有kernel函数调用。

CUDA将计算任务映射为大量的可并行执行的线程,并由硬件动态调度和执行这些线程。kernel是以线程网格Grid的形式组织,每个Grid又若干个线程块block组成,每个block又由若干线程thread组成。本质上,kernel是以block为单位执行的,grid只是用来表示一些列并行block的集合。Block之间是不能彼此通信的。目前一个kernel只支持一个grid,在多指令多数据(MIMD)构架中会存在多个grid。

为方便编程,CUDA使用了dim3类型的内建变量threadIdx和threadIdx。

对于一维的block,线程的编号是threadIdx.x。

对于二维(Dx,Dy)的block,线程的编号是threadIdx.x+threadIdx.y * Dx。

对于三维(Dx,Dy,Dz)的block,线程的编号是threadIdx.x+threadIdx.y * Dx+hreadIdx.z* Dx * Dy。

GPU的计算核心是流多处理器(SM),每个SM包含8个标量流处理器(SP)以及其它的运算单元。Kernel是以block为单位执行的,同一个block的线程需要共享数据,因此它们共享同一个SM。一个block必须分配到一个SM,但是可以一个SM中同一个时刻有多个活动块(active block)执行等待,即同一个SM可以有多个block上下文。实际运行中,block会被分为更小的线程束(wrap),线程束的大小由硬件的计算能力决定,Tesla的构架中一个wrap由32个线程组成。

CUDA采用了单指令多线程执行模型。这个模型是对单指令多数据的改进。CUDA中执行宽度可以在1——512个线程之间变化,但是在单指令多数据中执行宽度必须是一个wrap(32)。

 

CUDA存储器模型:

 

        每一个线程拥有自己的私有存储器,每 一个线程块拥有一块共享存储器(Shared memory);最后,grid中所有的线程都可以访问同一块全局存储器(global memory)。除此之外,还有两种可以被所有线程访问的只读存储器:常数存储器(constant memory)和纹理存储器(Texture memory),它们分别为不同的应用进行了优化。全局存储器、常数存储器和纹理存储器中的值在一个内核函数执行完成后将被继续保持,可以被同一程序中其 也内核函数调用。

      下表给出了这8种存储器的位置、缓存情况,访问权限及生存域

 

存储器

位置

拥有缓存

访问权限

变量生存周期

register

GPU片内

N/A

Device可读/写

与thread相同

Local memory

板载显存

Device可读/写

与thread相同

Shared memory

GPU片内

N/A

Device可读/写

与block相同

Constant memory

板载显存

Device可读,host要读写

可在程序中保持

Texture memory

板载显存

Device可读,host要读写

可在程序中保持

Global memory

板载显存

Device可读/写, host可读/写

可在程序中保持

Host memory

Host内存

host可读/写

可在程序中保持

Pinned memory

Host内存

host可读/写

可在程序中保持

分享到:
评论

相关推荐

    CUDA编程模型(入门)

    CUDA编程模型(入门)

    CUDA编程模型及其在数据挖掘领域的应用

    ### CUDA编程模型及其在数据挖掘领域的应用 #### 一、CUDA编程模型概述 CUDA(Compute Unified Device Architecture)是由NVIDIA公司开发的一种通用并行计算架构,它提供了一套标准的C/C++编程接口,使开发者能够...

    CUDA编程模型(入门)

    CUDA编程模型是NVIDIA公司为充分利用GPU的计算能力而设计的一种并行计算平台和编程模型。这个模型使得程序员能够利用图形处理单元(GPU)的强大计算性能来解决计算密集型问题,尤其是在科学计算、图像处理、机器学习...

    初级学者的武器-CUDA编程模型

    **CUDA编程模型** CUDA(Compute Unified Device Architecture)是由NVIDIA推出的并行计算平台,它允许开发者利用GPU(图形处理器)的强大计算能力进行科学计算、数据分析、机器学习等高性能计算任务。对于初级学者...

    cuda编程模型 比较基础

    CUDA编程模型是NVIDIA公司为利用GPU(图形处理器)进行高效并行计算而设计的一种编程框架。这个模型允许开发者直接利用GPU的计算能力,尤其适用于处理计算密集型任务,如物理模拟、线性代数计算以及图像处理等领域。...

    CUDA编程模型PPT

    CUDA编程模型,华南理工大学PPT,主要介绍了CUDA编程模型的构建外加机器视觉的课件

    CUDA 编程模型PPT

    CUDA编程模型ppt 里面描述了CUDA的发展以及一些基本知识

    CUDA基本介绍 编程模型

    CUDA基本介绍 CUDA基本介绍 CUDA基本介绍

    CUDA&GPU; 编程模型

    CUDA &GPU; 编程模型参考资料,比较基础,适合入门或者平时开发过程中参考使用!

    CUDA编程,指南pdf

    ### CUDA编程模型详解 #### 一、CUDA编程模型概述 CUDA(Compute Unified Device Architecture)是一种由NVIDIA推出的并行计算平台和技术,它允许开发者利用NVIDIA GPU的强大计算能力来进行通用计算任务。CUDA提供了...

    CUDA编程入门教程

    CUDA编程模型是一个异构模型,即CPU和GPU需要协同工作,通常CPU作为主机端(host),而GPU作为设备端(device)。它们通过PCIe总线连接,CPU主要负责处理复杂逻辑的串行程序,而GPU专注于数据并行型的并行计算任务,...

    CUDA C编程权威指南.pdf

    - 本章内容回顾,强调CUDA编程模型的关键点。 - **2.6 习题** - 练习题帮助读者检验学习成果。 #### 第3章 CUDA执行模型 **3.1 CUDA执行模型概述** - **3.1.1 GPU架构概述** - GPU架构的发展历程及其特点。 ...

    CUDA编程指南5.0(无水印版)

    CUDA编程模型具有高度的可扩展性,这意味着它可以在不同的GPU硬件上,通过调整线程数量、内存访问模式等策略来适应不同的计算需求。可扩展性是CUDA区别于其他并行编程模型的一个重要特性,使得开发者可以针对不同...

    cuda编程手册

    NVIDIA CUDA(Compute Unified Device Architecture)是一种由NVIDIA推出的通用并行计算平台和编程模型,...通过熟悉上述知识点,初学者可以建立起对CUDA编程模型和环境的基本了解,并开始构建和优化并行计算应用程序。

    Cuda C 编程指南(程润伟)

    2. **CUDA编程模型**:CUDA编程模型基于C/C++,通过定义设备函数、主机函数、__global__关键字来区分GPU和CPU上的代码执行。理解如何在GPU上组织和调度线程是CUDA编程的关键。 3. **内存层次**:CUDA中有多种内存...

    cuda程序设计讲解及实例讲解

    本资源详细介绍了 CUDA 的基本理论和编程模型,以及 CUDA 在多线程和硬件结构方面的应用。通过几个案例,讲解了 CUDA 的基本应用。 知识点一:GPGPU 和 CUDA 介绍 * GPGPU(General Purpose Computing on GPU)是...

    7.CUDA C编程权威指南 (1)1

    CUDA编程模型包括内存管理(如全局内存、共享内存和常量内存),线程管理(如线程束、线程块、网格和内存访问模式),以及如何有效地利用GPU执行模型来优化程序性能。例如,通过理解和利用CUDA的执行模型,如线程束...

    CUDA编程指南5.0

    通过使用NVIDIA的GPU(图形处理单元)作为通用的并行处理器,CUDA编程模型允许开发者利用GPU的强大计算能力来解决复杂的计算问题。CUDA编程指南5.0是一份为CUDA开发者提供的技术文档,中文版的发布使得那些英语水平...

    CUDA编程 并行编程

    在CUDA编程模型中,一个线程负责执行一段代码(称为一个kernel),并且由成千上万的线程组成的线程网格负责执行一次并行任务。每个线程可以访问自己的私有内存,并且可以协同线程块内的其他线程访问共享内存,这为...

    CUDA编程5.0版本

    CUDA编程模型提供了一种能够充分利用GPU的多核处理器架构的方法,从而显著提升了计算性能。 从标题“CUDA编程5.0版本”以及描述“CUDA手册的最新翻译版本CUDA5.0说明文档,学习CUDA编程必备!”来看,这是一份针对...

Global site tag (gtag.js) - Google Analytics