gpu线程分支

假设如上情况线程分支

分支之前是跳转指令,插入cbj,记录当前a码和w码,(activa和wait),1111和0000

紧接着是跳转指令,A要分为B和F,我们假设B为ture,下一条pc+4,F为false,pc+imm

假设策略先执行少的,设置pc为pc+imm。

那么我们会将B的下一跳pc信息以及活跃码信息压入栈,即pc+4和1110

那么下一个循环执行F,执行完之后遇到cbj指令,cbs指令,

因为和A之前的cbj指令是相对应的,所以会找到A指令之前的cbj存的a、w码,那么合并之后发现a、w码并不相等,那么说明还有分支没有执行,那么改变w码为0001,从栈里弹出B的pc+4以及掩码1110

这时候又遇到cbj指令,同样的操作,记录B的a码和w码1110 0000

然后是分支指令,我们假设C为ture,下一条pc+4,D为false,pc+imm

因为C少,所以存D的pc+imm,掩码0110进栈

下一条执行C,执行C之后会遇到cbs指令,那么查看的是B存的信息,改变w码为1000,发现和a码不一样,那么弹D信息出栈

当D执行完毕之后,改变B的W码为1110,发现等于B的a码1110,说明B的所有分支重聚,那么当前a码改为1110,然后继续执行D的下一条指令

E执行完成之后,遇到cbs,那么这是A的,A现在的信息为1111 0001合并a码之后为1111,和w码一样,说明合并完毕,然后所有线程继续往下执行

指令分布示例

这边以wrap方式执行指令为跳转和一些扩展指令,比如mma,使用tensor core的,是以pu为单位的资源,和线程没关系。

相关推荐

  1. 线(74)分段

    2024-04-10 16:14:03       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-10 16:14:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-10 16:14:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-10 16:14:03       82 阅读
  4. Python语言-面向对象

    2024-04-10 16:14:03       91 阅读

热门阅读

  1. 使用opencv + ffmpeg 开发视频播放器Demo

    2024-04-10 16:14:03       44 阅读
  2. k8s-pod设置执行优先级

    2024-04-10 16:14:03       39 阅读
  3. 在Pod设置limit 的情况下,如何让JDK容器适配

    2024-04-10 16:14:03       45 阅读
  4. “AI程序员上岗:垂类大模型应用蓬勃发展“

    2024-04-10 16:14:03       38 阅读
  5. hdc常用命令大全

    2024-04-10 16:14:03       37 阅读
  6. 分库,分表,分区,分片

    2024-04-10 16:14:03       40 阅读
  7. 【无标题】Ant Design of Vue + vue2.0 + 纯前端下载word

    2024-04-10 16:14:03       45 阅读
  8. Golang基础-11

    2024-04-10 16:14:03       38 阅读
  9. 2.Go的基本语法-指针、结构体、Map

    2024-04-10 16:14:03       31 阅读
  10. Qt自定义标题栏【即取即用模板】

    2024-04-10 16:14:03       41 阅读
  11. 如何利用ChatGPT提升学术论文写作效率

    2024-04-10 16:14:03       35 阅读