Я работаю над программой, которая устанавливает сродство к процессу. У меня есть заранее определенные данные, которые позволили мне рассчитать приблизительный процент ЦП (или ядра), который процесс использует на каждом из трех этапов жизни программы. Каждый процесс имеет эти три этапа, и у меня есть заранее определенные данные для каждого процесса на каждом из этих трех этапов. Я пытаюсь определить лучший алгоритм, который может сортировать процессы. Кикер, я не могу отсортировать каждый этап в отдельности Для процесса X все три этапа должны быть приняты во внимание при сравнении с процессом Y в алгоритме. Как пример с некоторыми составленными данными:
CPU's currently at the following loads:
CPU | Stage 1 | Stage 2 | Stage 3
---------------------------------
1 | 25% | 25% | 25%
2 | 50% | 50% | 50%
3 | 75% | 25% | 75%
4 | 50% | 25% | 10%
Process X was pre-determined to take up
10% in stage 1, 20% in stage 2, and 30% in stage 3.
То, что я до сих пор придумал, - это добавление заранее определенного процента, который процесс X занимает для каждого процессора, что приведет к следующему:
CPU | Stage 1 | Stage 2 | Stage 3
---------------------------------
1 | 35% | 45% | 55%
2 | 60% | 70% | 80%
3 | 85% | 45% | 105%
4 | 60% | 45% | 40%
и ранжировать ступени каждого ЦП относительно другого (давая связи одинаковое значение), что приведет к следующему:
CPU | Stage 1 | Stage 2 | Stage 3
---------------------------------
1 | Rank 1 | Rank 1 | Rank 2
2 | Rank 2 | Rank 2 | Rank 3
3 | Rank 3 | Rank 1 | Rank 4
4 | Rank 2 | Rank 1 | Rank 1
, а затем взвесьте ранжирование по тому, сколько каждый процесс использует на каждом этапе, и прибавьте весовые коэффициенты * к каждому этапу, чтобы получить целое число, чтобы определить, какое назначение ЦП лучше. В этом примере я бы присвоил 3-й ступени вес 3, потому что это этап с наибольшим значением для этого процесса, 2-й ступень - 2, а 1-й - 1, по той же причине, что и 3-й этап. Это приведет к:
CPU | Stage 1 | Stage 2 | Stage 3 | Sum
-----------------------------------------
1 | 1 | 2 | 6 | 9
2 | 2 | 4 | 9 | 15
3 | 3 | 2 | 12 | 17
4 | 2 | 2 | 3 | 7
Поскольку ЦП 4 имеет наименьшую сумму, поэтому лучше всего назначить Процесс X для. Я верю, что в этом все еще есть несколько изломов, и я думаю, что мог бы быть намного лучший способ сделать это (именно поэтому я спрашиваю Вас!). Я просто подумал, что объясню, что у меня есть, просто чтобы дать вам представление о том, с чем я работаю.
Редактировать: я должен добавить, что вы не можете просто суммировать этапы для каждого процессора, а затем применить алгоритм сортировки. Каждый этап должен оставаться ниже 100%, и если вы суммируете этапы, вы можете непреднамеренно назначить процесс процессору, для которого нет места. То есть процесс присвоения Y с 90% / 20% / 30% был рассчитан (при условии суммирования этапов) для назначения на ЦП 1 с 20% / 30% / 40%. Сумма этапов для этого ЦП может быть меньше, чем у любого другого ЦП, но добавление этапа 1 процесса Y (90%) к этапу 1 ЦП 1 (20%) будет больше 100% и приведет к переполнению.
Следует избегать суммирования этапов в любом месте, поскольку оно скрывает возможные проблемы.
Я считаю, что все сводится к тому, как ... Как вы сортируете наборы данных? Поскольку каждый ЦП по сути является набором данных (этап 1, этап 2, этап 3), который мне нужно отсортировать, чтобы определить назначение процесса.
Редактировать 2: Я только что закончил с моим описанием здесь.