计算机体系结构期末复习3:GPU架构及控制流问题

目录

一、GPU设计思路

1.简化流水线、增加核数

2.单指令多线程(SIMT)

3.同时驻留大量线程

4.总思路:多线程+单指令多线程

二、GPU的控制流问题

1.什么是控制流问题

2.怎么应对分支分歧


一、GPU设计思路

1.简化流水线、增加核数

2.单指令多线程(SIMT)

多个核心共用一条指令。

用Nvidia的术语描述就是:

  • 多个threads,每个都有自己的寄存器
  • 一组共同发射的线程称为一个wrap(问:执行某代码段需要多少个warps?即执行该代码段需要发射多少次线程。循环次数/核心个数。)
  • 所有一块发射的threads执行同一条指令
  • 每个流水线称为一个SM(streaming multiprocessor)

3.同时驻留大量线程

在单核心上维护远多于执行单元的线程数,以实现细粒度的调度掩盖高延迟的操作。

通俗理解多线程

采用细粒度多线程,流水线每周期读入不同线程的指令(即读取不同PC)。因为这些指令来自不同的线程,所以不存在数据相关,也不会因为数据相关而引入阻塞。

假设有八个线程。需要1个全局PC+8个线程PC,8组context(通用寄存器)。

4.总思路:多线程+单指令多线程

  • 每个SM支持几十个wraps.(几十组PC,几十组互不相关的指令)。每周期取一条指令,来自一个warp.
  • 每个wrap上有32个线程.即一条指令可分担到32个线程进行处理。

二、GPU的控制流问题

1.什么是控制流问题

1)当GPUwarp中的线程,分支到不同的执行路径时,会产生分支分歧。

ex.假设GPU的某个warp每组有64个线程,即GPU有64个核心。执行下面代码。

cpp 复制代码
for(int i=0;i<1024;i++)
{
    if(i%2==0)
    {a[i]++;}
    else
    {a[i]--;}
}

可以看到循环内分别有三条指令:A.i%2==0 B.ai++ C.ai--

对于第一条指令,warp中的64个线程都可以执行(i%2==0)的操作。

对于第二条指令,warp中的32个线程可以执行(ai++)的操作。由于每个周期只能执行一条指令,wrap中的剩下32个线程被迫停歇。第三条指令同理,也是只有一半的线程在执行指令。

问1:执行该代码段需要多少个wraps?

答1:一个warp就是GPU中一组发射的共同线程。1024/64=16.

问2:执行该代码段,GPU的利用率是多少?

答2:(1+0.5+0.5)/3=66.7%

2.怎么应对分支分歧

1)工作流程

每个warp用stack存储不跳转分支的PCs和掩码

遇到分支时

-- 将当前掩码入栈

-- 将不跳转分支的掩码和PC入栈

-- 设置当前掩码为跳转分支的掩码

分支执行完时

-- 将不跳转分支的掩码和PC出栈,并执行分支

不跳转分支执行完时

-- 将分支之前的源掩码弹出
• 如果一个分支的掩码都是0,跳过该代码块

注:若掩码第i位为1,代表wrap中的第i个线程执行该指令;为0代表不执行。如果一个分支的掩码都是0,跳过该代码块。

2)完整实例

ex1.假设每个wrap有四个线程,初始掩码为1111.执行下面的代码段:

cpp 复制代码
//原掩码:1111
if (m[i] != 0) {    
    //指令m[i] != 0执行后:1100
    if (a[i] > b[i]) {    .
    //指令a[i] > b[i]执行后:1000
        y[i] = a[i] - b[i];    //指令C:
    } else {
        //指令a[i] > b[i]对应的不跳转分支:0100
        y[i] = b[i] - a[i];    
            }
} else {    
    //指令m[i] != 0对应的不跳转分支掩码:0011
    y[i] = 0;    
}
相关推荐
国科安芯3 小时前
航天电子模拟前端三大支柱:精密运放、高速运放与电压监控的协同设计方法——ASL8522S/ASL622S/ASL706S技术解析
前端·单片机·嵌入式硬件·fpga开发·架构·安全性测试
listening7774 小时前
HarmonyOS 6.1 全场景开发终篇:从单设备到万物互联的实战复盘与架构思考
华为·架构·harmonyos
heimeiyingwang6 小时前
【架构实战】缓存一致性:Cache Aside与双写问题的破解
spring·缓存·架构
feiyu_gao7 小时前
别再让 AI 从零开始了
人工智能·架构·aigc
通问AI8 小时前
GPT-5.6 三模型架构深度解析:Sol/Terra/Luna 技术对比与工程落地指南
gpt·架构
QN1幻化引擎8 小时前
我写了一个「有八层意识结构」的 Python 认知引擎,它没有用任何 LLM
人工智能·算法·架构
CoreTK芯通康EMC整改11 小时前
《2026 电子制造业 EMC 合规白皮书》解读:PCB EMC 设计全链路优化指南(附器件选型矩阵)
人工智能·硬件工程·设计规范·emc整改案例·emc整改
还有多久拿退休金12 小时前
AI 写了代码,谁替你"试毒"?
前端·架构·ai编程
Slice_cy14 小时前
Docker 体系化完整知识框架(从构建到运行到编排)
架构
hbugs00114 小时前
PNETLab vs EVE-NG Pro 流量洞察功能底层架构技术白皮书
网络·架构·eve-ng·bpf·流量洞察