2010-09-14 7 views
6

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

  • Ядро запускает
  • копии памяти устройства
  • устройства
  • копии памяти хост-устройства из блока памяти 64 КБ или меньше
  • копии памяти, выполняемые функции, которые суффиксом с асинхронным
  • памяти набор вызовов функций

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

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

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

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

ответ

4

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

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

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

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

+0

привет Том. Я работаю над небольшим проектом cuda и ищу партнеров. есть ли у вас желание сотрудничать? сейчас я работаю над интеграцией ublas и cublas – Anycorn