Как я могу определить, является ли контекст CUDA основным - дешево?
Вы можете (?) Определить, является ли контекст CUDA основным, вызвав cuDevicePrimaryCtxRetain()
и сравнивая возвращенный указатель с имеющимся у вас контекстом. Но - что, если первичный контекст еще никто не создал? Тогда есть ли более дешевый способ получить отрицательный ответ? Или - не может ли неосновной контекст существовать, в то время как основной нет?
1 ответ
Вы можете проверить, был ли создан первичный контекст («активирован») или нет:
inline bool primary_context_is_active(int device_id)
{
unsigned flags;
int is_active;
CUresult status = cuDevicePrimaryCtxGetState(device_id, &flags, &is_active);
if (status != CUDA_SUCCESS) { /* error handling here */ }
return is_active;
}
Теперь, если основной контекст не активен, вы знаете, что ваш контекст не является основным; если он активен , вы можете использовать
Это, конечно, зависит от предположения, что ваш контекст не является недопустимым первичным дескриптором контекста после деактивации.