Что может происходить?
Сначала я подумал, что причина в том, что базовая реализация FFT уже распараллелена.В то время как интерпретатор Python является однопоточным, код C, который может вызываться из Python, может полностью использовать ваш ЦП.
Тем не менее, базовая реализация scipy.correlate в FFT, по-видимому, представляет собой fftpack в NumPy (переведеноиз Fortran, который был написан в 1985 году), который выглядит как однопоточный по сравнению с тем, как он выглядит на странице fftpack .
Действительно, я запустил ваш скрипт и получил значительно более высокую загрузку ЦП.С четырьмя ядрами на моем компьютере и четырьмя процессами я получил ускорение ~ 2 (для массивов 2000x2000 и использования изменений кода с Raw Dawg ).
Затраты на создание процессов и обмен даннымис процессами съедает часть преимуществ более эффективного использования ЦП.
Вы все еще можете попытаться оптимизировать размеры массива или вычислить только небольшую часть корреляции (если вам все это не нужно)или если ядро все время одинаково, вычислите FFT ядра только один раз и используйте его повторно (это потребует реализации части scipy.correlate самостоятельно), или попробуйте одинарную точность вместо двойной или выполните корреляцию на видеокарте сCUDA.