Соответствие процессора

Опубликовано: 22 Марта, 2023


Введение


Когда компьютер имеет несколько процессоров или, по крайней мере, один многоядерный процессор, существует большой потенциал для повышения производительности ваших приложений, что можно сделать разными способами. В предыдущих статьях я писал о многопоточных приложениях, позволяющих использовать преимущества нескольких ядер. В этой статье я расскажу, что вы можете сделать, чтобы использовать преимущества нескольких ядер при использовании однопоточных приложений.


Сопоставление процессоров — это возможность направить конкретную задачу или процесс на использование определенного ядра. Почему это полезно? Что ж, если процесс запускается часто, в кэше данного процессора могут оставаться остатки предыдущих запусков этого процесса. Таким образом, если процесс направлен на то, чтобы всегда использовать одно и то же ядро, возможно, процесс будет работать более эффективно из-за повторного использования кеша. Другим способом использования сходства процессоров может быть направление только одного или двух процессов, критичных к производительности, на одно ядро, в то время как все остальные процессы направляются на другие ядра. Это должно гарантировать, что, когда критически важные для производительности процессы требуют основного, он будет доступен.


Настройка соответствия процессоров в Vista


В Windows Vista вы можете установить привязку к процессору, открыв диспетчер задач.


Изображение 20251
Рисунок 1: Диспетчер задач Windows.



Выберите процесс, указанный на вкладке Процесс. Щелкнув правой кнопкой мыши по этому процессу, вы получите меню, показанное на рисунке 2. При выборе пункта меню Set Affinity появится диалоговое окно параметров, показанное на рисунке 3.


Изображение 20252
Рисунок 2: Контекстное меню.


Изображение 20253
Рисунок 3: Диалоговое окно параметров привязки процессора.


В диалоговом окне параметров привязки процессора отображается каждое ядро, доступное для системы. Установив флажок рядом с ядром операционной системы, в данном случае Windows Vista, вы будете назначать этот процесс этому ядру при каждом его запуске. Проверяя более одного ядра, операционная система попытается сбалансировать нагрузку между указанными ядрами.


Специализированные ядра


Случай, показанный выше, является типичным и достаточно простым. В ближайшем будущем настройка привязки процессоров станет намного сложнее. Почему? Потому что нет причин, по которым процессорные ядра должны быть идентичными. Когда системы начнут поставляться со многими десятками ядер, вполне вероятно, что многие из этих ядер будут оптимизированы для определенных типов операций. Это будет сделано почти так же, как графический процессор (GPU) оптимизирован для выполнения операций, общих для обработки графики.


Поэтому я уверен, что вы можете себе представить, что когда есть десятки ядер, большинство из которых оптимизированы для конкретных операций, будет довольно сложной задачей разумно назначить привязку к процессору. Я считаю, что будущие версии операционных систем должны позаботиться об этом, но в то же время разрешить пользовательские модификации.


Это может произойти подобно тому, как я описываю ниже.


Во-первых, при установке операционной системы или при добавлении нового оборудования операционная система идентифицирует каждое доступное ядро. Это было бы похоже на то, что делается сейчас, за исключением того, что каждое ядро будет сравниваться с ранее созданным реестром.


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


Концепция реестра оптимизации ядра может даже стать еще одной ареной для конкуренции между операционными системами; тогда как разные операционные системы, вероятно, будут иметь разные реестры оптимизации ядра, возможно, даже с разной степенью детализации. Например, одна операционная система может ранжировать данное ядро как оптимизированное для графических операций, в то время как другая операционная система с более полным реестром оптимизации ядра может ранжировать то же самое ядро как оптимизированное для операций с 3D-графикой.


Во-вторых, после того, как операционная система узнает обо всех доступных ядрах и проверит их по реестру оптимизации ядер, операционная система должна назначить каждому процессу одно или несколько ядер в зависимости от типов операций, требуемых для процесса. Во время установки операционной системы операционная система может сопоставить все предустановленное программное обеспечение с одним или несколькими ядрами, а также сопоставить все процессы операционной системы с одним или несколькими ядрами. Сопоставление этих процессов с доступными ядрами будет сложной задачей.


Как операционная система узнает, какие типы операций требуются процессам в данном программном обеспечении? Это требование позволяет разумно назначать привязку к процессору. Может существовать реестр операций с программным обеспечением, где программное обеспечение регистрируется в реестре вместе с типами операций, требуемых для этого программного обеспечения. Но я не уверен, что это хорошая идея. Программное обеспечение развивается настолько быстро, что я сомневаюсь, что такой реестр можно было бы сделать практичным. На мой взгляд, лучшая идея состоит в том, чтобы предоставить программный доступ к основному реестру оптимизации, чтобы можно было написать программное обеспечение, устанавливающее собственное сходство. Это, вероятно, лучше всего используется установщиками программного обеспечения, которые будут устанавливать сходство (после подтверждения пользователя) во время установки программного обеспечения.


В-третьих, у пользователя все еще должен быть способ изменить привязку к процессору. Это должно быть сделано прямолинейным способом, аналогичным методу установки привязки процессоров в Windows Vista, как я описал выше. Очевидно, что если доступны десятки ядер, схема отображения этой информации должна быть другой, но какой бы метод ни был выбран, он должен быть простым и понятным. Это может быть одним из способов для пользователей персонализировать работу своего компьютера. Возможно, некоторые умные пользователи не согласятся с привязкой, выбранной операционной системой, возможно, из-за плохой оптимизации ядра реестра, и эти пользователи должны иметь возможность изменить привязку в соответствии со своими желаниями.


Это все хорошо, но многим приложениям потребуются по-разному оптимизированные ядра во время работы программного обеспечения на основе ввода пользователя или других программных приложений. Это подводит меня к четвертому пункту. (Ну, на самом деле это вообще не вопрос; я просто защищаю свои идеи от любых читателей, которые могут подумать, что я пренебрег этим распространенным случаем). Часть программного обеспечения должна иметь доступ к основному реестру оптимизации, как я объяснил во втором пункте, это не только позволяет программному обеспечению устанавливать свою привязку во время запуска, но также позволяет программному обеспечению устанавливать привязку к различным процессам и изменять родство в любое время. Точно так же, если установщик устанавливает сходство для программного приложения, ничто не мешает установщику использовать множество сходств для различных типов процессов, возможных в программном обеспечении.


Вывод


Описанный выше метод настройки сходства процессоров в системах с большим количеством ядер, некоторые из которых оптимизированы для разных процессов, является лишь одним из способов добиться этого. Другой метод, о котором я читал и с которым не согласен, заключается в том, что операционная система отслеживает действия программного приложения и то, как оно использует ядра, а затем назначает процесс ядру, которое, по ее мнению, подходит для этого типа процесса. Я считаю, что это правильный способ балансировки нагрузки. Однако, если задача этого мониторинга заключается в определении математической природы процесса, я считаю, что время и вычислительная мощность, необходимые для этого, будут пустой тратой времени. Описанный выше метод позволяет разработчику программного обеспечения перенести это определение на процесс установки, а не на время выполнения. Я считаю, что это приведет к лучшему, более удобному для пользователя конечному результату.