1*da0073e9SAndroid Build Coastguard Workerimport functools 2*da0073e9SAndroid Build Coastguard Workerimport operator 3*da0073e9SAndroid Build Coastguard Workerimport random 4*da0073e9SAndroid Build Coastguard Workerimport time 5*da0073e9SAndroid Build Coastguard Worker 6*da0073e9SAndroid Build Coastguard Workerimport numpy as np 7*da0073e9SAndroid Build Coastguard Worker 8*da0073e9SAndroid Build Coastguard Workerimport torch 9*da0073e9SAndroid Build Coastguard Worker 10*da0073e9SAndroid Build Coastguard Worker 11*da0073e9SAndroid Build Coastguard Worker# shim for torch.cuda.Event when running on cpu 12*da0073e9SAndroid Build Coastguard Workerclass Event: 13*da0073e9SAndroid Build Coastguard Worker def __init__(self, enable_timing): 14*da0073e9SAndroid Build Coastguard Worker pass 15*da0073e9SAndroid Build Coastguard Worker 16*da0073e9SAndroid Build Coastguard Worker def record(self): 17*da0073e9SAndroid Build Coastguard Worker self.time = time.perf_counter() 18*da0073e9SAndroid Build Coastguard Worker 19*da0073e9SAndroid Build Coastguard Worker def elapsed_time(self, end_event): 20*da0073e9SAndroid Build Coastguard Worker assert isinstance(end_event, Event) 21*da0073e9SAndroid Build Coastguard Worker return end_event.time - self.time 22*da0073e9SAndroid Build Coastguard Worker 23*da0073e9SAndroid Build Coastguard Worker 24*da0073e9SAndroid Build Coastguard Workerdef gen_sparse_csr(shape, nnz): 25*da0073e9SAndroid Build Coastguard Worker fill_value = 0 26*da0073e9SAndroid Build Coastguard Worker total_values = functools.reduce(operator.mul, shape, 1) 27*da0073e9SAndroid Build Coastguard Worker dense = np.random.randn(total_values) 28*da0073e9SAndroid Build Coastguard Worker fills = random.sample(list(range(total_values)), total_values - nnz) 29*da0073e9SAndroid Build Coastguard Worker 30*da0073e9SAndroid Build Coastguard Worker for f in fills: 31*da0073e9SAndroid Build Coastguard Worker dense[f] = fill_value 32*da0073e9SAndroid Build Coastguard Worker dense = torch.from_numpy(dense.reshape(shape)) 33*da0073e9SAndroid Build Coastguard Worker 34*da0073e9SAndroid Build Coastguard Worker return dense.to_sparse_csr() 35*da0073e9SAndroid Build Coastguard Worker 36*da0073e9SAndroid Build Coastguard Worker 37*da0073e9SAndroid Build Coastguard Workerdef gen_sparse_coo(shape, nnz): 38*da0073e9SAndroid Build Coastguard Worker dense = np.random.randn(*shape) 39*da0073e9SAndroid Build Coastguard Worker values = [] 40*da0073e9SAndroid Build Coastguard Worker indices = [[], []] 41*da0073e9SAndroid Build Coastguard Worker for n in range(nnz): 42*da0073e9SAndroid Build Coastguard Worker row = random.randint(0, shape[0] - 1) 43*da0073e9SAndroid Build Coastguard Worker col = random.randint(0, shape[1] - 1) 44*da0073e9SAndroid Build Coastguard Worker indices[0].append(row) 45*da0073e9SAndroid Build Coastguard Worker indices[1].append(col) 46*da0073e9SAndroid Build Coastguard Worker values.append(dense[row, col]) 47*da0073e9SAndroid Build Coastguard Worker 48*da0073e9SAndroid Build Coastguard Worker return torch.sparse_coo_tensor(indices, values, size=shape) 49*da0073e9SAndroid Build Coastguard Worker 50*da0073e9SAndroid Build Coastguard Worker 51*da0073e9SAndroid Build Coastguard Workerdef gen_sparse_coo_and_csr(shape, nnz): 52*da0073e9SAndroid Build Coastguard Worker total_values = functools.reduce(operator.mul, shape, 1) 53*da0073e9SAndroid Build Coastguard Worker dense = np.random.randn(total_values) 54*da0073e9SAndroid Build Coastguard Worker fills = random.sample(list(range(total_values)), total_values - nnz) 55*da0073e9SAndroid Build Coastguard Worker 56*da0073e9SAndroid Build Coastguard Worker for f in fills: 57*da0073e9SAndroid Build Coastguard Worker dense[f] = 0 58*da0073e9SAndroid Build Coastguard Worker 59*da0073e9SAndroid Build Coastguard Worker dense = torch.from_numpy(dense.reshape(shape)) 60*da0073e9SAndroid Build Coastguard Worker return dense.to_sparse(), dense.to_sparse_csr() 61