Главная страница
    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.034 c
1-1099457813
leonidus
2004-11-03 07:56
2004.11.21
Создание своей панели в IE


6-1093911720
Ace Cooper
2004-08-31 04:22
2004.11.21
Передача данных из Делфи в php-скрипт и получение результата.


1-1099480835
Tracer
2004-11-03 14:20
2004.11.21
Как в тело программы запихнуть файлы?


1-1099585624
heady
2004-11-04 19:27
2004.11.21
выбор папки с кнопкой "создать"


6-1094609909
OlegM
2004-09-08 06:18
2004.11.21
Как узнать что в сети уже активен TUDPServer?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский