-
> [39] AssemblerWorld.Narod.Ru (26.02.09 03:50)
Не будет.
1) Надо понимать, что современные компилятор проводят очень охренительную оптимизацию, не факт что человек в разумные сроки сможет сделать также.
2) Производсительность если и будет выше, то на копеечку. А скорость разработки упадет в разы.
Единственное что, имеет смысл операции с векторами переписать на MMX или SSE. Или пользоваться компилерами, которые сами это умеют.
-
Delphi, к сожалению, не относится к охренительно оптимизирующим компиляторам. Хотя, заглядывая периодически в CPU window, можно "подтюнить" паскалевский код почти до уровня asm. И лично я предпочитаю именно такой "тюнинг", используя asm только если компилятор совсем уж тупит и никак не получается его вразумить. Всё-таки паскалевский код гораздо лучше читается и легче модифицируется (пусть даже с нарушением "тюнинга", но всё же это лучше, чем сидеть и мучительно пытаться понять написанный пару лет назад столбик трёхбуквенных матов).
-
> [41] Sapersky (26.02.09 16:12)
В принципе когда говорил об оптимизации, имел ввиду скорее С++ компиляторы, чем дельфи. Хотя и дельфи очень даже не плох.
-
Я сделал по таблице, но особого прироста скорости нету (программирую в 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-го знака после запятой?
-
> Считает в два раза быстрее таблиц, но точность сильно хромает...
> Да и как-то не пойму для какого промежутка fAngle синус
> от него считается правильно...
Вообще гнаться за скоростью работы синуса сейчас смысла особо нету...
> Кто-нибудь может объяснить как этот код вообще работает
> и на каком он языке?
> Ну и улучшить его точность хотя бы до 5-го знака после запятой?
Язык - ассемблер. Как работает - х.з., видимо использует какую-то приближенную форумулу вычисления.
Улучшить врядли получится.
-
> Я сделал по таблице, но особого прироста скорости нету (программирую в > Delphi 7)...(
Не может быть.
Если нужно вычислить срузу и COS и SIN, то процедура Math.SinCos, сделает это в 2 раза быстрее, чем их вычисление по одиночке.
-
> 1) Надо понимать, что современные компилятор проводят очень
> охренительную оптимизацию, не факт что человек в разумные
> сроки сможет сделать также.2) Производсительность если и
> будет выше, то на копеечку. А скорость разработки упадет
> в разы.
1) А ты сам проверял? Вся эта охренительная оптимизация ломается как только идут вместо констант вычисление чего либо. На циклах компилятор уже плохует. Где-то получше где-то похуже. Человек запросто обгоняет компилятор. И это я говорю о компиляторе от МС. При этом Delphi отстает не намного.
2) Прирост скорости от 2 раз до 50раз (к примеру БПФ от интел в 30раз быстрее прямой реализации). А вот скорость разработки упадет.
> Не может быть.
Может скорость вычисления синуса на современных процессорах составляет менее 120 тактов. Наиболее быстрым вариантам считается вычисление синуса на месте используя приблеженные формулы. У интел есть математическая библиотека в ней можно глянуть различные варианты.
-
> 1) А ты сам проверял? Вся эта охренительная оптимизация
> ломается как только идут вместо констант вычисление чего
> либо. На циклах компилятор уже плохует. Где-то получше где-
> то похуже. Человек запросто обгоняет компилятор. И это я
> говорю о компиляторе от МС. При этом Delphi отстает не намного.
Я сам читал кучу тестов.
Плюс насколько я вижу, ни одна здравомыслящая компания не делает игры на ассемблере.
Да и вообще только полный идиот(ИМХО), будет писать всю игру на ассемблере. АСМ вставки в критичных местах - это максимум.
-
-
> [48] DomiNickDark (28.02.09 17:25)
Это For Fun Only.
-
Удалено модератором
-
> Не может быть.
Может...((
У меня жуткая формула... А нужно пересчитать её для каждого пикселя изображения...(
На весь мой экран получаются миллионы вычислений синуса...((
Может как-то сделать полноэкранный режим лучше будет?
При размере "канваса" 800х600 скорость ещё сносная выходит...
-
Удалено модератором
-
Э... И что в этой анкете искать?..
-
> У меня жуткая формула... А нужно пересчитать её для каждого
> пикселя изображения...(
> На весь мой экран получаются миллионы вычислений синуса.
> ..((
Для экрана? Для каждого пиксела? И вся эта информация визуально значительна? А логи на 100 метров, мы в туалете на релаксацию читаем?
-
> У меня жуткая формула... А нужно пересчитать её для каждого
> пикселя изображения...(На весь мой экран получаются миллионы
> вычислений синуса...((
А зачем там что синусы меняются? Если меняются то неплохобы знать закономерность.
А если не меняются то их вычислить заранее вне цикла.
-
2 Вася
> У меня жуткая формула...
Что-то не упомянул, каким способом выводишь график.
И вообще, что ты делаешь?
-
Кто-нибудь может объяснить как этот код вообще работает
Скорее всего разложение в ряды Тейлора.
У меня жуткая формула... А нужно пересчитать её для каждого пикселя изображения...(
На весь мой экран получаются миллионы вычислений синуса...((
См. [27]. Тоже синусы-косинусы через таблицы, и ничего не тормозит.
-
>>> Для экрана? Для каждого пиксела? И вся эта информация визуально значительна? А логи на 100 метров, мы в туалете на релаксацию читаем?
Что-то не понял, что вы имели ввиду...
>>> А зачем там что синусы меняются? Если меняются то неплохо бы знать закономерность
В том-то и дело, что меняются... Причём некоторые коэффициенты рэндомом... :(
>>> Тоже синусы-косинусы через таблицы, и ничего не тормозит
Для 800х600 не тормозит... А на весь экран - тормозит... :(
>>> Что-то не упомянул, каким способом выводишь график. И вообще, что ты делаешь?
Почему "график"? Для графика не нужно было бы все пиксели перебирать...
Я свой СкринСейвер делаю... :)
Правда нормального примера исходника СкринСейвера на Делфи7 так и не нашел...
Самих примеров-то множество (хотя б на "ДелфиВорлд"), но каждый как-то по своему глючит... :(
-
у меня 1680х1050 фуллскрин несколько обработок всех пикселей всего экрана(и там далеко не только вычисление синуса) не тормозит...
а почему? А потому что пиксели экрана эта та штука, которую надо считать на видухе, а не на ЦПУ.