Обработка изображений с использованием расширения процессора
img_tabs.ActivePage:=img_tab1;//page
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 Duo CPU T8300 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 |
Другие рефераты на тему «Программирование, компьютеры и кибернетика»:
Поиск рефератов
Последние рефераты раздела
- Основные этапы объектно-ориентированного проектирования
- Основные структуры языка Java
- Основные принципы разработки графического пользовательского интерфейса
- Основы дискретной математики
- Программное обеспечение системы принятия решений адаптивного робота
- Программное обеспечение
- Проблемы сохранности информации в процессе предпринимательской деятельности