powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Разделить работу нескольких копий приложения между ядрами
20 сообщений из 20, страница 1 из 1
Разделить работу нескольких копий приложения между ядрами
    #39852867
MxSxHx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, коллеги!

Есть достаточно старое приложение для выполнения сложных расчетов по произвольным формулам и исходным данным. Пока расчеты делаются последовательно, в разных базах (их около десятка). Нарисовалась задача выполнять расчеты параллельно.
Есть мысль разнести копии приложений по ядрам. Первое ядро оставляем свободным, по остальным ядрам раскидываем копии приложения и пусть работают согласно расписанию.
Дать пользователю самостоятельно выбрать ядро не вариант. Сколько на компе будет ядер заранее неизвестно, и сколько копий приложения запущено тоже. И муза с алгоритмом, как их раскидать, никак не прилетает. Как решить эту задачку без музы? )
...
Рейтинг: 0 / 0
Разделить работу нескольких копий приложения между ядрами
    #39852870
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забей, операционка это сделает сама.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Разделить работу нескольких копий приложения между ядрами
    #39852872
MxSxHx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
Да нет же, все в рамках одного ядра пытается выполнить, 1-е ядро забивается, остальные простаивают
...
Рейтинг: 0 / 0
Разделить работу нескольких копий приложения между ядрами
    #39852878
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MxSxHxДа нет же, все в рамках одного ядра пытается выполнить, 1-е ядро забивается, остальные простаиваютНе верю (С)

Запустите два экземпляра приложения
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
program Test;

{$APPTYPE CONSOLE}

var
  i: Integer;

begin
  Inc(i);
end.

и наблюдайте за загрузкой ядер
...
Рейтинг: 0 / 0
Разделить работу нескольких копий приложения между ядрами
    #39852879
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

сильная нагрузка будет?
...
Рейтинг: 0 / 0
Разделить работу нескольких копий приложения между ядрами
    #39852881
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MxSxHx> Нарисовалась задача выполнять расчеты параллельно.
MxSxHx> Есть мысль разнести копии приложений по ядрам.

Будет несколько экземпляров/копий приложения или одно?
Если несколько, то ОС сама раскидает и не мешайте ей.
Если одно, то изучайте, что такое потоки и как их готовить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Разделить работу нескольких копий приложения между ядрами
    #39852889
MxSxHx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов РустамMxSxHx> Нарисовалась задача выполнять расчеты параллельно.
MxSxHx> Есть мысль разнести копии приложений по ядрам.

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


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

Dimitry Sibiryakov
да, я был не прав ) спасибо!
...
Рейтинг: 0 / 0
Разделить работу нескольких копий приложения между ядрами
    #39852892
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MxSxHxпервое ядро не хотелось бы нагружать.

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

Если очень хотите освоить что-то новое, читайте про SetProcessAffinityMask()
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Разделить работу нескольких копий приложения между ядрами
    #39853101
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЕсли очень хотите освоить что-то новое, читайте про SetProcessAffinityMask()
А если не хотите, то обойдитесь запускалкой в .cmd через параметр Affinity в Start .
...
Рейтинг: 0 / 0
Разделить работу нескольких копий приложения между ядрами
    #39853135
MxSxHx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tunknown, благодарю, тоже хороший способ, попробую.
пока по варианту от Дмитрия примерно так сделал. Не тестил плотно, но вроде фурычит
Код: pascal
1.
2.
3.
4.
5.
  phwnd := GetCurrentProcess();
  GetProcessAffinityMask(phwnd, cpu, mask);
  GetSystemInfo(AppCalc);
  if AppCalc.dwNumberOfProcessors > 1
     then SetProcessAffinityMask(phwnd, mask xor dword(1));
...
Рейтинг: 0 / 0
Разделить работу нескольких копий приложения между ядрами
    #39853278
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovчитайте про SetProcessAffinityMask()А зачем? Если ОС перебрасывает с ядра на ядро, значит она что-то знает. А если ядро, к которому привязались, будет занято? Пусть ОС сама рулит ядрами. Только она владеет всей доступной информацией об окружающей среде
...
Рейтинг: 0 / 0
Разделить работу нескольких копий приложения между ядрами
    #39853292
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Dimitry Sibiryakovчитайте про SetProcessAffinityMask()А зачем? Если ОС перебрасывает с ядра на ядро, значит она что-то знает. А если ядро, к которому привязались, будет занято? Пусть ОС сама рулит ядрами. Только она владеет всей доступной информацией об окружающей среде

Поддерживаю. Экспериментировал с SetProcessAffinityMask. До одного места. Если и держит установленное ядро, то весьма непродолжительно. А потом ОС переиначивает всё по-своему... Тут нужно какое-то другое решение (если оно вообще в Windows возможно).
...
Рейтинг: 0 / 0
Разделить работу нескольких копий приложения между ядрами
    #39853300
zinpub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
d7i,

Оно в Windows - не НУЖНО...
...
Рейтинг: 0 / 0
Разделить работу нескольких копий приложения между ядрами
    #39853307
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d7iЭкспериментировал с SetProcessAffinityMask. До одного места. Если и держит установленное ядро, то весьма непродолжительно.
Не могу подтвердить. Когда писал тестовую тулзу для одной конторы, которая сортирует 100 гб файлы, то потоки до конца работы оставались там, куда я их вешал. Кол-во потоков было = кол-ву ядер. Загрузка всегда 100%.
...
Рейтинг: 0 / 0
Разделить работу нескольких копий приложения между ядрами
    #39853358
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmand7iЭкспериментировал с SetProcessAffinityMask. До одного места. Если и держит установленное ядро, то весьма непродолжительно.
Не могу подтвердить. Когда писал тестовую тулзу для одной конторы, которая сортирует 100 гб файлы, то потоки до конца работы оставались там, куда я их вешал. Кол-во потоков было = кол-ву ядер. Загрузка всегда 100%.
При 100% загрузке всех ядер уже нечего распределять...
А вы попробуйте нагрузить своей задачей только 2-е или 3-е ядро, а потом запустите ещё парочку серьезных задач.
Windows тут же перенагрузит все ядра по-своему...
...
Рейтинг: 0 / 0
Разделить работу нескольких копий приложения между ядрами
    #39853359
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanЗагрузка всегда 100%.Как будто она была бы другой, если бы ты отдал привязку на откуп системы
...
Рейтинг: 0 / 0
Разделить работу нескольких копий приложения между ядрами
    #39853381
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Если ОС перебрасывает с ядра на ядро, значит она что-то знает.Знает она только статистику и, возможно, температуру. Переносит для размазывания нагрузки. Думаю, что при переносе процесса/потока на другое ядро теряется L1-кеш ядра. Если он небольшой, то исполнение на фиксированном ядре не даст большого преимущества. Если на серверном процессоре кеш большой, то, возможно, выигрыш будет. Если affinity на одно ядро задать в TaskMgr, то оно сохраняется.

_Vasilisk_А если ядро, к которому привязались, будет занято? Пусть ОС сама рулит ядрами. Только она владеет всей доступной информацией об окружающей средеЭто почти не проблема, если сервер выделен под задачу. Если задач несколько, то придётся положиться на виндовс.
...
Рейтинг: 0 / 0
Разделить работу нескольких копий приложения между ядрами
    #39853435
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tunknownесли сервер выделен под задачу

Что значит "сервер выделен под задачу"?
На сервере крутится ОС.
Она распределяет на его ресурсы свои задачи.
...
Рейтинг: 0 / 0
Разделить работу нескольких копий приложения между ядрами
    #39853451
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SetThreadAffinityMask нужна исключительно для того, чтобы запретить потоку (процессу) работать на определенных ядрах. Иногда это полезно.
...
Рейтинг: 0 / 0
Разделить работу нескольких копий приложения между ядрами
    #39853653
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gatortunknownесли сервер выделен под задачу

Что значит "сервер выделен под задачу"?Если сервер выделен, то на нём работает только то, что задано. Если потоками управлять изнутри, то такая программа не подлежит администрированию. Или добавлять в неё эту возможность заранее.

GatorНа сервере крутится ОС.
Она распределяет на его ресурсы свои задачи.У ОС не должно быть своих задач в пределе. Вынужденно исключая всякую мелочь типа RpcSs, EventLog и т.п.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Разделить работу нескольких копий приложения между ядрами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]