Конечно, параллельные вычисления в основном нужны для науки, вычислений с большими массивами данных, но это дело реально даёт существенное приращение в скорости вычислений, проверено опытом.
![Smile :-)](./images/smilies/icon_smile.gif)
Модератор: Модераторы
Да, обработка изображений, например.Лекс Айрин писал(а):Полно еще других, более прикладных областей применения.
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;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31