PaviaЦитата:
По поводу оценки. Без глубокого знания архитектуры мы можем сделать оценку. А она может значительно отличаться от действительности в разы. К примеру КИХ филтер через умножение и сумирование и его аналог через БПФ. Первый имеет сложность O(N*M) второй O(N*log(N)). Но при этом хорошо оптимизировать второй трудно, а первый легко. Вот и выходит на практике что первый выгоднее по скорости чем второй. Так как работает в 5-50-200 раз быстрее.
5 оба максимально оптимизированы
50 не оптимизированы
200 оптимизирован только первый.
Я надеюсь, что у меня не будет таких затруднений. Алгоритмы, которые мне нужно оценить, в основном используют много матричных умножений и сложений, некоторые используют вычисления псевдообратных матриц и разложение на собственные вектора.
Цитата:
Так что без практике на железе трудно оценить.
Согласен, но я вот и хочу понят какие алгоритмы можно применить на практике, а какие нет. Больше даже интересует оценка
o(), а не
O().
У меня есть следующее соображение. Допустим я знаю, что Алгритму 3 требуется выполнить
![\mathbb{\theta}(n^2) \mathbb{\theta}(n^2)](https://dxdy-01.korotkov.co.uk/f/c/4/c/c4cf4fbda9061b35e9ae1a4f44ea618882.png)
умножений двух чисел за время
![T T](https://dxdy-04.korotkov.co.uk/f/b/9/e/b9ece18c950afbfa6b0fdbfa4ff731d382.png)
, а Алгоритму 1
![\mathbb{\theta}(n^5) \mathbb{\theta}(n^5)](https://dxdy-02.korotkov.co.uk/f/d/d/6/dd6febe226ea5d904509e62453f686e382.png)
умножений, и у меня есть устройство (ПЛИС например) которое за время
![T T](https://dxdy-04.korotkov.co.uk/f/b/9/e/b9ece18c950afbfa6b0fdbfa4ff731d382.png)
может выполнить максимум
![(n^3) (n^3)](https://dxdy-02.korotkov.co.uk/f/5/2/7/527f327a65a10280a2860fd23358da4482.png)
умножений. Следовательно Алгоритм 1 никак не получится использовать на данной ПЛИС.
Это без учета возможности параллельных вычислений. Их тоже нужно будет как-нибудь учесть...
А еще нужно будет учесть memory bandwidth, что тоже печально. Вообще работы мне хватит на месяц точно.