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

Вниз

Заточка игрушек   Найти похожие ветки 

 
NailMan   (2002-07-21 03:00) [0]

Господа игроделы и Мастаки!

Стал тут у меня один актуальный момент беспокоить:
Стандартные математические функции в Дельфе не слишком-то и быстрые, и не помешало бы их искоренить в игре, заменив на оптимизированные под специальные фичи процессоров.

Игрушку я пишу под свою машину, поэтому я собираюсь использовать переписанную с 3DNowSDK библиотеку функций. Но встает вопрос: если я буду писать игру только используя функии 3DNow!, интеловские процы придется исключить из списков поддерживаемых процов. Это если использовать функции в виде Unit. А если сделать в виде DLL, то можно использовать и SSE и "софтверную" математику. Но будут ли тогда быстрее функции вызываемые из DLL, чем внутренние в Unit?

И такой вопрос как тогда мне загружать DLL(если такой вариант использовать) статически или динамически если функции под тот и другой проц будут иметь одинаковые имена?
Например, в самой программе будет вызываться функция _FDIV(var Res:Single;Op:Single), которая в свою очередь будет в обоих версиях DLL под тем же именем, но разного соржания. Как тогда динамически грузить DLL, определив нужный вариант, ведь для динамичекого подгруза для каждой функции придется делать свой Handler?
Нет ли такого метода статической загрузки DLL но чтобы они могли выбираться иходя из значения како-либо переменной?

Во такая дилема.


 
MrBeer   (2002-07-21 07:29) [1]

Tut estj esho problema... daleko ne vse funkcii okupaetsja vizivatj iz DLL t.k. eto za soboi vlechet dostatochno bolshoi overhead. Ya skompilil etot 3D Now! SDK kak DLL i staticheski prilinkoval (compile time). Na rezultati mozhesh vzglyanutj tut:

http://www.velns.org/valts/3DNow.html

Kak vidno Sqrt() dazhe proigral tomu kotorii v Delphi sidit. A kogda ti prikrutish esho dopolnitelnie operedelenia tipa chto polzovatj SSE ili 3D Now! eto tolko dobavit tormozov.

Vozmozhno poprobovatj postroitj aplikaciju kotoraja pri zapuske sama sebe v pamyati podpatchit takim obrazom chto budut vibiratsja sootv. funkcii. I konechno linkovatj nado staticheski...

best regards.


 
NailMan   (2002-07-21 08:09) [2]

А если их прямо в ядро внести чтобы только 3DNow! поддержка была?
То есть сделать как обычный Unit.
Скорость по идеи должна быть поболее?


 
vbnzz   (2002-07-21 08:46) [3]

не думаю что намного более, если тебе ТАК медленны стандартные ф-ии сопроцессора.


 
cyborg   (2002-07-21 09:16) [4]

Есть очень простой способ, как же люди иногда бывают испорченными Дельфями и виндоузами с их передовыми технологиями dll.
Объявить переменную функцию или процедуру, при тестировании процессора назначать этим функциям и процедурам адреса соответствующих функций и процедур использующих команды разных процессоров.И почему люди пытаются сделать всё через жопу!?


 
Sergey Dotsenko   (2002-07-21 11:12) [5]

Самые меделенные участки кода - это вывод графики, расчет положения в пространстве, коллижин и подобное. И необходимость в оптимизации зависит только от выбора применяемых технологий на базе которых и строишь движок игры. Так при применении OpenGl - отпадает необходимость перещета координат всех обьектов в пространстве если ты вращаешь камеру, все это делает акселератор, также когда делаешь анимацию или движение обьектов, тоже достаточно просто установить систему координат в нужную точку и повернуть ее в соответствующий угол, а замем вывести в нее обьект без всяких вычислений. Тоже можно делать и с 2Д графикой - загоняешь спрайты в видеопамять, а затем уже на аппаратном уровне все это выводиться на экран...
Вопрос об оптимизации возникает только если начианешь производить часть функций основным процессором, но как правило это возникает или из-за недостатка информации по возможностям аппаратной поддержки или из-за недостаточной производительности аппаратной части... Видел я проекты на Делфи которые просто летают без всяких оптимизаций встроенных функций - изучайте и используйте то, что уже сделано, там парни все продумали за нас и уже оптимизировали :)
P.S. DLL и Оптимизация, вещи не совместимые, проверено :)
P.S.S Сегодня мы определим тип процессора и сделаем класно оптимизированную функцию, а завтра производители выпустят версию проца которая не только не будет поддерживать старые версии, но при этом и зависнет на нашем коде...


 
Mirovodin   (2002-07-22 15:52) [6]

2 Sergey Dotsenko

"... P.S. DLL и Оптимизация, вещи не совместимые, проверено :)" не понятно только кем ??? Если тобой, тогда понятно.
А ты не смотрел кодек WinAMP, - это статически загружаемая dll c оптимизацией под mmx, sse, 2d now. Потом если смотреть обычный Q2 там находятся такие интересные файлы как "*opengl.dll", "*3dfx*.dll" и "*soft.dll" думая смысл этих названий понятен.
По поводу PPS проще будет заменить 1 dll ку чем весь проект перелопачивать.

2 NailMan ©
Если использовать ститически загружаемые dll то на скрость работы их функций это вообще ни как не повлияет. Простой пример - наша любимая библиотека DirectX - я что то не видел, чтобы очень сильно тормозила функция BLTFAST или другой пример библиотека GLide. Так что используй их на здоровье.



 
Sergey Dotsenko   (2002-07-22 17:07) [7]

2 Mirovodin
Зря ты так наезжаешь - хочешь сказать что ты проверял? :) Очень сомневаюсь, то что другие используют DLL еще не говорит о том что их проекты самые скоростные, есть разниуа в том чтобы вынести модуль в DLL или функцию в DLL. Вопрос ставился как оптимизировать, а не как сделать универсальнее это разные вещи и иногда приходиться жертвовать одним ради другого...


 
Mirovodin   (2002-07-22 21:52) [8]

2 Sergey Dotsenko. Извини если задел, конечно твой подход мне понятен. Ни кто не будет спорить, что выновить функцию a+b в dll это глупо. Понятно, что единого способа не существует, но вообще то dll достаточно универсальная штука... Кстати по поводу оптимизации - уже вторя статья в "Программисте" по поводу кэша L1, L2 конкретными примерами и обзором возможностей P3-P4-Atlon, советую всем прочитать .


 
Dmk   (2002-07-22 23:24) [9]

Согласен с cyborg © (21.07.02 09:16)
Например в Intel IPL(Image Process Library) сделано несколько DLL"ок с одинаковыми функциями, но каждая DLL"ка под "свой" процессор.


 
NailMan   (2002-07-23 01:32) [10]

Спасибо за ответы, учту при конечной оптимизации игрухи.


2 Sergey Dotsenko >
правило это возникает или из-за недостатка информации по возможностям аппаратной поддержки или из-за недостаточной производительности аппаратной части... >
А где достать подобное описание возможностей апп. пожжержки на русском языке? А то везде не информация, а рекламная лажа.

Вообще-то я пишу игру под свой AMD K6-2-500/TNT2, а у друзей повсеместно Атлоны, Дюроны, так что с этими процами проблем не будет.
Но вот еще такой вопрос: у Intel`a есть SSE и SSE2 чем они принципиально отличаются от AMD 3DNow? Ведь во всех тестилках пишется что просто SSE - это integer SSE, а SSE2 это Float SSE?

И еще такой пример:
Ставлю на машину Athlon XP-1800+, свою TNT2(тоесть без HW T&L) и запускаю 3DMark2000. Сначала на 3DNow, потом на Enhanced 3DNow,и наконец SSE. Три разных результата: 8800,7909 и 8910 соответственно. Почему enh. 3DNow медленнее родного?


ЗЫ: Вобщем я напищу 2 версии ядра с внутренними функциями(Только для 3DNow) и внешними(дял всех), а потом посмотрим что выгоднее получится.



 
MrBeer   (2002-07-23 02:44) [11]

v principe ya bi pisal s runtime podmenoi f-n pri startupe (kak cyborg skazal) + provoditj kalibrovku pri zapuske t.k. rezultati dostatochno silno otlichajutsja mezhdu processorami.

naprimer rezultati dlya AMD K6


ArcTan2 3DNow!/Delphi: 3024/4136 36.77 %increase
Sqrt 3DNow!/Delphi: 4447/1392 -68.70 % decrease
Sin 3DNow!/Delphi: 5678/2594 -54.31 % decrease
ASin 3DNow!/Delphi: 5447/4707 -13.59 % decrease
ACos 3DNow!/Delphi: 5448/4927 -9.56 % decrease
ATan 3DNow!/Delphi: 5268/3865 -26.63 % decrease
Log10 3DNow!/Delphi: 5368/4356 -18.85 % decrease
Pow 3DNow!/Delphi: 6700/11406 70.24 % increase


Takzhe estj nebolshaja raznica mezhdu Athlon i AthlonXP.
Tobish optimalno nado bi protestitj pered tem kak polzovatj i vibiratj samii optimalnii variant.

best regards.


 
Mirovodin   (2002-07-23 10:35) [12]

NailMan ©

На счет информации об возможностях новых CPU. Все это есть в справочниках по ASM"у, только нужно покупать самые последние книги, т.к. в старых нет команд P4 и Atlon"а. Я бы порекомендовал книгу издательства Питер, автор по моему Юров. Там все очень хорошо описано, но у меня старая книжка и там есть описание только расширений P3 и 3DNow. Вообще, скорее всего, многие новые инструкции не встроены в Delphi, и по этому придется находить hex коды команд - а в книгах они как раз приводятся.

На счет отличия SSE от 3D Now, если очень кратко то: описание SSE занимает 25-30 страниц, 3DNow 3-5. Т.е. у intel намного больше функций чем у AMD (хотя я не видел 3DNow 2).



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

Форум: "Игры";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.008 c
3-72040
Kaginava
2003-01-05 08:48
2003.01.23
IB6.5


3-72092
sizmrebi
2002-12-27 13:45
2003.01.23
MasterQuery


7-72573
mate
2002-11-11 12:39
2003.01.23
Windows


1-72211
diks
2003-01-14 12:18
2003.01.23
Кнопочки


1-72306
Светик
2003-01-15 13:08
2003.01.23
А как сохранить данные не в СУБД!





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