Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.25;
Скачать: CL | DM;

Вниз

exp + ассемблер   Найти похожие ветки 

 
Ozone ©   (2004-03-31 09:38) [0]

Подскажите функцию получения exp от комплексного числа на ассемблере.
Спасибо.


 
Digitman ©   (2004-03-31 09:47) [1]

она у тебя перед носом, в модуле System.pas

procedure       _EXP;
asm
       {       e**x = 2**(x*log2(e))   }

       FLDL2E              { y := x*log2e;      }
       FMUL
       FLD     ST(0)       { i := round(y);     }
       FRNDINT
       FSUB    ST(1), ST   { f := y - i;        }
       FXCH    ST(1)       { z := 2**f          }
       F2XM1
       FLD1
       FADD
       FSCALE              { result := z * 2**i }
       FSTP    ST(1)
end;


 
Ozone ©   (2004-03-31 10:01) [2]

Я не понял как ее вызывать.
(и будет ли она работоать правильно с компплексными числами?)


 
Digitman ©   (2004-03-31 10:18) [3]

пример из JEDI:

type
 TComplex = record
   Re: Double;
   Im: Double;
 end;

var
 x: Double;
 Z: TComplex;
...
 x := Exp(Z.Re);


 
Ozone ©   (2004-03-31 10:25) [4]

Я просто не очень знаком с синтаксисом ассемблеровских процедур - просто хочу уточнить.

Получается, что описаваем как "_EXP()", а вызываем как "EXP()"


 
Ozone ©   (2004-03-31 10:25) [5]

?


 
Digitman ©   (2004-03-31 10:42) [6]

тебе вообще зачем это ? для учеб.целей ?
если нет, то Делфи УЖЕ предоставляет ГОТОВЫЙ механизм для вычисления ф-ции .. все что тебе нужно для этого - написать в своей программе код, приведенный в [3]


 
Digitman ©   (2004-03-31 10:49) [7]

{ ExpZ returns e raised to Z:  e^(x + yi) }

function ExpZ(Z: TComplex): TComplex;
var
 x: Double;
begin
 x := Exp(Z.Re);
 Result := ToComplex(x * Cos(Z.Im), x * Sin(Z.Im));
end;


 
Digitman ©   (2004-03-31 10:51) [8]

{ ToComplex Convert R and I to complex }

function ToComplex(R, I: Double): TComplex;
begin
 Result.Re := R;
 Result.Im := I;
end;


 
Ozone ©   (2004-03-31 10:53) [9]

Нет, вообще задача как можно больше ускорить один алгоритм (а именно - БПФ).
Дак все-таки, так оно и есть?
(т.е. описаваем как _exp, а вызываем как exp)?


 
Digitman ©   (2004-03-31 11:07) [10]


> задача как можно больше ускорить один алгоритм


ощутимого ускорения можно добиться лишь используя MMX/SSE-инструкции ЦП

здесь же, в теле _EXP, как видишь, ими и не пахнет, ф-ция попросту не "заточена" под БПФ, но что касается вычисления экспоненты как таковой, то делает она это вполне эффективно


 
Ozone ©   (2004-03-31 11:09) [11]

Поняяятно.... спасибо за информацию.


 
Digitman ©   (2004-03-31 11:12) [12]


> описаваем как _exp


не надо ничего "описавать", компилятору уже известен идентификатор ф-ции Exp()

в рез-те вызова тобой ф-ции Exp() компилятор сгенерирует след. код :
- на вершину FPU-стека будет положен аргумент ф-ции
- будет вызвана процедура System._EXP
- результат работы процедуры System._EXP снимается с вершины FPU-стека и помещается в переменную-результат


 
Ozone ©   (2004-03-31 11:15) [13]

Ааааа, вон оно что! Не знал - спасибо.


 
Digitman ©   (2004-03-31 11:16) [14]

FLD     [Аргумент]
      FLDL2E              
      FMUL
      FLD     ST(0)
      FRNDINT
      FSUB    ST(1), ST
      FXCH    ST(1)    
      F2XM1
      FLD1
      FADD
      FSCALE            
      FSTP    ST(1)
      FSTP    [Результат]
      WAIT


 
Digitman ©   (2004-03-31 11:24) [15]

реально можно ускорить производительность БПФ-алгоритма, если не использовать FPU вообще (т.е. не использовать FP-представление данных и FP-операции над ними соответственно)

в этом случае следует заранее составить таблицы синусов/косинусов, содержащие целочисленные значения, и использовать искл-но операции целочисленного умножения/деления

в этом случае алгоритм будет в ряде случаев сравним по производительности с алгоритмом, использующим FP-операции и MMX/SSE-интструкции


 
Digitman ©   (2004-03-31 11:29) [16]

а еще лучше будет не "изобретать велосипед", а задействовать существующие библиотеки, специально "заточеные" под FFT

например, библиотеку, вкодящую в состав пакета IntelSPL (Signal Processing Library) или его более соврем.реализацию - IntelMKL (Math Kernel Library)

согласись, уж кому как не Intel"у лучше знать, как максимально эффективно задействовать MMX/SSE-возможности своих же процессоров для выполнения такого рода задач


 
Ozone ©   (2004-03-31 11:37) [17]

>>в этом случае следует заранее составить таблицы >>синусов/косинусов, содержащие целочисленные значения, и >>использовать искл-но операции целочисленного умножения/деления

Это ж какая таблица получится!

>>например, библиотеку, вкодящую в состав пакета IntelSPL (Signal
>>Processing Library) или его более соврем.реализацию - IntelMKL
>>(Math Kernel Library)

Хорошо, если я пишу на Си, то как мне ее подключить к проекту?


 
Digitman ©   (2004-03-31 11:45) [18]


> Это ж какая таблица получится!


а как ты хотел иначе ?
обычный "закон сохранения" : если в одном месте убыло, значит, где-то в другом месте прибыло

теряешь в размере - выигрываешь в производительности ... и наоборот ..


> если я пишу на Си, то как мне ее подключить к проекту?


точно так же как ты подключаешь к проекту любую иную библиотеку

описание библиотеки и логики ее использования в пакете, например, IntelSPL имеется .. есть и демо-проекты как на С так и на Паскале


 
Ozone ©   (2004-03-31 11:49) [19]

>>описание библиотеки и логики ее использования в пакете,
>>например, IntelSPL имеется .. есть и демо-проекты как на С так
>>и на Паскале

У Вас есть таковые? (ни в инете, ни у себя ничего не нашел)


 
Digitman ©   (2004-03-31 11:58) [20]

да, у меня есть ... IntelSPL v4.2 .. 17,1 мб .. качал когда-то с сайта Интела .. сейчас, говорят, недоступна она для скачивания оттуда ... но наверняка есть на других ресурсах сети ... ищи и обрящешь !



Страницы: 1 вся ветка

Текущий архив: 2004.04.25;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.075 c
3-1080563703
Bless
2004-03-29 16:35
2004.04.25
Как прервать асинхронное выпосление запроса, который возвращает д


11-1065294540
Wiz@rd
2003-10-04 23:09
2004.04.25
KolWebBrowser


14-1080806816
Rule
2004-04-01 12:06
2004.04.25
Помогите установить dcu шки


1-1081151226
Ozone
2004-04-05 11:47
2004.04.25
Handle - > bmp


14-1081146561
Rouse_
2004-04-05 10:29
2004.04.25
Глюк со звуковухой