Конечно, параллельные вычисления в основном нужны для науки, вычислений с большими массивами данных, но это дело реально даёт существенное приращение в скорости вычислений, проверено опытом.

Модератор: Модераторы


Да, обработка изображений, например.Лекс Айрин писал(а):Полно еще других, более прикладных областей применения.


procedure Test();
var i: Integer;
begin
  for i := 1 to 100 do writeln('test' + IntToStr(i));
  writeln('ok');
end;
go Test();
writeln('done');  go Test();
  while readln() <> 'ok' do sleep();
  writeln('done');


Лекс Айрин писал(а):а почему нельзя дождаться пока все потоки остановятся?





serbod писал(а):С технической стороны, я не знаю, как работают шейдеры в видеоускорителях. Предполагаю, что там используется какой-то свой специфичный компилятор, код для которого можно сгенерить из основного компилятора.

procedure ProcessItem(var arr: array; i: Integer; var n: Integer); threaded;
begin
  // обработка arr[i]
  Dec(n); // поскольку процедура отмечена как threaded, то операции над внешними переменными атомарные,
          // то есть вместо Dec(n) будет InterlockedIncrement(n, -1);
end;
var
  n: Integer;
begin
  n := Length(arr)-1;
  for i := 0 to n do
  begin
    go ProcessArrItem(arr, i, n);
  end;
  while n > 0 do sleep(); // ждем завершения всех задач
end;

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1