1. Решаю задачу взаимодействие многих тел. Объект - система тел. Одна процедура вычисляет все силы в системе (тут больше всего операций), вторая сдвигает тела, после того как все силы вычислены, + разные сервисные операции, вывести во вьюшку, записать в файл, записать картинку на диск, отчитаться в Лог.

Этап вычисления сил отлично распараллеливается (в голове пока). Раздаем объект разным процессорам (методам работающим на разных процессорах) и говорим, что один считает первую половину тел системы, второй - вторую. Потом они записывают результат назад в объект и запускается следующая процедура (перемещение). И так далее.

Сейчас я почти в реальном времени считаю 200 заряженных шариков, а необходимо больше. Решил записывать bmp и потом собирать их в avi, чтобы смотреть, что получается, но этот процесс хочется ускорить.

2. Обучаю нейросеть. Там примерно то же самое можно сделать. Следующая итерация объекта зависит от состояния объекта на предыдущем шаге, а значит можно разбить на независимые вычисления.

Мне бы помог такой инструмент: клоны методов для разных процессоров. Скажем вот такой абстрактный код:

## Код:
```
MODULE GasDinamic;
IMPORT CpuMaster;

TYPE
   Body = RECORD
      f, .... : REAL;
   END;
   System = POINTER TO ARRAY OF Body;

VAR 
   gas: System;

PROCEDURE (sys: System) Count (a, b: INTEGER), NEW;
VAR i: INTEGER;
BEGIN
   FOR i:=a TO b-1 DO
      sys[i].body.f := F(sys); (* где F нигде не зависит от sys[*].body.f *)
   END
END Count;

PROCEDURE (sys: System) Step(cpu: INTEGER), NEW;
VAR n,i: INTEGER;
BEGIN
   n:=CpuMaster.HowMuch; (* Определяем сколько процессоров *)
   FOR i:=0 TO n-1 DO
      CpuMaster.Exec(sys.Count(LEN(sys)/n*i,LEN(sys)/n*(i+1)), i); (* выполнить процедуру на i процессоре *)
   END;
   CpuMaster.Wait;    (* теперь ждем пока посчитает каждый свою порцию и продолжаем работу. *)
   ...

END Step;

...

BEGIN 
   NEW(gas, 100);
   ...

END GasDinamic.
```


Как такой CpuMaster написать? Или есть проще решение? Я не специалист в программировании.