Архитектура MCDM
Драйвер microsoft Compute Driver Model (MCDM) — это платформа, предназначенная для поддержки высокопроизводительных вычислительных задач на платформах Windows. Он предоставляет стандартный интерфейс для разработки драйверов, которые могут использовать GPU, NPU и другие вычислительные ресурсы для параллельных задач обработки. Драйверы MCDM важны для приложений, требующих интенсивной вычислительной мощности, таких как научное моделирование, анализ данных и машинное обучение.
В этой статье описываются архитектурные понятия MCDM. Драйвер MCDM или драйвер только для вычислений имеет драйвер режима ядра (.sys драйвер) и библиотеку динамической компоновки в режиме пользователя (DLL).
См. также:
- Общие сведения о модели драйвера вычислений Майкрософт
- Рекомендации по реализации драйвера в режиме ядра MCDM
- Поток операций WDDM
Очередь команд
Очередь команд — это конструкция DirectCompute, используемая для отправки работы. Драйвер отвечает за создание одного или нескольких контекстов , которые затем используются для выполнения отправленной работы. Драйвер отвечает за преобразование работы, выраженной с помощью вызовов DDI в буферы DMA, которые затем передаются в контекст для выполнения.
Контекст
Контекст — это очередь вычислительных работ, отправленных драйвером, предназначенным для обработчика с состоянием конкретного экземпляра. Вычисление выражается как буферы DMA, которые хранятся в очереди SW, ожидающей отправки в ядро.
Очередь SW
Буферы DMA, отправленные для выполнения в контекст, хранятся в очереди SW. Длина очереди SW ограничивается только ресурсами. Существует связь "один к одному" между контекстом и соответствующей очередью SW. Планировщик должен удалить буферы DMA из очереди SW и отправить буферы в соответствующий механизм, который в свою очередь помещает буфер в собственную очередь HW.
Планировщик
Планировщик реализуется ОС, и драйвер не имеет контроля над этим планированием.
Планировщик отвечает за планирование заложенной работы в очередях SW, предназначенных для обработчиков. Это обеспечивает справедливое использование ограниченных ресурсов ядра во всех очередях И при необходимости выполняет работу, чтобы обеспечить эту справедливость и обеспечить своевременное завершение работы с более высоким приоритетом.
Когда планировщик преобразовывает работу, он несет ответственность за повторное перечисление в соответствии с работой, которая была предопределена.
Подсистема
Модуль выполняет необходимые действия для выполнения работы, выраженной в последовательности буферов DMA. Каждый буфер DMA выполняется в заданном контексте и адресном пространстве. Модуль должен указывать, когда выполнение буфера DMA завершено, и эти признаки должны быть предоставлены в том же порядке, в котором были получены буферы DMA.
Подсистема должна выполнять прогресс независимо в отсутствие явных или неявных зависимостей, выраженных в буферах DMA. Если существуют два или более двигателей , они планируются с предположением, что работа каждого двигателя будет осуществляться своевременно и без нарушения работы, проведенной в других двигателях.
Так как буфер DMA выполняется с заданным адресным пространством, несколько обработчиков могут поддерживаться только в том случае, если каждый модуль может выполнять буферы DMA в разных адресных пространствах.
Драйвер определяет, сколько обработчиков он сообщает и как эти подсистемы используются создаваемым контекстом.
Очередь HW
Обработчику будет предоставлена последовательность буферов DMA, которые концептуально помещаются в очередь, называемую очередью HW. В настоящее время эта очередь заполняется только двумя записями буфера DMA. Обработчик должен завершить буферы DMA в порядке отправки.
Вытеснение
Подсистема должна иметь возможность предварительного прерывания, что позволяет прерывать или отменять выполнение частично завершенных буферов DMA.
При запросе на выполнение невыполненных работ обработчик должен минимально поддерживать завершение всех частично завершенных буферов DMA и отменять все буферы DMA, которые еще не запущены.
Указание завершения или прерывания буферов DMA по-прежнему должно выполняться в том порядке, в котором были отправлены буферы DMA. Если буфер DMA преумножен, все последующие буферы DMA (в настоящее время не более одного другого буфера) также преумножены.
Если буфер DMA частично выполнен, драйвер должен сохранить достаточно информации для возобновления его выполнения.
Буфер DMA
Драйвер преобразует работу, отправленную через вызовы DDI в буферы DMA, которые затем отправляются для выполнения. Модуль выполняет необходимые действия для выполнения работы, выраженной в последовательности буферов DMA. Каждый буфер DMA выполняется в заданном контексте и адресном пространстве. Модуль должен указывать, когда выполнение буфера DMA завершено, и эти признаки должны быть предоставлены в том же порядке, в котором были получены буферы DMA.
Адресное пространство
Адресное пространство используется для сопоставления адресов виртуальных устройств с физическими адресами устройств. Для каждого процесса на стороне узла используется одно адресное пространство .
Подсистемы являются общим ресурсом между процессами и поэтому должны поддерживать переключение между адресными пространствами, так как буферы DMA выполняются из разных процессов.
Устройства, поддерживающие только одно адресное пространство , должны быть ограничены в том, как они используются. Использовать устройство может только один процесс одновременно. Хотя один процесс использует устройство, все попытки других процессов доступа к устройству завершаются ошибкой. Устройства, которые могут поддерживать доступ только одним процессом, называются устройствами с одним использованием .
Адресное пространство указывается одним указателем на корневую таблицу адресного пространства. Изменение в другое адресное пространство требует только указания другого корневого адреса таблицы страницы.
ОС управляет таблицей страниц адресного пространства. Чтобы внести изменения в таблицу страниц, ОС отправляет запросы драйверу на запись этих изменений в буферы DMA, которые позже отправляются в соответствующий механизм в соответствующее время.