Смекни!
smekni.com

Обработка изображений с использованием расширения процессора (стр. 4 из 4)

Label1.Caption:=format('0 %s',[delay_names]);

end;

//уборка мусора

procedure Tfrm_img.FormDestroy(Sender: TObject);

begin

img_errmsg[0].Free;

end;

//Гауссово размытие с применением расширения SSE

procedure Tfrm_img.act_effBlurGauseExecute(Sender: TObject);

var

b: TBitmap;

fticks:Cardinal;

begin

if (frm_imgbluropts.ShowModal=mrYes) then begin

fticks:=MilliSecondOfTheDay(Now);

img_des.Picture.LoadFromFile(img_OpenPictureDialog.FileName);

GBlur(img_des.Picture.Bitmap,frm_imgbluropts.ComboBox1.ItemIndex,True);

fticks:=MilliSecondOfTheDay(Now)-fticks;

img_log.lines.add(format('make action="copy blur SSE" at="%d" milliseconds',[fticks]));

Label1.Caption:=format('%d %s',[fticks,delay_names]);

end;

end;

//сохранить результат

procedure Tfrm_img.act_desSaveImageExecute(Sender: TObject);

begin

if (img_SavePictureDialog.Execute) then begin

img_des.Picture.SaveToFile(img_SavePictureDialog.FileName);

end;

end;

//центрировать результат

procedure Tfrm_img.act_desCenterImgExecute(Sender: TObject);

begin

with (sender as taction) do begin

img_des.Center:=Checked;

end;

end;

//растянуть результат

procedure Tfrm_img.act_desStrechImgExecute(Sender: TObject);

begin

with (sender as taction) do begin

img_des.Stretch:=Checked;

end;

end;

//центрировать источник

procedure Tfrm_img.act_srcCenterImgExecute(Sender: TObject);

begin

with (sender as taction) do begin

img_src.Center:=Checked;

end;

end;

//растянуть источник

procedure Tfrm_img.act_srcStrechImgExecute(Sender: TObject);

begin

with (sender as taction) do begin

img_src.Stretch:=Checked;

end;

end;

//Гауссово размытие без SSE (простое)

procedure Tfrm_img.act_effBlurGauseNoSSEExecute(Sender: TObject);

var

b: TBitmap;

fticks:Cardinal;

begin

if (frm_imgbluropts.ShowModal=mrYes) then begin

fticks:=MilliSecondOfTheDay(Now);

img_des.Picture.LoadFromFile(img_OpenPictureDialog.FileName);

GBlur(img_des.Picture.Bitmap,frm_imgbluropts.ComboBox1.ItemIndex,False);

fticks:=MilliSecondOfTheDay(Now)-fticks;

img_log.lines.add(format('make action="copy blur" at="%d" milliseconds',[fticks]));

Label1.Caption:=format('%d %s',[fticks,delay_names]);

end;

end;

Скриншот программы

Рисунок 3-1 вкладка "источник"


Рисунок 3-2 вкладка "результат"


Вывод

Сравним производительность при использовании оптимизации кода приложения под расширение SIMD процессора SSE и CPU. Тест производился на процессоре Intel® Core™2 DuoCPUT8300 2,4Ghz с поддержкой MMX,SSE-SSE4, EM64T.

Таблица 4-1

Сравнение времени обработки изображения 800х800
время обработки с SSE, мс время обработки на ЦП, мс коэфициент ускорения отклонение от среднего
1 840 1 032 1,2286 0,0071
2 841 1 047 1,2449 0,0093
3 832 1 033 1,2416 0,0059
4 839 1 028 1,2253 0,0104
5 836 1 035 1,2380 0,0024

Таблица 4-2

Сравнение времени обработки изображения 1024х768
время обработки с SSE, мс время обработки на ЦП, мс коэфициент ускорения отклонение от среднего
1 1 589 1 940 1,2209 0,0331
2 1 529 1 955 1,2786 0,0246
3 1 560 1 956 1,2538 0,0002
4 1 551 1 954 1,2598 0,0058
5 1 545 1 942 1,2570 0,0029

Таблица 4-3

Сравнение времени обработки изображения 1600х1200
время обработки с SSE, мс время обработки на ЦП, мс коэфициент ускорения отклонение от среднего
1 2 369 3 037 1,2820 0,0195
2 2 403 3 021 1,2572 0,0053
3 2 406 3 005 1,2490 0,0135
4 2 389 2 989 1,2512 0,0113
5 2 374 3 022 1,2730 0,0105

Таблица 4-4

Сравнение времени обработки изображения 2560х1600
время обработки с SSE, мс время обработки на ЦП, мс коэфициент ускорения отклонение от среднего
1 5 054 6 332 1,2529 0,0062
2 5 058 6 365 1,2584 0,0007
3 5 050 6 376 1,2626 0,0035
4 5 024 6 321 1,2582 0,0009
5 4 968 6 277 1,2635 0,0044

[1] промежуточный буфер с быстрым доступом

[2] архитектура Intel (Intelarchitecture)

[3] Указанный режим работы не является согласованным с требованиями стандарта IEEE 754

[4] Определяет формат хранения мантиссы, экспоненты и знака, форматы положительного и отрицательного нуля, плюс и минус бесконечностей, а также определение «не числа» (NaN), методы, обработку ситуаций

[5] Not a Number - не число

[6]Quiet NaN - "тихий NaN"

[7]Signalling NaN - "сигнализирующий NaN"