Commit eb9c915c by Martin Reinecke

### cleanup test programs

parent 87ac8357
bench.py 0 → 100644
 import numpy as np import pypocketfft import pyfftw from time import time import matplotlib.pyplot as plt import math nthr = 1 def _l2error(a, b): return np.sqrt(np.sum(np.abs(a-b)**2)/np.sum(np.abs(a)**2)) def prime_factorize(n): factors = [] number = math.fabs(n) while number > 1: factor = get_next_prime_factor(number) factors.append(factor) number /= factor if n < -1: # If we'd check for < 0, -1 would give us trouble factors[0] = -factors[0] return tuple(factors) def get_next_prime_factor(n): if n % 2 == 0: return 2 # Not 'good' [also] checking non-prime numbers I guess? # But the alternative, creating a list of prime numbers, # wouldn't it be more demanding? Process of creating it. for x in range(3, int(math.ceil(math.sqrt(n)) + 1), 2): if n % x == 0: return x return int(n) def measure_fftw(a, nrepeat): import pyfftw f1 = pyfftw.empty_aligned(a.shape, dtype=a.dtype) f1[()] = a f2 = pyfftw.empty_aligned(a.shape, dtype=a.dtype) fftw = pyfftw.FFTW(f1, f2, flags=('FFTW_MEASURE',), threads=nthr) tmin = 1e38 for i in range(nrepeat): t0 = time() fftw() t1 = time() tmin = min(tmin, t1-t0) return tmin def measure_fftw_np_interface(a, nrepeat): import pyfftw pyfftw.interfaces.cache.enable() tmin = 1e38 for i in range(nrepeat): t0 = time() b = pyfftw.interfaces.numpy_fft.fftn(a) t1 = time() tmin = min(tmin, t1-t0) return tmin def measure_pypocketfft(a, nrepeat): import pypocketfft as ppf tmin = 1e38 for i in range(nrepeat): t0 = time() b = ppf.c2c(a, forward=True, nthreads=nthr) t1 = time() tmin = min(tmin, t1-t0) return tmin def measure_scipy_fftpack(a, nrepeat): import scipy.fftpack tmin = 1e38 for i in range(nrepeat): t0 = time() b = scipy.fftpack.fftn(a) t1 = time() tmin = min(tmin, t1-t0) return tmin def bench_nd(ndim, nmax, ntry, tp, funcs, nrepeat, ttl="", filename=""): results = [[] for i in range(len(funcs))] for n in range(ntry): print(n, ntry) shp = np.random.randint(nmax//3, nmax+1, ndim) a = (np.random.rand(*shp) + 1j*np.random.rand(*shp)).astype(tp) for func, res in zip(funcs, results): res.append(func(a, nrepeat)) results = np.array(results) plt.title("{}: {}D, {}, max_extent={}".format( ttl, ndim, str(tp), nmax)) plt.xlabel("time ratio") plt.ylabel("counts") plt.hist(results[0, :]/results[1, :], bins="auto") if filename != "": plt.savefig(filename) plt.show() funcs = (measure_pypocketfft, measure_fftw_np_interface) ttl = "pypocketfft/fftw_numpy_interface" bench_nd(1, 8192, 100, "c16", funcs, 10, ttl, "1d.png") bench_nd(2, 2048, 100, "c16", funcs, 2, ttl, "2d.png") bench_nd(3, 256, 100, "c16", funcs, 2, ttl, "3d.png") bench_nd(1, 8192, 100, "c8", funcs, 10, ttl, "1d_single.png") bench_nd(2, 2048, 100, "c8", funcs, 2, ttl, "2d_single.png") bench_nd(3, 256, 100, "c8", funcs, 2, ttl, "3d_single.png")
 ... @@ -21,9 +21,9 @@ if sys.platform == 'darwin': ... @@ -21,9 +21,9 @@ if sys.platform == 'darwin': extra_compile_args += ['--stdlib=libc++', '-mmacosx-version-min=10.9'] extra_compile_args += ['--stdlib=libc++', '-mmacosx-version-min=10.9'] vars = distutils.sysconfig.get_config_vars() vars = distutils.sysconfig.get_config_vars() vars['LDSHARED'] = vars['LDSHARED'].replace('-bundle', '') vars['LDSHARED'] = vars['LDSHARED'].replace('-bundle', '') python_module_link_args+=['-bundle'] python_module_link_args += ['-bundle'] else: else: extra_compile_args += ['-DPOCKETFFT_OPENMP', '-fopenmp', '-Wfatal-errors', '-Wfloat-conversion' ,'-Wsign-conversion', '-Wconversion' ,'-W', '-Wall', '-Wstrict-aliasing=2', '-Wwrite-strings', '-Wredundant-decls', '-Woverloaded-virtual', '-Wcast-qual', '-Wcast-align', '-Wpointer-arith'] extra_compile_args += ['-DPOCKETFFT_OPENMP', '-fopenmp', '-Wfatal-errors', '-Wfloat-conversion', '-Wsign-conversion', '-Wconversion' ,'-W', '-Wall', '-Wstrict-aliasing=2', '-Wwrite-strings', '-Wredundant-decls', '-Woverloaded-virtual', '-Wcast-qual', '-Wcast-align', '-Wpointer-arith'] python_module_link_args += ['-march=native', '-Wl,-rpath,\$ORIGIN', '-fopenmp'] python_module_link_args += ['-march=native', '-Wl,-rpath,\$ORIGIN', '-fopenmp'] # if you don't want debugging info, add "-s" to python_module_link_args # if you don't want debugging info, add "-s" to python_module_link_args ... ...