Как вычисляют e^x в современных процессорах?
От: Аноним  
Дата: 19.10.07 11:48
Оценка:
Тейлор?
По таблицам?
Желательно подробное описание. Хотелось бы получить ссылки на статьи.
Re: Как вычисляют e^x в современных процессорах?
От: kfmn Россия  
Дата: 22.10.07 06:01
Оценка: 33 (2) +1
Здравствуйте, Аноним, Вы писали:

А>Тейлор?

А>По таблицам?
А>Желательно подробное описание. Хотелось бы получить ссылки на статьи.

Из литературы — была старая статья классиков
Moler C., Van Loan C. Nineteen dubious ways to compute the exponential of a мatrix // The Auerbach Annual, 1979: Best Compute Papers. New-York; Oxford, 1979. pp. 237-281.

Насколько мне известно, наиболее точной и экономичной на данный момент считается аппроксимация Паде или какая-то похожая дробно-рациональная аппроксимация.

И есть еще один популярный алгоритм, основанный на таком представлении.
exp(X)=(exp(X/2^M))^(2^M)
Внутреннюю экспоненту можно вычислить отрезком ряда Тейлора длины N (если M достаточно большое, то будет быстрая сходимость), а потом M раз возвести в квадрат. Сложность — O(M+N). Можно оптимизировать погрешность относительно M и N при заданной сложности или наоборот.

Если интересно — пиши в личку, попробую найти статью по поводу этой оптимизации.
Re[2]: Как вычисляют e^x в современных процессорах?
От: Кодт Россия  
Дата: 22.10.07 10:00
Оценка: +2
K>Если интересно — пиши в личку, попробую найти статью по поводу этой оптимизации.

Да что там в личку — пиши сюда, всем же интересно!
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re: Как вычисляют e^x в современных процессорах?
От: Programador  
Дата: 22.10.07 20:24
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Тейлор?

А>По таблицам?
А>Желательно подробное описание. Хотелось бы получить ссылки на статьи.
Както аппаратно по таблицам. Например число дополняется до нужного путем умножений на числа типа 0x1000100000.. при этом их логарифмы суммируются. ТОесть все сводится к простейшим операциям типа сравнение, нахождение старшего разряда, конвеерное сложения. Никаких полиномов, а темболее дробно-рациональностей там нет. Деление вообще очень дорогая операция.

А какая скорость нынче у интел-амд?
Re[3]: Как вычисляют e^x в современных процессорах?
От: kfmn Россия  
Дата: 23.10.07 08:38
Оценка: 10 (1)
Здравствуйте, Кодт, Вы писали:

K>>Если интересно — пиши в личку, попробую найти статью по поводу этой оптимизации.


К>Да что там в личку — пиши сюда, всем же интересно!


Вот, нашел статью. Правда, там речь про матричную экспоненту, но это дела не меняет. Норму матрицы можно заменить модулем параметра.
Опубликовано было в научно-технических ведомостях СПбГТУ году в 98м или 99м...
Re[2]: Как вычисляют e^x в современных процессорах?
От: ton4eg  
Дата: 23.10.07 10:00
Оценка:
А>>Както аппаратно по таблицам. Например число дополняется до нужного путем умножений на числа типа 0x1000100000.. при А>>этом их логарифмы суммируются. ТОесть все сводится к простейшим операциям типа сравнение, нахождение старшего А>>разряда, конвеерное сложения. Никаких полиномов, а темболее дробно-рациональностей там нет. Деление вообще очень А>>дорогая операция.

Ну я тоже себе както так представлял. А нету более менее подробного описания этого процесса?
Re[3]: Как вычисляют e^x в современных процессорах?
От: Programador  
Дата: 23.10.07 11:18
Оценка:
Здравствуйте, ton4eg, Вы писали:

T>Ну я тоже себе както так представлял. А нету более менее подробного описания этого процесса?


Мое ИМХО
речь идет о F2XM1 st(0) ← (2 ↑ st(0)) – 1
Результат представлен так для точности при малых значениях. Кстати в GSL видел эту -1, в каком-то очень сомнительном log1, они пытались избавится от ошибки округления при вычитании используя чистый С. В общем туда-сюда-обратно.

st(0) здесь в фиксированном диапазоне меньше .5 . Думаю число можно представить как .AAAABBBBCCCC…=.AAA0000+.000BBB000+.000000CCC и тогда можно достичь компромисса размера таблиц и числа умножений. Для каждой .000ххх0000 своя таблица. В процессе умножений старшая 1 от числа 2↑.000BBB000 наверно подразумевается, какоето специальное умножение можно сделать для чисел вида 1.?????????
Re[3]: Как вычисляют e^x в современных процессорах?
От: Programador  
Дата: 23.10.07 18:21
Оценка:
Здравствуйте, ton4eg, Вы писали:

T>Ну я тоже себе както так представлял. А нету более менее подробного описания этого процесса?


Не чет сложно через умножение.
Есть такие числа, на которые быстро множить. 1.1b 1.01b 1.001b .... и их логарифмы Можно их умножать и складывать соответственно логарифмы. Чему равен максимум 1.1b*1.01b*1.001b* ** и log(1.1b)+ ++ и насколько плотно они покрывают отрезок другой вопрос (отдельный для Е и 2). Если не покрываю можно дополнить менее удобными числами типа 1.0101b.

ищем 2^Х

Умножение на 1.001 и сравнение (вычитание с фиксированной точкой) это примерно один клик. Согласно Software Optimization Guide for AMD Family 10h Processors latency 65 для 64 мантиссы. Можно таким методом в это время уложится.

Возможно и log посчитать можно аналогтчно и для Е сделать
Re: Как вычисляют e^x в современных процессорах?
От: Аноним  
Дата: 31.10.07 19:01
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Желательно подробное описание. Хотелось бы получить ссылки на статьи.

Некоторые математические алгоритмы
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.