Files
triton/python/autotune/pysrc/dataset.py

57 lines
1.6 KiB
Python
Raw Normal View History

2014-09-27 20:54:17 -04:00
import os
2014-09-28 19:37:56 -04:00
import sys
2014-09-27 20:54:17 -04:00
import re
import random
import numpy as np
2014-10-29 17:01:57 +01:00
def sample_profiles(execution_handler, generator):
2014-10-28 01:10:14 -04:00
print "Sampling profiles..."
2014-10-29 17:01:57 +01:00
t = np.empty(0)
2014-10-28 01:10:14 -04:00
profiles = []
2014-10-29 17:01:57 +01:00
for i, x in enumerate(generator):
print x
if i==0:
X = np.empty((0,len(x)))
2014-10-28 01:10:14 -04:00
y = execution_handler(x)
if y not in profiles:
profiles.append(y)
idx = profiles.index(y)
2014-10-29 17:01:57 +01:00
X = np.vstack((X, x))
t = np.append(t, idx)
2014-10-28 01:10:14 -04:00
idx = int(t[np.argmax(np.linalg.norm(X, axis=1))])
2014-10-29 17:01:57 +01:00
profiles = [profiles[idx]] + [x for i,x in enumerate(profiles) if i!=idx]
2014-10-28 01:10:14 -04:00
return profiles
2014-10-29 17:01:57 +01:00
def sample_dataset(prefix_name, profiles, execution_handler, generator):
P = len(profiles)
2014-10-28 01:10:14 -04:00
print "Generating the dataset..."
2014-10-29 17:01:57 +01:00
Y = np.empty((0, P))
for i,x in enumerate(generator):
if i==0:
X = np.empty((0,len(x)))
new_y = np.zeros(P)
2014-10-28 01:10:14 -04:00
for j,y in enumerate(profiles):
T = execution_handler(x, os.devnull, y)
2014-10-29 17:01:57 +01:00
new_y[j] = T
X = np.vstack((X, x))
Y = np.vstack((Y, new_y))
2014-10-28 01:10:14 -04:00
if i%10==0:
sys.stdout.write('%d data points generated\r'%i)
sys.stdout.flush()
2014-09-27 20:54:17 -04:00
2014-10-29 17:01:57 +01:00
idx = np.argsort(Y[np.argmax(np.linalg.norm(X, axis=1)),:])
Y = Y[:, idx]
2014-10-29 17:01:57 +01:00
profiles = [profiles[i] for i in idx]
2014-10-28 01:10:14 -04:00
dir = os.path.join("data", prefix_name)
if not os.path.exists(dir):
os.makedirs(dir)
np.savetxt(os.path.join(dir,"X.csv"), X)
np.savetxt(os.path.join(dir,"Y.csv"), Y)
np.savetxt(os.path.join(dir,"profiles.csv"), profiles)
2014-10-29 17:01:57 +01:00
return X, Y, profiles