Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите периписать маааленький кусочек на асме.


Страницы:   1 2

AlexT1000 ©   (2003-02-05 15:25:00) 

Ребята очень надо для увеличения скорости перекраски скорости .
Сам я асм уже позабыл, к сожалению

procedure TColorBalanceAction.DoRow(P: PClr32Array; W: integer);
Var i : integer ;
begin
for i :=0 to W -1 do with P[i] do begin
red := RL[red];
green := GL[green];
blue := BL[blue];
end;
end;

PClr32Array = ^TClr32Array;
TClr32Array = array [0..0] of TColor32Rec;
TColor32Rec = packed record
Blue : byte;
Green : byte;
Red : byte;
Alpha : byte;
end;

RL,GL,BL : array [Byte] of Byte;


AlexT1000   (2003-02-06 18:46:00) [1]

спасибо за советы. все это я конечно делать не буду.

Кардинальное решение сменить процессор. - это коммерческий продукт. так что ни о какой смене процессора не может идти речи.

Спасибо за помощь. ветка закрыта.


Sha   (2003-02-06 18:32:00) [2]

Не рисуй прогресс, или рисуй с большим интервалом, или расуй его сам.

Малый прирост ОБЩЕЙ производительности может означать, что еще где-нибудь есть тормоза. Надо оптимизировать ВСЕ емкие по времени процедуры, а не только эту.

Если же именно на ней свет сошелся клином, то этот код можно оптимизировать под конкретный процессор, чтобы упростить дешифрование команд и все максимально ускорить даже на самых простеньких процах.
1. Выравниваем массивы на 256.
2. Вместо операций типа xor ebx,ebx пишем lea ebx,[clGL], а вместо mov bl,[ebx+clGL] пишем mov bl,[ebx]
3. Впридачу можно цикл развернуть, если очень надо.
4. Можно вместо вызова процедуры сделать asm-вставки, если совсем прижало.

Кардинальное решение сменить процессор.


AlexT1000   (2003-02-06 18:27:00) [3]

игра не стоила свеч. как и говорил MBo
скорость большинства операций получилась в принципе такая-же как и у фотошопа

сильно тормозит дело перерисовка прогресса в статусбаре.
даже если его рисовать через 10 процентов

и еще ты ,как я понял , тоже обрабатываешь битмапы.
у меня сильно хромает перекраска HSL вместе три параметра (как и у фотошопы) не знаешь как это ускорить . там алгоритм страшнючия я его из GIMP выдрал .
как фотошоповцам удается так быстро HSL пересчитывать?!


Sha   (2003-02-06 18:18:00) [4]

Процессор какой?


AlexT1000   (2003-02-06 18:14:00) [5]

Да судя по всему прирост в скорости минимален.
5 в лучшем случае 10 процентов.


Sha   (2003-02-06 18:04:00) [6]

У меня даже на P4 на больших битмапах иногда почему-то конвейер простаивает.


Sha   (2003-02-06 18:01:00) [7]

2 AlexT1000 (06.02.03 17:55)
Прирост сильно зависит от типа процессора.
На Р4 - в несколько раз, на AMD-K6 может не быть никакого.


AlexT1000   (2003-02-06 17:55:00) [8]

таки - была методом
вынес - заработала .
но что удивительно по-моему в пророста нет даже минимального .
во всяком случае визуально даже вроде медленней стало.
я конечно сейчас попробую по времени проверить на здаровенном битмапе каком -либо


Sha   (2003-02-06 17:50:00) [9]

Да, надеюсь, у тебя сейчас DoRowAsm не метод класса?
Это должна быть (пока) обычная процедура.


Sha   (2003-02-06 17:41:00) [10]

Модифицируем. Пусть сначала задышет.


Sha   (2003-02-06 17:40:00) [11]

не передавай W=0 и все будет нормально.
еще имеется фича :) первый параметр не указатель на массив, а адрес первого элемента. Поэтому вызов такой
DoRowAsm(@a[0], 1024);


AlexT1000   (2003-02-06 17:38:00) [12]

и еще . как этот код модифицировать чтобы массивы все-аки оставались переменными класса?


AlexT1000   (2003-02-06 17:31:00) [13]

вынес. через эти строчки проехало. но только гдето в цикле снова
Accsess violation

вроде на mov cl,[eax]
т.e наверное выход за границы массива P


Sha   (2003-02-06 17:24:00) [14]

я имею ввиду из класса, а не из привата.


Sha   (2003-02-06 17:22:00) [15]

2 AlexT1000 (06.02.03 17:13)
вынеси их оттуда.


MBo   (2003-02-06 17:16:00) [16]

>это может влиять?!
Да.


AlexT1000   (2003-02-06 17:13:00) [17]

у меня
clRL,clGL,clBL

приватные переменные класса.
это может влиять?! я не думаю, конечно, но мало ли


AlexT1000   (2003-02-06 17:09:00) [18]

У меня D5 .
mov cl,byte ptr [ecx+clBL]

пробовал уже. Accsess violation происходит.

В третьей строке снизу опечатка, надо mov [eax-2],cl
учту. спасибо


Sha   (2003-02-06 15:41:00) [19]

У меня на D6 работает.
Попробуй mov cl,byte ptr [ecx+clBL]
В третьей строке снизу опечатка, надо mov [eax-2],cl


AlexT1000   (2003-02-06 13:42:00) [20]


у меня выдает ошибку на этой строке

mov cl,[ecx+clBL]

operand size mismatch


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо