-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmasked_select.py
72 lines (59 loc) · 1.68 KB
/
masked_select.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import torch
from time import time
torch.manual_seed(0)
warmups = 100 # iterations
total_times = 10 # seconds
# output = torch.masked_select(input, mask)
def run_single_test(N, C):
input = torch.randn(N, C)
mask = input.ge(0.0)
for i in range(warmups):
output = torch.masked_select(input, mask)
ttime = 0
iters = 0
while(ttime < total_times):
t1 = time()
output = torch.masked_select(input, mask)
t2 = time()
ttime = ttime + t2 - t1
iters = iters + 1
tt = ttime * 1000 / iters
print("input size: [{} {}]; output size: [{}]: time = {:.3f} ms".format(
N, C, output.size()[0], tt))
def benchmark():
run_single_test(128, 1000)
run_single_test(256, 1000)
run_single_test(512, 1000)
run_single_test(1024, 1000)
benchmark()
def validate():
input = torch.randn(3, 4)
mask = input.ge(0.0)
print('bool mask')
print('input', input)
print('mask', mask)
output = torch.masked_select(input, mask)
print('output', output)
mask1 = mask.byte()
print('byte mask')
print('mask', mask1)
output1 = torch.masked_select(input, mask1)
print('output1', output1)
#validate()
def broadcast1():
input = torch.randn(2, 5)
mask = input.ge(0.0)[0]
print('input', input, input.size())
print('mask', mask, mask.size())
output = torch.masked_select(input, mask)
print('output', output)
def broadcast2():
input = torch.randn(2, 5)
mask = input.ge(0.0)
input = input[0][0]
print('input, ', input, input.size())
print('mask', mask, mask.size())
output = torch.masked_select(input, mask)
print('output', output)
#broadcast1()
#broadcast2()