вызов времени выполнения cuda после вызова api драйвера, чрезмерные накладные расходы
Я пытался добавить вызов внешней функции cuda (с большим количеством вызовов api времени выполнения) в программу, которая включает только вызов api драйвера cuda, используя отдельную связь, описанную в , в основном компилируйте их в статическую https://developer.nvidia.com/blog/separate-compilation-linking-cuda-device-code /библиотеку и связывайте вместе с программой
Однако, когда я профилирую внешнюю библиотеку, я обнаружил, что первый вызов API-интерфейса среды выполнения, то есть cudamalloc, занимает слишком много времени, так как эта функция вызывается много раз, чрезмерные накладные расходы снижают ее производительность.
Я также проверяю его контекст, контекст времени выполнения совпадает с контекстом api драйвера, поэтому создание нового контекста не требуется, я использую хронограф для профилирования времени.
Простую иллюстрацию можно описать ниже:
cuCtxGetCurrent(¤t_ctx)
//driver current_ctx=0x5641b9aac1a0
checkCudaErrors(cuMemAlloc(&d_C1, 4));
//driver api call time: 6.724us*
cuCtxGetCurrent(¤t_ctx);
//driver current_ctx=0x5641b9aac1a0, same as above
cudaMalloc(&d_D, 4);
//runtime api call time: 5896.57us, great overhead
cuCtxGetCurrent(¤t_ctx);
//runtime current_ctx1=0x5641b9aac1a0 same as above
cudaMalloc(&d_E, 4);
//runtime call2 time: 10.655us, this time the overhead is much less
Первый cudaMalloc занимает много времени. Если это в цикле, накладные расходы значительны.
Любой совет будет принят во внимание.