热点推荐
ZOL首页 > 显卡 > 评测 > 横向评测 >

CUDA-Z软件Core核心界面

通用计算对决 四代NV显卡激战CUDA-Z

CBSi中国·ZOL 作者:中关村在线 濮元恺 责任编辑:龚力成 【原创】 2010年04月10日 06:55 评论
在本页阅读全文(共15页)

● CUDA-Z软件Core核心界面

    这个界面是CUDA-Z软件首先呈现给我们的界面,我们可以在这里看到自己的GPU基本信息。在开始具体的讲解之前,我们有必要简单了解CUDA的硬件单元映射。


跨时空对决 四代NV显卡激战CUDA-Z
CUDA计算单元示意图

    1、计算单元:上图是CUDA GPU计算单元简图。其中,SM代表流多处理器(Stream Multiprocessors),即CUDA的计算核心部件。每个SM又包括8个标量流处理器SP(Stream Multiprocessor),以及少量的其他计算单元。在商业宣传中,GPU往往被说成拥有数百个“核”,这里的“核”指的通常是SP单元的数量。实际上SP只是执行单元并不是完整的处理核心。拥有完整前端(Front-End)的处理核心,必须包括取指、解码、分支逻辑和执行单元。因此,将SM称为“核”更加贴切。隶属于同一SM的8个SP共用一套取指与发射单元,也共用一块共享存储器。

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

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

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

跨时空对决 四代NV显卡激战CUDA-Z
线程关系与存储结构示意图

    5、执行模型:CUDA采用了SIMT(Single Instruction,Multiple Thread,单指令多线程)执行模型,SIMT是对SIMD(Single Instruction,Multiple Data,单指令多数据)的一种改进。SIMD中的向量宽度受到硬件制约,是显式的,固定的,数据必须打包成向量后才能被处理。而在SIMT中,执行数据的宽度将作为硬件细节被隐藏起来,硬件可以自动地适应不同的执行宽度。例如一个block有若干个warp组成,执行宽度可以在1~512线程之间变化。如果按照SIMD模型设计CUDA,每个block的执行宽度都必须是一个warp,即32个线程,这无疑会大大降低编程的灵活性。另外一个不同是SIMD的向量中的元素相互之间可以自由通信,因为它们存在于相同的地址空间(位于同一寄存器);而SIMT中的每个线程的寄存器都是似有的,线程之间只能通过共享存储器和同步机制进行通信。

上一页 1 2 3 4 5 ...15 下一页
频道热词:华硕主板  Intel  AMD  
视觉焦点
显卡评测热点
排行 文章标题
TOP10周热门显卡排行榜
  • 热门
  • 新品