Приложение Cuda Runtime API + Python - PullRequest
0 голосов
/ 03 мая 2020

У меня есть функция Python, которая импортирует библиотеку CUDA C ++, скомпилированную с использованием NV CC, вызывает функцию CUDA C ++ с использованием библиотеки ctypes Python, а затем выполняет дополнительную обработку на стороне Python ,

Теперь я ищу способ превратить это Python приложение в «живой» API, который отвечает на запросы. Это будет означать, что инициализация CUDA будет происходить один раз, когда вызывается основной процесс Python, и никогда больше, пока процесс Python не будет остановлен, что никогда не должно происходить. Поэтому всякий раз, когда кто-то делает запрос к этому API, функция CUDA / C ++ будет работать быстро, поскольку устройство уже инициализировано.

Каков наилучший подход для создания такого API в Python, который сохраняет инициализация CUDA жива?

Пока у меня есть две идеи:

  1. Я делаю это как часть веб-API (например, Flask / Falcon), где процесс API никогда не умирает, поэтому CUDA всегда жив (верно?)

  2. Я создаю два API-интерфейса, один из которых - веб-API (например, Flask / Falcon), а другой - «фоновый» API, который в основном является своего рода процесса в бесконечном l oop, который слушает запросы от Web API и выполняет всю обработку.

Я ищу советы / мысли по этим идеям:)


Из документации CUDA:

Во время инициализации среда выполнения создает контекст CUDA для каждого устройства в системе (дополнительные сведения о контекстах CUDA см. В разделе Контекст). Этот контекст является основным контекстом для этого устройства, и он используется всеми потоками хоста приложения.

Как я понимаю, это означает, что API времени выполнения создаст контекст, который будет используется для каждого вызова функции CUDA, пока родительский процесс Python жив.

...