Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2004.11.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.03 c
6-1094724592
bsa
2004-09-09 14:09
2004.11.21
Как закачать страничку, только текст (без картинок!)


1-1099987537
TUser
2004-11-09 11:05
2004.11.21
dcu -> exe


3-1098083158
Maxim_____
2004-10-18 11:05
2004.11.21
CASE средство с возможностью экспорта-импорта DDL


1-1099843076
InfMag
2004-11-07 18:57
2004.11.21
Запор с INI файлами


1-1099640079
denis24
2004-11-05 10:34
2004.11.21
dbgrid....title





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский