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

Вниз

Быстрые функции   Найти похожие ветки 

 
cyborg ©   (2004-07-24 19:44) [0]

Пишите сюда разные функции вычислений, будем оптимизировать и смотреть скорости.


 
cyborg ©   (2004-07-24 19:45) [1]

[644] NailMan ©   (24.07.04 15:18)

Ха! интересные результаты получились на моем варианте тестилки:

алгоритмы поиска столкновения сфера-сфера(3D) на синглах:

алгоритм(полностью процедуру я привел выше):

sQ:=Sqr(v2.x-v1.x) + Sqr(v2.y-v1.y) + Sqr(v2.z-v1.z);
If sq<=((r1+r2)*(r1+r2)) then result:=true;

выдал результат на 1млн итераций: 55 нс/итерация

алгоритм:

sQ:=(v2.x-v1.x)*(v2.x-v1.x) + (v2.y-v1.y)*(v2.y-v1.y) + (v2.z-v1.z)*(v2.z-v1.z);
If sq<=((r1+r2)*(r1+r2)) then result:=true;

выдал результат на 1млн итераций: 27.2 нс/итерация

Проц AXP3000+(2100MHz), мозг 512 DDR400.

Результат без использования SQR быстрей в 2 раза чем с этой функцией.

А если модифицировать так:
If (v2.x-v1.x)*(v2.x-v1.x) + (v2.y-v1.y)*(v2.y-v1.y) + (v2.z-v1.z)*(v2.z-v1.z)<=((r1+r2)*(r1+r2)) then result:=true else result:=false;

то получается: 24.4 нс/итерация

Вот она где сила....

---
WBR, NailMan aka 2:5020/3337.13

--------------------------------------------------------------------------------
[646] cyborg ©   (24.07.04 19:05)
Попробуй ещё:

Result:=(v2.x-v1.x)*(v2.x-v1.x) + (v2.y-v1.y)*(v2.y-v1.y) + (v2.z-v1.z)*(v2.z-v1.z)<=((r1+r2)*(r1+r2));

Ещё одной проверкой меньше.


 
cyborg ©   (2004-07-24 19:48) [2]

Для измерения скоростей используйте функцию:

function GetCPUTick: int64; assembler;
asm
 rdtsc
end;


или (для Delphi5 или меньше, котрые не понимают):


function GetCPUTick: int64; assembler;
asm
 db 0fh,31h;
end;


Функция возвращает такты процессора.


 
NailMan ©   (2004-07-24 21:09) [3]

RDTSC выдает такты процессора - их нескольконеудобно использовать(необходимо высчитать частоту процессора как разрешение). Лучше QueryPerfomanceCounter.

Я вот так делал в своем тесте:

Procedure TForm1.TestMUL;
var HPRes:Int64;
    LastHPC:Int64;
    HPC:int64;
    i:integer;
    v1,v2:td3dvector;
    r1,r2:single;
    HPS:Int64;
    timeiter:extended;
begin
QueryPerformanceCounter(LastHPC);
Sleep(1000);
QueryPerformanceCounter(HPRes);
HPRes:=HPRes - LastHPC;

v1:=d3dxvector3(0,0,0); r1:=1;
v2:=d3dxvector3(1,1,1); r2:=1.1;

QueryPerformanceCounter(LastHPC);
For i:=0 to 1000000 do CheckCollisionMUL(v1,r1,v2,r2);
QueryPerformanceCounter(HPC);

hps:=hpc-lasthpc;
timeiter:= hps / 1000000;

Label2.Caption:=floattostrf(timeiter / HPRes * 1e9,fffixed,15,1)+" нс/итерация";
end;


---
WBR, NailMan aka 2:5020/3337.13


 
Anatoly Podgoretsky ©   (2004-07-24 21:21) [4]

NailMan ©   (24.07.04 21:09) [3]
Зачем вычислять, используй в прямом виде, и результаты можно сравнивать, результаты для одного типа процесстовов, но с частотой 2 и 2.8 будут совпадать.


 
wiz ©   (2004-07-24 21:25) [5]

2 Nailman:
единственная заметка к твоему бенчмарку - если у тебя компилер оптимизирует код, то он может много чего пропускать, т.к. по тексту результат CheckCollisionMUL дальше нигде не используется... (а если ты отключишь оптимизацию, то числа будут сильно заниженные)


 
cyborg ©   (2004-07-24 22:27) [6]


> [3] NailMan ©   (24.07.04 21:09)

Прогоняешь миллион функций несколько раз (10 хватит наверное) замеряя такты, минимальное полученное число - есть скорость.


 
OSokin   (2004-07-25 16:58) [7]

Многие об одной функции забывают...
inc(число, сколько прибавить) и dec(число, сколько убавить)


 
Zak3D[@Tm] ©   (2004-07-25 17:06) [8]

OSokin
Не уверен, что inc и dec работают быстрее...


 
OSokin   (2004-07-25 17:47) [9]

Почитай справку...


 
miek ©   (2004-07-25 18:49) [10]

Главное - не забывать, что когда INC-рементируешь типизированный указатель, он реально увеличивается на X*(размер типа)...



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

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

Наверх




Память: 0.49 MB
Время: 0.032 c
3-1098806092
GigoVich
2004-10-26 19:54
2004.11.21
TDBGrid + TQuery + FireBird (embeded)


1-1099423039
dolphin
2004-11-02 22:17
2004.11.21
Собития в динамически создаваемых формах


14-1098512111
kaif
2004-10-23 10:15
2004.11.21
Мне надоела ложь против демократии и рынка!


10-1053603853
Aleksandr
2003-05-22 15:44
2004.11.21
Как избежать подвисания клиента при попытке сконнектиться?


6-1095235552
SashkoSoft
2004-09-15 12:05
2004.11.21
Передача данных php-скрипту