Не думаю, что основной код прояснит ситуацию. Но вот он
Код: Выделить всё
procedure TForm1.Button6Click(Sender: TObject);
var
AK: TArrayStr;
K: TKernelCL;
I: Integer;
begin
Memo4.Clear;
Builder.BildInit(ComboBox1.ItemIndex);
Memo4.Lines.Add('Compile ''%s''...',[Builder.Cont.Device.OpenCL_C_v]);
Memo4.Width:= Memo4.Width+1;
Memo4.Width:= Memo4.Width-1;
Memo4.Refresh;
Memo4.Repaint;
Memo4.Refresh;
Memo4.Update;
Memo4.Invalidate;
Memo4.Refresh;
Memo4.Repaint;
Memo4.Refresh;
Memo4.Refresh;
Memo4.Repaint;
Memo4.Refresh;
Memo4.Update;
Memo4.Invalidate;
Memo4.Refresh;
Memo4.Repaint;
Memo4.Refresh;
for I:= 0 to 100 do
Application.ProcessMessages;
Memo4.Lines.Add('----------LOG----------');
Builder.Bild(SynEdit1.Text);
Memo4.Text:= Memo4.Text + Builder.Prog.BuildLog;
Memo4.Lines.Add('-----------------------');
Application.ProcessMessages;
if Builder.Prog.BuildStatus then
Memo4.Lines.Add('The program is compiled.')
else
begin
Memo4.Lines.Add('The program is not compiled.');
Memo4.Lines.Add('Error: %s (%d)',[ErrorCL(Builder.Prog.BuildError),
Builder.Prog.BuildError]);
end;
if Builder.Prog.BuildStatus then
begin
Memo4.Lines.Add('Kernels: %s',[Builder.Prog.BuildKernels]);
Memo4.Lines.Add('');
ParseStr(Builder.Prog.BuildKernels,';',AK);
for I:= 0 to Length(AK)-1 do
begin
K:= Builder.Prog.CreateKernel(AK[I]);
Memo4.Lines.Add('Kernel ''%s''',[K.Name]);
Memo4.Lines.Add('Attributes: %s',[K.Attributes]);
Memo4.Lines.Add('Local mem.: %d',[K.LocalMemWG]);
Memo4.Lines.Add('Private mem.: %d',[K.PrivateMemWG]);
Memo4.Lines.Add('Max WG size: %d',[K.MaxSizeWG]);
Memo4.Lines.Add('WG size: %d',[K.PreferredSizeWG]);
//Memo4.Lines.Add('Global WG size: %s',[PrintDim3(K.GlobalSizeWG)]);
Memo4.Lines.Add('Compile WG size: %s',[PrintDim3(K.CompileSizeWG)]);
Memo4.Lines.Add('');
K.Free;
end;
end;
Application.ProcessMessages;
Builder.BildFree;
end;
Добавлено спустя 7 минут 56 секунд:Самые долгие вызовы это:
Код: Выделить всё
Builder.Bild(SynEdit1.Text);
Builder.BildFree;
Остальное работает быстро.