-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathfile_name_server.py
94 lines (81 loc) · 2.89 KB
/
file_name_server.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import string
import os
import csv
def get_file_name(bm, dimK, dimV, kernel, sort, job, sddmm_alg, precision, mem):
# Select the kernel to profile
if kernel == 'wmma':
suffix = '_wmma'
elif kernel == 'cuda':
suffix = '_cuda'
elif kernel == 'sputnik':
suffix = '_sputnik'
elif kernel == 'cusparse':
suffix = '_cusparse'
elif kernel == 'bell':
suffix = '_blocked_ell'
else:
suffix = '_dense'
# Select the precision
if precision == 'half':
suffix += '_half'
else:
suffix += '_single'
if sort:
suffix += '_sort'
# If the job is SpMM
if job == 'spmm':
if mem:
output_file = './csv/mem/spmm/%s_k%d_v%d.csv' % (bm.replace('/raid/datasets/', '').replace('.smtx', '') + suffix, dimK, dimV)
else:
output_file = './csv/spmm/%s_k%d_v%d.csv' % (bm.replace('/raid/datasets/', '').replace('.smtx', '') + suffix, dimK, dimV)
# Else if the job is SDDMM
else:
if kernel == 'wmma':
suffix += '_%s' % sddmm_alg
if mem:
output_file = './csv/mem/sddmm/%s_k%d_v%d.csv' % (bm.replace('/raid/datasets/', '').replace('.smtx', '') + suffix, dimK, dimV)
else:
output_file = './csv/sddmm/%s_k%d_v%d.csv' % (bm.replace('/raid/datasets/', '').replace('.smtx', '') + suffix, dimK, dimV)
return output_file
def get_bm_size(bm, dimK, dimV):
with open("/raid/datasets/dlmc/%s.smtx" % bm) as bm_file:
lines = bm_file.readlines()
# Get the problem size
[m, n, nnz] = list(map(int, lines[0].split(', ')))
# return dimK * dimV * nnz
return dimK * dimV * m * n
# function that collects the result
def extract_duration_ncu(file):
if os.path.exists(file):
with open(file, 'r') as csvfile:
csvreader = csv.reader(csvfile)
unit = 'unknown'
dur_accumulate = 0
for row in csvreader:
if len(row) >= 3 and "Duration" in row[-4]:
unit = row[-3]
try:
dur = float(row[-2])
if unit == 'second':
dur *= 1000
elif unit == 'usecond':
dur /= 1000
elif unit == 'nsecond':
dur /= 1e+6
else:
print('unknown unit')
dur_accumulate += dur
except:
# print(file)
return -1.0
return dur_accumulate
else:
print('file %s does not exist' % file)
def geometric_mean(list_in):
geo_mean = []
for sub_list in list_in:
mean = 1.
for s in sub_list:
mean *= s
geo_mean.append(pow(mean, 1./len(sub_list)))
return geo_mean