Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2010, 18:33   #1
ANsy
Пользователь
 
Аватар для ANsy
 
Регистрация: 30.09.2010
Сообщений: 19
Вопрос оптимизация SSE

выполнил оптимизацию под SSE (размытие строки цветов по весам), в итоге операция замедлилась аж в 5 раз

Код:
procedure BlurRowSSE(var theRow: array of TPxlC; K: TKernel; P: PRow);
var
  j, n: integer;
  tr, tg, tb: double; //tempRed è äð.
  w: double;
  xmm_w,xmm_c,xmm_t:TXMMSingle;
  na:byte;
begin

  for na:=0 to 3 do xmm_w[na]:=255;
  asm
   push eax
   push ebx
   push ecx
   push edx
   movups xmm0,xmm_w
   xorps xmm1,xmm1//0
   xorps xmm4,xmm4
   cmpeqps xmm4,xmm1//1
  end;

  for j := 0 to High(theRow) do
  begin
    {tb := 0;
    tg := 0;
    tr := 0;}
    asm
     xorps xmm7,xmm7
    end;
    for n := -K.Size to K.Size do
    begin
      //w := K.Weights[n];
      for na:=0 to 3 do xmm_w[na]:=K.Weights[n];
      asm
       movups xmm5,xmm_w//w
      end;

      //TrimInt çàäàåò îòñòóï îò êðàÿ ñòðîêè...

      with theRow[TrimInt(0, High(theRow), j - n)] do
      begin
        xmm_c[0]:=b;
        xmm_c[1]:=g;
        xmm_c[2]:=r;
        asm
         movups xmm2,xmm_c//b
         mulps  xmm5,xmm2//w*b
         addps  xmm7,xmm5//tb+[w*b]
        end;
         {tb := tb + w * b;
         tg := tg + w * g;
         tr := tr + w * r;}
      end;//with
    end;//for

    with P[j] do
    begin
      asm
       movups xmm2,xmm7//n
       movups xmm3,xmm2//copy n for mask
       cmpnleps xmm3,xmm0//mask >255
       xorps xmm3,xmm4//!mask
       andps xmm2,xmm3//n and [!mask]
       xorps xmm3,xmm4//mask
       andps xmm3,xmm0//mask and 255
       xorps xmm2,xmm3//n xor [mask and 255]
       movups xmm3,xmm2//copy n for mask
       cmpltps xmm3,xmm1//mask <0
       xorps xmm3,xmm4//!mask
       andps xmm2,xmm3
       movups xmm_c,xmm2
      end;
      b:=trunc(xmm_c[0]);
      g:=trunc(xmm_c[1]);
      r:=trunc(xmm_c[2]);
      {b := TrimReal(0, 255, tb);
      g := TrimReal(0, 255, tg);
      r := TrimReal(0, 255, tr);}
    end;//with
  end;//for

  asm
   pop edx
   pop ecx
   pop ebx
   pop eax
  end;

  Move(P[0], theRow[0], (High(theRow) + 1) * Sizeof(TPxlC));
end;
ps(пишу курсовую по теме использования SSE)
ANsy вне форума Ответить с цитированием
Старый 01.02.2011, 20:08   #2
Yar-Com
Новичок
Джуниор
 
Регистрация: 01.02.2011
Сообщений: 1
По умолчанию fsdfd

перепиши все на асм тут у тебя жесть какая-то

компиллер сума сходит

попробуй еще поставить выравнивание qword и повключать повыключать оптимизацию
Yar-Com вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация... MikeMNN Общие вопросы C/C++ 0 15.12.2010 17:40
статья - Введение в SSE Pblog Обсуждение статей 0 23.06.2010 05:13
MASM&3DNow&SSE e.t.s. Marginal Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 07.06.2010 18:41
SSE intrinsics C++ qpharm Общие вопросы C/C++ 1 13.11.2009 12:57
Регистры и команды i486 i586 i686 SSE MMX SSE2 etc в качестве альтернативы памяти. Ivan_32 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 02.06.2009 00:30