У меня есть функция Python, которая импортирует библиотеку CUDA C ++, скомпилированную с использованием NV CC, вызывает функцию CUDA C ++ с использованием библиотеки ctypes
Python, а затем выполняет дополнительную обработку на стороне Python ,
Теперь я ищу способ превратить это Python приложение в «живой» API, который отвечает на запросы. Это будет означать, что инициализация CUDA будет происходить один раз, когда вызывается основной процесс Python, и никогда больше, пока процесс Python не будет остановлен, что никогда не должно происходить. Поэтому всякий раз, когда кто-то делает запрос к этому API, функция CUDA / C ++ будет работать быстро, поскольку устройство уже инициализировано.
Каков наилучший подход для создания такого API в Python, который сохраняет инициализация CUDA жива?
Пока у меня есть две идеи:
Я делаю это как часть веб-API (например, Flask / Falcon), где процесс API никогда не умирает, поэтому CUDA всегда жив (верно?)
Я создаю два API-интерфейса, один из которых - веб-API (например, Flask / Falcon), а другой - «фоновый» API, который в основном является своего рода процесса в бесконечном l oop, который слушает запросы от Web API и выполняет всю обработку.
Я ищу советы / мысли по этим идеям:)
Из документации CUDA:
Во время инициализации среда выполнения создает контекст CUDA для каждого устройства в системе (дополнительные сведения о контекстах CUDA см. В разделе Контекст). Этот контекст является основным контекстом для этого устройства, и он используется всеми потоками хоста приложения.
Как я понимаю, это означает, что API времени выполнения создаст контекст, который будет используется для каждого вызова функции CUDA, пока родительский процесс Python жив.