如何称呼;cudaDeviceSetSharedMemConfig“;及;cudaDeviceSetCacheConfig“;

如何称呼;cudaDeviceSetSharedMemConfig“;及;cudaDeviceSetCacheConfig“;,cuda,Cuda,我正在尝试优化GTX1080上cuda代码的共享内存。为此,我想通过调用以下命令更改共享内存库宽度和缓存配置: cudaDeviceSetSharedMemConfig(cudaSharedMemBankSizeEightByte) 及 我在哪里调用这些函数?目前,我在一个主机函数中调用它们,该函数使用“cudaLaunchCooperativeKernel”调用一个全局函数: template< ... > bool launch_dualBlock(...){ ...

我正在尝试优化GTX1080上cuda代码的共享内存。为此,我想通过调用以下命令更改共享内存库宽度和缓存配置:

cudaDeviceSetSharedMemConfig(cudaSharedMemBankSizeEightByte)

我在哪里调用这些函数?目前,我在一个主机函数中调用它们,该函数使用“cudaLaunchCooperativeKernel”调用一个全局函数:

template< ... > bool launch_dualBlock(...){
    ...  
    gpuErrChk(cudaDeviceSetSharedMemConfig(cudaSharedMemBankSizeEightByte));
    gpuErrChk(cudaDeviceSetCacheConfig(cudaFuncCachePreferShared)); 
    ...
    cudaLaunchCooperativeKernel( (void*)nv_wavenet_dualBlock<...>, grid, block ... )
}
template<…>bool-launch\u-dualBlock(…){
...  
gpuErrChk(cudaDeviceSetSharedMemConfig(cudaSharedMemBankSizeEightByte));
gpuerchk(cudaDeviceSetCacheConfig(cudaFuncCachePreferShared));
...
cudaLaunchCooperativeKernel((void*)nv_wavenet_dualBlock,grid,block…)
}
nv_wavenet_双块的定义为:

template< ... > __global__ void nv_wavenet_dualBlock( ... ){
    nv_wavenet_dualBlock_A< ... >( ... );
    return;
}
template<…>\uuuuuuuuuuuuuuuuu全局\uuuuuuuuuuu无效nv\uWaveNet\u双块(…){
nv_wavenet_dualBlock_A<…>(…);
返回;
}
nv_wavenet_dualBlock_A是一种设备功能

但是,这两个函数调用似乎没有任何作用,因为当我在调用这两个函数后打印共享内存和缓存配置时,打印的值表明没有任何更改。此外,我检查了这两个函数的返回值,它们都是成功的


非常感谢您的帮助。

这些函数调用对Maxwell或Pascal系列中的GPU都没有任何影响

这在有关的文档中有所介绍

而且

Maxwell和Pascal设备不支持8字节银行模式

Maxwell和Pascal设备具有不同的缓存设计,因此L1和共享内存不再是同一功能单元的一部分。因此,L1和缓存之间不存在“拆分”,也不需要/不影响设置首选项

template< ... > __global__ void nv_wavenet_dualBlock( ... ){
    nv_wavenet_dualBlock_A< ... >( ... );
    return;
}