Значение cuCtxGetApiVersion отличается от других вызовов управления версиями - PullRequest
0 голосов
/ 02 апреля 2019

Я использую следующий код:

cuCtxCreate(&context, CU_CTX_SCHED_YIELD, device);

int driverVersion = -1;
int driverVersionRt = -1;
int rtVersion = -1;
unsigned int ctxVersion = 1;

cuDriverGetVersion(&driverVersion);
cudaDriverGetVersion(&driverVersionRt);
cudaRuntimeGetVersion(&rtVersion);
cuCtxGetApiVersion(context, &ctxVersion);

std::cout << "cuDriverGetVersion: " << driverVersion << std::endl;
std::cout << "cudaDriverGetVersion: " << driverVersionRt << std::endl;
std::cout << "cudaRuntimeGetVersion: " << rtVersion << std::endl;
std::cout << "cuCtxGetApiVersion: " << ctxVersion << std::endl;

Вот вывод:

cuDriverGetVersion: 10010
cudaDriverGetVersion: 10010
cudaRuntimeGetVersion: 10000
cuCtxGetApiVersion: 3020

Из документации видно, что cudaDriverGetVersion, cuDriverGetVersioncudaRuntimeGetVersion возвращаемые значения формы (1000 * мажор + 10 * минор).В документации не указано, что cuCtxGetApiVersion должно возвращать, но я предполагаю, что оно должно совпадать с тремя другими функциями.

Мой вопрос: почему номер версии для контекста 3020, когда все остальные?используя 10000 и 10010?Это так и должно быть?

У меня возникла еще одна проблема, из-за которой создаваемые мною новые потоки должны обмениваться своим контекстом вручную, в противном случае я получаю ошибку 201 (недопустимый контекст).Это странно, потому что я знаю, что в CUDA 4.0 все процессы имеют один контекст на устройство на процесс.Поэтому мне не нужно устанавливать контекст для новых потоков, которые я создаю в рамках того же процесса.Поскольку cuCtxGetApiVersion производит 3020, это заставляет меня поверить, что созданный мною контекст использует старую неверную версию, которая не будет функционировать для совместного использования между потоками.

Возможно ли это?

1 Ответ

0 голосов
/ 08 апреля 2019

Оказывается, что cuCtxGetApiVersion работал правильно.

Этот ответ помог мне понять, что происходит.Мой cuCtxGetApiVersion использовал "v2".Контекстная версия является обновленной, хотя она выглядит старой.

Что касается моего второго вопроса, я обнаружил, что поведение, которое я получаю, следует ожидать.Ранее я передавал потоки для выполнения асинхронных вызовов, но я играл с синхронными вызовами, где поток не указан.Новые созданные потоки не будут иметь связанный с ними контекст.

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