75 lines
1.9 KiB
Python
75 lines
1.9 KiB
Python
|
from subprocess import Popen, PIPE, STDOUT
|
||
|
|
||
|
import numpy as np
|
||
|
|
||
|
SZ = [2, 3, 4, 8, 12, 15, 16, 17, 32, 64, 128, 256, 512, 1024]
|
||
|
|
||
|
|
||
|
def gen_data(dt):
|
||
|
arrays = {}
|
||
|
|
||
|
if dt == np.float128:
|
||
|
pg = './fftw_longdouble'
|
||
|
elif dt == np.double:
|
||
|
pg = './fftw_double'
|
||
|
elif dt == np.float32:
|
||
|
pg = './fftw_single'
|
||
|
else:
|
||
|
raise ValueError("unknown: %s" % dt)
|
||
|
# Generate test data using FFTW for reference
|
||
|
for type in [1, 2, 3, 4, 5, 6, 7, 8]:
|
||
|
arrays[type] = {}
|
||
|
for sz in SZ:
|
||
|
a = Popen([pg, str(type), str(sz)], stdout=PIPE, stderr=STDOUT)
|
||
|
st = [i.decode('ascii').strip() for i in a.stdout.readlines()]
|
||
|
arrays[type][sz] = np.fromstring(",".join(st), sep=',', dtype=dt)
|
||
|
|
||
|
return arrays
|
||
|
|
||
|
|
||
|
# generate single precision data
|
||
|
data = gen_data(np.float32)
|
||
|
filename = 'fftw_single_ref'
|
||
|
# Save ref data into npz format
|
||
|
d = {'sizes': SZ}
|
||
|
for type in [1, 2, 3, 4]:
|
||
|
for sz in SZ:
|
||
|
d['dct_%d_%d' % (type, sz)] = data[type][sz]
|
||
|
|
||
|
d['sizes'] = SZ
|
||
|
for type in [5, 6, 7, 8]:
|
||
|
for sz in SZ:
|
||
|
d['dst_%d_%d' % (type-4, sz)] = data[type][sz]
|
||
|
np.savez(filename, **d)
|
||
|
|
||
|
|
||
|
# generate double precision data
|
||
|
data = gen_data(np.float64)
|
||
|
filename = 'fftw_double_ref'
|
||
|
# Save ref data into npz format
|
||
|
d = {'sizes': SZ}
|
||
|
for type in [1, 2, 3, 4]:
|
||
|
for sz in SZ:
|
||
|
d['dct_%d_%d' % (type, sz)] = data[type][sz]
|
||
|
|
||
|
d['sizes'] = SZ
|
||
|
for type in [5, 6, 7, 8]:
|
||
|
for sz in SZ:
|
||
|
d['dst_%d_%d' % (type-4, sz)] = data[type][sz]
|
||
|
np.savez(filename, **d)
|
||
|
|
||
|
# generate long double precision data
|
||
|
data = gen_data(np.float128)
|
||
|
filename = 'fftw_longdouble_ref'
|
||
|
# Save ref data into npz format
|
||
|
d = {'sizes': SZ}
|
||
|
for type in [1, 2, 3, 4]:
|
||
|
for sz in SZ:
|
||
|
d['dct_%d_%d' % (type, sz)] = data[type][sz]
|
||
|
|
||
|
d['sizes'] = SZ
|
||
|
for type in [5, 6, 7, 8]:
|
||
|
for sz in SZ:
|
||
|
d['dst_%d_%d' % (type-4, sz)] = data[type][sz]
|
||
|
np.savez(filename, **d)
|