Potrzebuję 1K Konwolucji przeciwko 2 dużym tablicom. Używam tego kodu w języku C#, ale uruchomienie trwa krócej.Szybka Konwolucja 1D bez FFT
Wiem, wiem! Zwój FFT jest bardzo szybki. Ale w tym projekcie NIE MOŻNA go używać. Jest to ograniczenie projektu, aby nie używać FFT (proszę nie pytać dlaczego: /).
To jest mój kod w języku C# (przeniesiony z Matlab, nawiasem mówiąc):
var result = new double[input.Length + filter.Length - 1];
for (var i = 0; i < input.Length; i++)
{
for (var j = 0; j < filter.Length; j++)
{
result[i + j] += input[i] * filter[j];
}
}
Więc ktoś zna żadnego szybki algorytm splot widthout FFT?
Chociaż powiedziałeś, że nie zapytasz, dlaczego nie możesz użyć FFT? Jeśli jest to projekt klasy, w którym jest wyraźnie zabronione, powinieneś oznaczyć to jako zadanie domowe. – templatetypedef
Czy C# może wywoływać CUDA? Możesz użyć instrukcji równoległych, jeśli tak, co znacznie przyspiesza naiwne nawinięcia. Lub możesz użyć transformacji Winograd lub coś podobnego (nie klasycznego FFT Cooleya-Tukeya, jeśli to wystarczająco daleko, aby zaspokajać twoją zasadę "bez FFT"). Lub jeśli wiesz coś na temat wejścia lub filtra (jak tylko niektóre częstotliwości są obecne lub coś w tym stylu), możesz użyć tej wiedzy. Będziesz musiał dokładniej określić swoje ograniczenia i wiedzę z zewnątrz. – mtrw