Разделить работу нескольких копий приложения между ядрами

MxSxHx
Дата: 22.08.2019 16:34:34
Добрый день, коллеги!

Есть достаточно старое приложение для выполнения сложных расчетов по произвольным формулам и исходным данным. Пока расчеты делаются последовательно, в разных базах (их около десятка). Нарисовалась задача выполнять расчеты параллельно.
Есть мысль разнести копии приложений по ядрам. Первое ядро оставляем свободным, по остальным ядрам раскидываем копии приложения и пусть работают согласно расписанию.
Дать пользователю самостоятельно выбрать ядро не вариант. Сколько на компе будет ядер заранее неизвестно, и сколько копий приложения запущено тоже. И муза с алгоритмом, как их раскидать, никак не прилетает. Как решить эту задачку без музы? )
Dimitry Sibiryakov
Дата: 22.08.2019 16:36:48

Забей, операционка это сделает сама.

Posted via ActualForum NNTP Server 1.5

MxSxHx
Дата: 22.08.2019 16:37:52
Dimitry Sibiryakov,
Да нет же, все в рамках одного ядра пытается выполнить, 1-е ядро забивается, остальные простаивают
_Vasilisk_
Дата: 22.08.2019 16:41:58
MxSxHx
Да нет же, все в рамках одного ядра пытается выполнить, 1-е ядро забивается, остальные простаивают
Не верю (С)

Запустите два экземпляра приложения
program Test;

{$APPTYPE CONSOLE}

var
  i: Integer;

begin
  Inc(i);
end.
и наблюдайте за загрузкой ядер
wadman
Дата: 22.08.2019 16:42:43
_Vasilisk_,

сильная нагрузка будет?
Гаджимурадов Рустам
Дата: 22.08.2019 16:45:39
MxSxHx> Нарисовалась задача выполнять расчеты параллельно.
MxSxHx> Есть мысль разнести копии приложений по ядрам.

Будет несколько экземпляров/копий приложения или одно?
Если несколько, то ОС сама раскидает и не мешайте ей.
Если одно, то изучайте, что такое потоки и как их готовить.

Posted via ActualForum NNTP Server 1.5

MxSxHx
Дата: 22.08.2019 16:55:53
Гаджимурадов Рустам
MxSxHx> Нарисовалась задача выполнять расчеты параллельно.
MxSxHx> Есть мысль разнести копии приложений по ядрам.

Будет несколько экземпляров/копий приложения или одно?
Если несколько, то ОС сама раскидает и не мешайте ей.
Если одно, то изучайте, что такое потоки и как их готовить.


Несколько копий, но первое ядро не хотелось бы нагружать.

Dimitry Sibiryakov
да, я был не прав ) спасибо!
Dimitry Sibiryakov
Дата: 22.08.2019 17:01:56

MxSxHx
первое ядро не хотелось бы нагружать.

Системе сугубо всё равно на каком ядре работать.

Если очень хотите освоить что-то новое, читайте про SetProcessAffinityMask()

Posted via ActualForum NNTP Server 1.5

tunknown
Дата: 23.08.2019 09:35:26
Dimitry Sibiryakov
Если очень хотите освоить что-то новое, читайте про SetProcessAffinityMask()
А если не хотите, то обойдитесь запускалкой в .cmd через параметр Affinity в Start.
MxSxHx
Дата: 23.08.2019 10:23:14
tunknown, благодарю, тоже хороший способ, попробую.
пока по варианту от Дмитрия примерно так сделал. Не тестил плотно, но вроде фурычит
  phwnd := GetCurrentProcess();
  GetProcessAffinityMask(phwnd, cpu, mask);
  GetSystemInfo(AppCalc);
  if AppCalc.dwNumberOfProcessors > 1
     then SetProcessAffinityMask(phwnd, mask xor dword(1));