Конференция "Игры" » Быстрый канвас [Delphi, Windows, ХР]
 
  • @!!ex © (26.02.09 08:03) [40]
    > [39] AssemblerWorld.Narod.Ru   (26.02.09 03:50)

    Не будет.
    1) Надо понимать, что современные компилятор проводят очень охренительную оптимизацию, не факт что человек в разумные сроки сможет сделать также.
    2) Производсительность если и будет выше, то на копеечку. А скорость разработки упадет в разы.

    Единственное что, имеет смысл операции с векторами переписать на MMX или SSE. Или пользоваться компилерами, которые сами это умеют.
  • Sapersky (26.02.09 16:12) [41]
    Delphi, к сожалению, не относится к охренительно оптимизирующим компиляторам. Хотя, заглядывая периодически в CPU window, можно "подтюнить" паскалевский код почти до уровня asm. И лично я предпочитаю именно такой "тюнинг", используя asm только если компилятор совсем уж тупит и никак не получается его вразумить. Всё-таки паскалевский код гораздо лучше читается и легче модифицируется (пусть даже с нарушением "тюнинга", но всё же это лучше, чем сидеть и мучительно пытаться понять написанный пару лет назад столбик трёхбуквенных матов).
  • @!!ex © (27.02.09 13:03) [42]
    > [41] Sapersky   (26.02.09 16:12)

    В принципе когда говорил об оптимизации, имел ввиду скорее С++ компиляторы, чем дельфи. Хотя и дельфи очень даже не плох.
  • Вася (28.02.09 00:29) [43]
    Я сделал по таблице, но особого прироста скорости нету (программирую в Delphi 7)...(

    Нашел ещё вычисление по вот такой функции:
    [CODE]
    Const                                             //глобальные
         sin1: Double=7.61e-03;
         sin2: Double=-1.6605e-01;
         sin3: Double=1;

    function ASin(fAngle:Single):Single;
    asm
    fld fAngle.Single
    fmul fAngle.Single
    fld sin1.Double
    fmul st(0),st(1)
    fld sin2.Double
    faddp st(1),st(0)
    fmulp st(1),st(0)
    fadd sin3.Double
    fmul fAngle
    end;
    [/CODE]

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

    Кто-нибудь может объяснить как этот код вообще работает и на каком он языке?
    Ну и улучшить его точность хотя бы до 5-го знака после запятой?
  • @!!ex © (28.02.09 08:41) [44]
    > Считает в два раза быстрее таблиц, но точность сильно хромает...
    > Да и как-то не пойму для какого промежутка fAngle синус
    > от него считается правильно...

    Вообще гнаться за скоростью работы синуса сейчас смысла особо нету...


    > Кто-нибудь может объяснить как этот код вообще работает
    > и на каком он языке?
    > Ну и улучшить его точность хотя бы до 5-го знака после запятой?

    Язык - ассемблер. Как работает - х.з., видимо использует какую-то приближенную форумулу вычисления.
    Улучшить врядли получится.
  • Б (28.02.09 10:59) [45]
    > Я сделал по таблице, но особого прироста скорости нету (программирую в > Delphi 7)...(

    Не может быть.

    Если нужно вычислить срузу и COS и SIN, то процедура Math.SinCos, сделает это в 2 раза быстрее, чем их вычисление по одиночке.
  • Pavia © (28.02.09 14:32) [46]

    > 1) Надо понимать, что современные компилятор проводят очень
    > охренительную оптимизацию, не факт что человек в разумные
    > сроки сможет сделать также.2) Производсительность если и
    > будет выше, то на копеечку. А скорость разработки упадет
    > в разы.

    1) А ты сам проверял? Вся эта охренительная оптимизация ломается как только идут вместо констант вычисление чего либо. На циклах компилятор уже плохует. Где-то получше где-то похуже. Человек запросто обгоняет компилятор. И это я говорю о компиляторе от МС. При этом Delphi отстает не намного.

    2) Прирост скорости от 2 раз до 50раз (к примеру БПФ от интел в 30раз быстрее прямой реализации). А вот скорость разработки упадет.


    > Не может быть.
    Может скорость вычисления синуса на современных процессорах составляет менее 120 тактов. Наиболее быстрым вариантам считается вычисление синуса на месте используя приблеженные формулы. У интел есть математическая библиотека в ней можно глянуть различные варианты.
  • @!!ex © (28.02.09 14:40) [47]
    > 1) А ты сам проверял? Вся эта охренительная оптимизация
    > ломается как только идут вместо констант вычисление чего
    > либо. На циклах компилятор уже плохует. Где-то получше где-
    > то похуже. Человек запросто обгоняет компилятор. И это я
    > говорю о компиляторе от МС. При этом Delphi отстает не намного.


    Я сам читал кучу тестов.
    Плюс насколько я вижу, ни одна здравомыслящая компания не делает игры на ассемблере.
    Да и вообще только полный идиот(ИМХО), будет писать всю игру на ассемблере. АСМ вставки в критичных местах - это максимум.
  • DomiNickDark (28.02.09 17:25) [48]
    > ни одна здравомыслящая компания не делает игры на ассемблере

    Делает... :))

    Вот пример: http://dominickdark.narod.ru/Farbrausch-Games.Html
  • @!!ex © (28.02.09 17:48) [49]
    > [48] DomiNickDark   (28.02.09 17:25)

    Это For Fun Only.
  • имя (28.02.09 22:34) [50]
    Удалено модератором
  • Вася (01.03.09 02:18) [51]
    >  Не может быть.

    Может...((

    У меня жуткая формула... А нужно пересчитать её для каждого пикселя изображения...(
    На весь мой экран получаются миллионы вычислений синуса...((

    Может как-то сделать полноэкранный режим лучше будет?
    При размере "канваса" 800х600 скорость ещё сносная выходит...
  • имя (01.03.09 02:20) [52]
    Удалено модератором
  • Вася (01.03.09 02:24) [53]
    Э... И что в этой анкете искать?..
  • Дуб © (01.03.09 05:11) [54]

    > У меня жуткая формула... А нужно пересчитать её для каждого
    > пикселя изображения...(
    > На весь мой экран получаются миллионы вычислений синуса.
    > ..((

    Для экрана? Для каждого пиксела? И вся эта информация визуально значительна? А логи на 100 метров, мы в туалете на релаксацию читаем?
  • Pavia © (01.03.09 09:34) [55]

    > У меня жуткая формула... А нужно пересчитать её для каждого
    > пикселя изображения...(На весь мой экран получаются миллионы
    > вычислений синуса...((

    А зачем там что синусы меняются? Если меняются то неплохобы знать закономерность.
    А если не меняются то их вычислить заранее вне цикла.
  • Б (01.03.09 10:19) [56]
    2 Вася
    > У меня жуткая формула...

    Что-то не упомянул, каким способом выводишь график.
    И вообще, что ты делаешь?
  • Sapersky (01.03.09 19:00) [57]
    Кто-нибудь может объяснить как этот код вообще работает

    Скорее всего разложение в ряды Тейлора.

    У меня жуткая формула... А нужно пересчитать её для каждого пикселя изображения...(
    На весь мой экран получаются миллионы вычислений синуса...((


    См. [27]. Тоже синусы-косинусы через таблицы, и ничего не тормозит.
  • Вася (01.03.09 23:44) [58]
    >>> Для экрана? Для каждого пиксела? И вся эта информация визуально значительна? А логи на 100 метров, мы в туалете на релаксацию читаем?

    Что-то не понял, что вы имели ввиду...

    >>> А зачем там что синусы меняются? Если меняются то неплохо бы знать закономерность

    В том-то и дело, что меняются... Причём некоторые коэффициенты рэндомом... :(

    >>> Тоже синусы-косинусы через таблицы, и ничего не тормозит

    Для 800х600 не тормозит... А на весь экран - тормозит... :(

    >>> Что-то не упомянул, каким способом выводишь график. И вообще, что ты делаешь?

    Почему "график"? Для графика не нужно было бы все пиксели перебирать...

    Я свой СкринСейвер делаю... :)

    Правда нормального примера исходника СкринСейвера на Делфи7 так и не нашел...
    Самих примеров-то множество (хотя б на "ДелфиВорлд"), но каждый как-то по своему глючит... :(
  • @!!ex © (02.03.09 00:00) [59]
    у меня 1680х1050 фуллскрин несколько обработок всех пикселей всего экрана(и там далеко не только вычисление синуса) не тормозит...
    а почему? А потому что пиксели экрана эта та штука, которую надо считать на видухе, а не на ЦПУ.
 
Конференция "Игры" » Быстрый канвас [Delphi, Windows, ХР]
Есть новые Нет новых   [118463   +19][b:0.001][p:0.001]