Sulphide
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Может кто у себя протестировать?... Такое ощущение что без "разогрева" TParallel.For работает намного медленнее... Пример копирования ~гигабайта памяти, если раскомментить однопоточную часть, то все ок. Если оставить закомменченной, то все плохо.. Код: procedure TForm1.Button1Click(Sender: TObject); var mems, memd: PByte; i, md, dv, slice: integer; tm, Sz: int64; err: boolean; begin Sz := 1000000000; slice := 1024; md := Sz mod slice; dv := Sz div slice; GetMem(mems, Sz); GetMem(memd, Sz); { mytimer := TStopwatch.StartNew; move(mems[0], memd[0], Sz); mytimer.Stop; tm := mytimer.ElapsedMilliseconds; Text1.Text := 'Single thread time: ' + inttostr(tm) + 'ms'; } mytimer := TStopwatch.StartNew; TParallel.For(0, dv - 1, procedure(i: integer) begin move(mems[i * slice], memd[i * slice], slice); end); if md > 0 then move(mems[Sz - md], memd[Sz - md], md); mytimer.Stop; tm := mytimer.ElapsedMilliseconds; Text2.Text := 'Multi thread time: ' + inttostr(tm) + 'ms'; FreeMem(mems); FreeMem(memd); end; end. |
| Всего записей: 277 | Зарегистр. 20-03-2008 | Отправлено: 21:44 11-09-2015 | Исправлено: Sulphide, 21:45 11-09-2015 |
|