Я использую последнюю версию CUDA 5.5, а новый CUBLAS имеет состояние, при котором каждая функция нуждается в cublasHandle_t
, например.Должны ли мы повторно использовать cublasHandle_t для разных вызовов?
cublasHandle_t handle;
cublasCreate_v2(&handle);
cublasDgemm_v2(handle, A_trans, B_trans, m, n, k, &alpha, d_A, lda, d_B, ldb, &beta, d_C, ldc);
cublasDestroy_v2(handle);
это хорошая практика, чтобы повторно использовать эту ручку экземпляра как можно больше, как какие-то Session
или влияние на производительности будет настолько мало, что имеет смысл снизить сложность коды, имея короткоживущую ручку и, следовательно, создавать/уничтожать его непрерывно?
Создание или разрушение нескольких дескрипторов cuBLAS может нарушить параллелизм с помощью ненужных контекстных синхронизаций. – JackOLantern
Кроме того, из руководства пользователя библиотеки cuBLAS, '' cublasCreate() '[...] выделяет аппаратные ресурсы на хосте", поэтому, возможно, есть некоторые накладные расходы на его вызов. – JackOLantern
Стоит также скопировать это из документации: _ «Поскольку cublasCreate выделяет некоторые внутренние ресурсы и выпуск этих ресурсов, вызывая cublasDestroy, будет неявно вызывать cublasDeviceSynchronize, рекомендуется свести к минимуму количество событий cublasCreate/cublasDestroy." _ – Allan