88
GPU での分岐
分岐の方向が同じ場合
if (X) {
A;
B;
} else {
C;
D;
}
X==true X==true X==true X==true
A A A A
B B B B
Slide 87
Slide 87 text
89
GPU での分岐
分岐の方向が違う場合
if (X) {
A;
B;
} else {
C;
D;
}
X==true X==false X==false X==true
A A A A
B B B B
C C C C
D D D D
Slide 88
Slide 88 text
90
GPU で再帰 + 分岐
GPU で再帰 + 各スレッドでバラバラに分岐すると、
1 スレッド以外はほぼ常にマスクされている状態になる
void f() {
if (X) {
f();
} else {
A;
}
}
X !X !X X !X X X X
Slide 89
Slide 89 text
91
GPU で再帰 + 分岐
GPU で再帰 + 各スレッドでバラバラに分岐すると、
1 スレッド以外はほぼ常にマスクされている状態になる
void f() {
if (X) {
f();
} else {
A;
}
}
X !X !X X !X X X X
f() f() f() f() f()
Slide 90
Slide 90 text
92
GPU で再帰 + 分岐
GPU で再帰 + 各スレッドでバラバラに分岐すると、
1 スレッド以外はほぼ常にマスクされている状態になる
void f() {
if (X) {
f();
} else {
A;
}
}
X !X !X X !X X X X
f() f() f() f() f()
!X X !X X X
Slide 91
Slide 91 text
93
GPU で再帰 + 分岐
GPU で再帰 + 各スレッドでバラバラに分岐すると、
1 スレッド以外はほぼ常にマスクされている状態になる
void f() {
if (X) {
f();
} else {
A;
}
}
X !X !X X !X X X X
f() f() f() f() f()
!X X !X X X
f() f() f()
Slide 92
Slide 92 text
94
GPU で再帰 + 分岐
GPU で再帰 + 各スレッドでバラバラに分岐すると、
1 スレッド以外はほぼ常にマスクされている状態になる
void f() {
if (X) {
f();
} else {
A;
}
}
X !X !X X !X X X X
f() f() f() f() f()
!X X !X X X
f() f() f()
X !X !X
Slide 93
Slide 93 text
95
GPU で再帰 + 分岐
GPU で再帰 + 各スレッドでバラバラに分岐すると、
1 スレッド以外はほぼ常にマスクされている状態になる
void f() {
if (X) {
f();
} else {
A;
}
}
X !X !X X !X X X X
f() f() f() f() f()
!X X !X X X
f() f() f()
X !X !X
f()
Slide 94
Slide 94 text
96
GPU で再帰 + 分岐
GPU で再帰 + 各スレッドでバラバラに分岐すると、
1 スレッド以外はほぼ常にマスクされている状態になる
void f() {
if (X) {
f();
} else {
A;
}
}
X !X !X X !X X X X
f() f() f() f() f()
!X X !X X X
f() f() f()
X !X !X
f()
!X
Slide 95
Slide 95 text
97
GPU で再帰 + 分岐
GPU で再帰 + 各スレッドでバラバラに分岐すると、
1 スレッド以外はほぼ常にマスクされている状態になる
void f() {
if (X) {
f();
} else {
A;
}
}
X !X !X X !X X X X
f() f() f() f() f()
!X X !X X X
f() f() f()
X !X !X
f()
!X
A