За какое минимальное количество операций можно вычислить полином?
Добавлено: 19 окт 2013, 15:23
Странно ваше недоверие.
Это не вопрос веры. Это личный опыт, полученный в результате многолетней (очень многолетней) практики.
Также для intel архитектуры [url=http://download.intel.com/design/intelxscale/31628302.pdf]http://download.intel.com/design/intelxscale/31628302.pdf[/url]
таблица 13.4.4 покажет (пишу грубо точнее смотрите таблицу) что ADD занимает 1 такта MUL занимает 3
Верю! Даже смотреть не буду. Знаете почему? Потому, как Intel среди DSP-инженеров - синоним неприличного ругательства. Там еще и не такое может быть.
Ну помилуйте, я Вам привожу в пример проц, который стоит в каждом сотовом телефоне (ну или стоял в каждом сотовом телефоне, пока я разрабатывал сотовые телефоны). А где стоит Intel? На одну семью приходится несколько сотовых телефонов и только один ПиСюк. И абсолютно точно, в нем стоит AMD, а не Intel. Так как он дешевле и игрушки на нем шустрее работают.
Конвейер тут как раз важен - он частично позволяет выровнять производительность загружая разные ALU.
Думаю, Вы немного путаете конвейерность с суперскалярностью. Плохо знаю, как это работает в недоразумении под кодовым названием Intel (я - человек серьезный и чушью не занимаюсь), но почти уверен, что никто там ничего не перераспределяет между АЛУ. Аргументировать? Пожалуйста!
На Вашем компе я, думаю, не менее 2-х ядер. А это гораздо круче отдельных АЛУ. Запустите какую-нибудь мощную задачу в Matlabe и посмотрите в диспетчере задач распределение производительности между ядрами. Она поделиться между ними. При 2-х ядрах - 50% на 50%. При чем, если производительность одного ядра возрастет до, например, 80%, то производительность другого в этот момент опустится, соответственно, до 20%. На сегодня разделять произвольный алгоритм на два параллельных не умеет никто. Существуют ли случаи, когда задействованы все ядра по максимуму? Да. Но это, когда программист сам делит алгоритм между ядрами в ручную. Делит и матерится. Поверьте старому, заслуженному делителю производительности между АЛУ, ядрами, процессорами и проч.
Современная тенденция иметь несколько (например три) ALU на процессоре что позволяет выполнять разные оптимизации вроде сспекулятивных вычислений.
Скажите это интеловцам. Бабаяну например. Вместе посмеемся. Я ему, правда, говорил уже
Значит алгорит Винограда - лучший на данный момент?
Я не говорил, что он лучший. В нем наименьшее количество умножений из всех известных на сегодня алгоритмов (кстати, нигде не нашел утверждения, что это самый быстрый алгоритм, парень, похоже ошибся, но не настаиваю). Но его реализация... Нафиг-нафиг такую экономию... Кстати, утверждение:
в алгоритме БПФ происходит когерентное накопление ошибок округления при умножении и сложении. Однако данный эффект оказывает сколь-нибудь существенное влияние при арифметике с фиксированной точкой и представлении чисел с количеством разрядов менее 8-ми.
показывает, что автор никогда не реализовывал БПФ. Эффект накопления ошибок округления настолько силен, что не имеет смысла реализовывать БПФ длиннее 256 отсчетов даже при 16-битной арифметике. Какие к бису 8 разрядов? А в остальном так оно и есть. Количество перемножений важно, но определяет далеко не все.