Closed
Description
Running mkl_fft.fftn
on an array with shape (70, 196, 150, 24) only on the last 3 axes is more than 2 times slower than running the transform on each of the 70 sub-arrays individually using a python loop.
This is unexpected as one would assume the loop should actually run faster inside of mkl.
Simple example:
import mkl_fft
import time
shape = (70, 196, 150, 24)
array = np.random.random(shape) + 1j * np.random.random(shape)
def transform(array):
result = np.empty(array.shape, dtype=complex)
for ii, arr in enumerate(array):
result[ii] = mkl_fft.fftn(arr)
return result
t0 = time.time()
a = mkl_fft.fftn(array, axes=(1, 2, 3))
t1 = time.time()
b = transform(array)
t2 = time.time()
print('fftn on full array: {:.0f} ms'.format(1000*(t1 - t0)))
print('loop of fftn on subarray: {:.0f} ms'.format(1000*(t2 - t1)))
print(np.allclose(a, b))
On my machine this returns:
fftn on full array: 1359 ms
loop of fftn on subarray: 619 ms
True
I also verified the timings with timeit
instead of time.time
.