Решил снова поиграться с SSE/AVX на примере FFT преобразования с помощью
алгоритма Cooley-Tukey. В отличие от классического FFT он рекурсивный и работает за O(N*logN). Но опять же отличие от классического - на каждую рекурсию приходится выделять память под чётные/нечетные элементы. Это может быть не очень хорошо, но позволяет удобно оптимизировать расчёты.
Изначальный вариант работает с комплексными числами, которые определены как класс
ComplexNumber с Real/Imag свойствами.
Оптимизированный вариант использует Vector128 в 0-м элементе которого храница реальная часть, в 1-м - мнимая, и это позволяет чпокать числа побыстрее.
Результат: выигрыш х6.5 к перфу и х3.4 к аллокациям. #simd #dotnet #sse