Я пытаюсь оптимизировать разделяемую память для кода cuda на GTX 1080. Для этого я хочу изменить ширину банка разделяемой памяти и конфигурацию кеша, вызвав:
cudaDeviceSetSharedMemConfig(cudaSharedMemBankSizeEightByte)
и
cudaDeviceSetCacheConfig(cudaFuncCachePreferShared)
Где я могу вызвать эти функции? В настоящее время я вызываю их в функции хоста, которая использует "cudaLaunchCooperativeKernel для вызова глобальной функции:
template< ... > bool launch_dualBlock(...){
...
gpuErrChk(cudaDeviceSetSharedMemConfig(cudaSharedMemBankSizeEightByte));
gpuErrChk(cudaDeviceSetCacheConfig(cudaFuncCachePreferShared));
...
cudaLaunchCooperativeKernel( (void*)nv_wavenet_dualBlock<...>, grid, block ... )
}
Определение nv_wavenet_dualBlock:
template< ... > __global__ void nv_wavenet_dualBlock( ... ){
nv_wavenet_dualBlock_A< ... >( ... );
return;
}
и nv_wavenet_dualBlock_A - это функция устройства.
Однако два вызова функций, похоже, ничего не делают, потому что когда я печатаю общую память и конфигурацию кэша после вызова двух функций, напечатанные значения указывают, что ничего не изменилось. Кроме того, я проверяю возвращаемое значение двух функций, и они обе cudaSuccess.
Буду очень признателен за вашу помощь.