-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_IncrementalTileList.py
77 lines (54 loc) · 1.9 KB
/
test_IncrementalTileList.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
73
74
75
76
77
import os
import numpy as np
import pyopencl as cl
from IncrementalTileList import IncrementalTileList, Operator
szFloat = 4
szInt = 4
szChar = 1
cm = cl.mem_flags
platforms = cl.get_platforms()
devices = platforms[0].get_devices()
devices = [devices[1]]
context = cl.Context(devices)
queue = cl.CommandQueue(context)
global_dim = (4096, 4096)
global_shape = (global_dim[1], global_dim[0])
tileList = IncrementalTileList(context, devices, global_dim, (16, 16))
dim = tileList.dim
hTiles = np.random.randint(0, 20, (dim[1], dim[0])).astype(np.int32)
cl.enqueue_copy(queue, tileList.d_tiles, hTiles).wait()
tileList.build(Operator.GTE, 10)
hList = np.empty((dim[0]*dim[1],), np.int32)
cl.enqueue_copy(queue, hList, tileList.d_list).wait()
print hTiles
print 'dim: {0}, num elements: {1}'.format(dim, dim[0]*dim[1])
print hList
#test correctness
compact_cpu = np.where(hTiles >= 10)
compact_cpu = map(lambda x, y: y*dim[0] + x, compact_cpu[1], compact_cpu[0])
assert(np.all(compact_cpu == hList[0:tileList.length]))
#evaluate performance
import time
import csv
from evaluate import global_dims, iterations, tile_dim, columns
res_file = open('results/incremental.csv', 'w')
resWriter = csv.writer(res_file)
resWriter.writerow(columns)
for global_dim in global_dims:
tileList = IncrementalTileList(context, devices, global_dim, tile_dim)
mp = float(global_dim[0]*global_dim[1])/(1024*1024)
t = elapsed = 0
for i in xrange(iterations):
t = time.time()
tileList.build(Operator.GTE, 10)
elapsed += time.time()-t
row = [
"({0} {1})".format(global_dim[0], global_dim[1]),
mp,
"({0} {1})".format(tile_dim[0], tile_dim[1]),
tileList.dim[0]*tileList.dim[1],
(elapsed/iterations * 1000)
]
resWriter.writerow(row)
print "{0:.2f}mp: {1:.2f} milliseconds per iteration (mean)".format(mp, (elapsed/iterations * 1000))
True