Параллелизм, 4 приложения CUDA, конкурирующие за ресурсы GPU - PullRequest
6 голосов
/ 14 сентября 2010

Что бы произошло, если бы четыре одновременных приложения CUDA конкурировали за ресурсы в одном графическом процессоре чтобы они могли переложить работу на графическую карту? Руководство по программированию Cuda 3.1 упоминает, что некоторые методы, которые являются асинхронными:

  • Запускает ядро ​​
  • Устройство памяти устройства копирует
  • Копии памяти хост-устройства блока памяти объемом 64 КБ или менее
  • Копии памяти, выполняемые функциями с суффиксом Async
  • вызовы функций набора памяти

Также упоминается, что устройства с вычислительной способностью 2.0 способны выполнять несколько ядер одновременно, если ядра принадлежат одному и тому же контексту.

Применяется ли этот тип параллелизма только к потокам в пределах одного приложения cuda, но это невозможно, когда есть полные различные приложения, запрашивающие ресурсы GPU ??

Означает ли это, что одновременная поддержка доступна только в 1 приложении (контекст ???), и что 4 приложения будут работать одновременно, так что методы могут перекрываться переключением контекста в ЦП, но в 4 приложениях нужно дождаться освобождения графического процессора другими приложениями? (то есть запуск ядра из app4 ожидает, пока не завершится запуск ядра из app1 ..)

Если это так, как эти 4 приложения могут получать доступ к ресурсам графического процессора, не испытывая при этом длительного ожидания?

1 Ответ

4 голосов
/ 14 сентября 2010

Как вы сказали, только один «контекст» может занимать каждый из двигателей в любой момент времени. Это означает, что один из механизмов копирования может обслуживать memcpy для приложения A, другой - memcpy для приложения B, а механизм вычислений может выполнять ядро ​​для приложения C (например).

Приложение может фактически иметь несколько контекстов, но никакие два приложения не могут совместно использовать один и тот же контекст (хотя потоки в приложении могут совместно использовать контекст).

Любое приложение, которое планирует работу для запуска на графическом процессоре (т. Е. Memcpy или запуск ядра), может запланировать работу асинхронно , чтобы приложение могло свободно выполнять какую-то другую работу с ЦП. и он может запланировать любое количество задач для запуска на GPU.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...