I wonder if it is worth making a special AutoConvolve class in C++ that does f(k)^2 in fourier space to save half of the function calls rather than calculating f(k) separately for each item when they come in identical pairs.  I can whip that up quick if you think it's worthwhile.