赞
踩
假设当前warp一共四个线程,那么mask为1111,1表示执行该线程
分支之前,我们执行cbj,把activemask存起来,就是分支之前是1111,waitmask是0000
程序即将分支,分支就是跳转指令。
分支情况为A:1110,B:0001。
条件跳转分两种pc,一种是跳到pc+imm,一种是pc+4,就是接着执行后续代码.设A分支的pc是pc+imm
假设我们先执行少的,那么就需要把A的mask和pc,即pc+imm和1110存进栈里。
接着把当前总mask设置为0001,pc为pc+4,
然后我们走完B分支,
执行cbs
找到之前存的mask,waitmask&mask=0001,并不等于我们重聚需要的1111,所以从stack里弹出,设置pc为pc+imm和mask,接着走a分支,
走完又遇到cbs,这时候把a分支的maks与上,发现和waitmask一致,都是1111,线程同步,然后继续下去。
一般分支结构如下
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。