Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.19;
Скачать: CL | DM;

Вниз

Как использовать MMX SSE . . .   Найти похожие ветки 

 
Hek   (2003-06-04 23:46) [0]

У меня есть процедура смешивания двух текстур.
Надобы ее заоптимизировать. Есть ли какие опции компилятора или утилки какие что-бы Delphi мне под MMX ее заоптимизировала.
Вот кусок
for j:=jmin to jmax do begin
y:=Round( (j-jk)*lj_ );
for i:=imin to imax do
begin
x:=Round( (i-ik)*li_ );
m:=Map[x,y]*blend;
ofs:=i + j shl k;
r:=Data[ofs].R + m*Color.r shr 16;
g:=Data[ofs].G + m*Color.g shr 16;
b:=Data[ofs].B + m*Color.b shr 16;
if r>255 then r:=255;
if g>255 then g:=255;
if b>255 then b:=255;
Data[ofs].R:=r;
Data[ofs].G:=g;
Data[ofs].B:=b;
end;
end;

По идеи тут три операции можно за один такт сделать.


 
Vulko ©   (2003-06-05 06:44) [1]


> Delphi мне под MMX ее заоптимизировала

Именно под ММХ? :)
Вообще-то не понимаю при чем тут MMX SSE?
Это же набор инструкций процессора. Тогда тебе надо в Дельфи делать асм вставки.

И зачем теб вот это ofs:=i + j shl k;?


 
Hek   (2003-06-05 13:10) [2]

Data - двумерный массив [0..x-1,0..y-1] где x, y всегда числа равные степени двойки. Значит смещение в массиве вычисляется как i+j*x. А умножение на степень двойки можно заменить побитовым сдвигом. Тогда k=log2(x); i + j shl k

А на счет оптимизации под MMX то для C есть копилятор IntelC там ключ при компиляции указываешь и копилятор использует MMX/SSE инструкции. А MMX как раз дает выйгрыш при обработки больших однотипных данных. Тут по идее можно сразу для RGB считать за инструкцию


 
VMcL ©   (2003-06-05 14:43) [3]

>Hek (05.06.03 13:10)

В Delphi таких опций компилятора (пока) нет. Нужно писать самому на asm или юзать какие-либо библиотеки (*.pas, *.obj, *.dll).



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

Текущий архив: 2003.06.19;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.015 c
8-60281
Карелин Артем
2003-03-07 06:39
2003.06.19
Чем показать картинки в 100 мегов?


14-60373
AlexRush
2003-06-02 17:38
2003.06.19
Code To HTML / DOC


1-60108
Alek Aaz
2003-06-06 09:15
2003.06.19
Прерывание цикла


3-60085
denary
2003-05-29 01:38
2003.06.19
Как сделать частичную замену в строке?


1-60162
killer
2003-06-04 21:25
2003.06.19
Окна программы