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

Есть достаточно старое приложение для выполнения сложных расчетов по произвольным формулам и исходным данным. Пока расчеты делаются последовательно, в разных базах (их около десятка). Нарисовалась задача выполнять расчеты параллельно.
Есть мысль разнести копии приложений по ядрам. Первое ядро оставляем свободным, по остальным ядрам раскидываем копии приложения и пусть работают согласно расписанию.
Дать пользователю самостоятельно выбрать ядро не вариант. Сколько на компе будет ядер заранее неизвестно, и сколько копий приложения запущено тоже. И муза с алгоритмом, как их раскидать, никак не прилетает. Как решить эту задачку без музы? )
...
Рейтинг: 0 / 0
22.08.2019, 16:36
    #39852870
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить работу нескольких копий приложения между ядрами
Забей, операционка это сделает сама.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.08.2019, 16:37
    #39852872
MxSxHx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить работу нескольких копий приложения между ядрами
Dimitry Sibiryakov,
Да нет же, все в рамках одного ядра пытается выполнить, 1-е ядро забивается, остальные простаивают
...
Рейтинг: 0 / 0
22.08.2019, 16:41
    #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
22.08.2019, 16:42
    #39852879
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить работу нескольких копий приложения между ядрами
_Vasilisk_,

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

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

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


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

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

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

Если очень хотите освоить что-то новое, читайте про SetProcessAffinityMask()
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.08.2019, 09:35
    #39853101
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить работу нескольких копий приложения между ядрами
Dimitry SibiryakovЕсли очень хотите освоить что-то новое, читайте про SetProcessAffinityMask()
А если не хотите, то обойдитесь запускалкой в .cmd через параметр Affinity в Start .
...
Рейтинг: 0 / 0
23.08.2019, 10:23
    #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
23.08.2019, 14:35
    #39853278
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить работу нескольких копий приложения между ядрами
Dimitry Sibiryakovчитайте про SetProcessAffinityMask()А зачем? Если ОС перебрасывает с ядра на ядро, значит она что-то знает. А если ядро, к которому привязались, будет занято? Пусть ОС сама рулит ядрами. Только она владеет всей доступной информацией об окружающей среде
...
Рейтинг: 0 / 0
23.08.2019, 14:54
    #39853292
d7i
d7i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить работу нескольких копий приложения между ядрами
_Vasilisk_Dimitry Sibiryakovчитайте про SetProcessAffinityMask()А зачем? Если ОС перебрасывает с ядра на ядро, значит она что-то знает. А если ядро, к которому привязались, будет занято? Пусть ОС сама рулит ядрами. Только она владеет всей доступной информацией об окружающей среде

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

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

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

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

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

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


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