zoukankan      html  css  js  c++  java
  • GPU入门概念篇(硬件,CUDA,OPENCL)

    (部分内容转自网络)

    一 硬件层次划分

    GPU硬件架构:

    一个GPU上包含多个SM(STREAMING MULTIPROCESSOR),一个SM包含8个SP(STREAMING PROCESSOR)

    sp: 最基本的处理单元,streaming processor 最后具体的指令和任务都是在sp上处理的。

    GPU进行并行计算,也就是很多个sp同时做处理

    sm:多个sp加上其他的一些资源组成一个sm, streaming multiprocessor. 其他资源也就是存储资源,共享内

    存,寄储器等。每个SM大致相当于一个8路SIMD处理器,单指令宽度不是8,是32.(即等于warp size)

    ???

    GPU架构如下:

    二 CUDA架构:

    CUDA架构是程序执行时候,对GPU计算资源进行的逻辑划分。

    在利用cuda进行编程时,一个grid分为多个block,而一个block分为多个thread.一个kernel函数映射到一个grid上执行。

    1、线程结构:CUDA将计算任务映射为大量的可以并行执行的线程,并且硬件动态调度和执行这些线程。 Kernel以线程网格(Grid)的形式组织,每个线程网格由若干个线程块(block)组成,每个线程块又由若干个线程(thread)组成。实质 上,kernel是以block为单位执行的,CUDA引入grid只是用来表示一系列可以被并行执行的block的集合。各block是并行执行 的,block间无法通信,也没有执行顺序。目前一个kernel函数中有一个grid,而未来支持DX11的硬件采用了MIMD(多指令多数据)架构, 允许在一个kernel中存在多个不同的grid。

    2Block:CUDA中的kernel函数实质上是以block为单位执行的,同一block中的 线程需要共享数据,因此它们必须在同一个SM中发射,而block中的每一个线程(thread)则被发射到一个SP上执行。一个block必须被分配到 一个SM中,但是一个SM中同一时刻可以有多个活动线程块(active block)在等待执行,即在一个SM中可以同时存在多个block的上下文。当一个block进行同步或者访问显存等高延迟操作时,另一个block就 可以“趁虚而入”,占用GPU资源,最大限度利用SM的运算能力。

    3 warp:GPU执行程序时的调度单位,目前cuda的warp的大小为32,同在一个warp的线程,以不同数据资源

    执行相同的指令。(warp对程序员是隐式的)

    Warp:在实际运行中,block会被分割为更小的线程束,这就是warp。线程束的大小由硬件 的计算能力版本决定。在目前所有的NVIDIA GPU中,一个线程束由连续的32个线程组成。warp中的线程只与thread ID有关,而与block的维度和每一维的尺度没有关系,这种分割方式是由硬件决定的。简单地说,warp中包含32条线程是因为每发射一条warp指 令,SM中的8个SP会将这条指令执行4遍。在硬件中实际运行程序时,warp才是真正的执行单位。虽然warp是一个由硬件决定的概念,在抽象的 CUDA编程模型中并不存在,但是其影响力绝对不容忽略。

    grid、block、thread:在利用cuda进行编程时,一个grid分为多个block,而一个block分为多个thread.其中

    任务划分到是否影响最后的执行效果。划分的依据是任务特性和GPU本身的硬件特性。

    跨时空对决 四代NV显卡激战CUDA-Z

    线程关系与存储结构示意

    此图反应了warp作为调度单位的作用,每次GPU调度一个warp里的32个线程执行同一条指令,其中各

    个线程对应的数据资源不同。

    此图是一个warp排程的例子。

    一个sm只会执行一个block里的warp,当该block里warp执行完才会执行其他block里的warp。

    进行划分时,最好保证每个block里的warp比较合理,那样可以一个sm可以交替执行里面的warp,从而提高

    效率,此外,在分配block时,要根据GPU的sm个数,分配出合理的block数,让GPU的sm都利用起来,提

    利用率。分配时,也要考虑到同一个线程block的资源问题,不要出现对应的资源不够。


    三 OPENCL架构

    对应CUDA组织多个workgroup,每个workgroup划分为多个thread.

  • 相关阅读:
    加密与解密学习笔记3-Windows与Unicode
    加密与解密学习笔记2-windows API函数
    加密与解密学习笔记1-文本编码方式
    python3基础知识自学笔记4-流程控制、迭代器、生成器
    python3基础知识自学笔记3-集合字典元组
    python3基础知识自学笔记2-列表
    在单链表按升序插入一个值
    [转]设置好ftp后用xftp连接提示无法打开,无法显示远程文件夹
    删除底部"自豪地采用 WordPress"
    win7一体机放音乐时只有音乐,人声特别小怎么回事
  • 原文地址:https://www.cnblogs.com/catkins/p/5270793.html
Copyright © 2011-2022 走看看