#include <cuda_runtime.h>
#include <iostream>
int main() {
cudaError_t err;
int device_id = 0; // 使用设备 0
// 设置当前设备
err = cudaSetDevice(device_id);
if (err != cudaSuccess) {
std::cerr << "Failed to set device: " << cudaGetErrorString(err) << std::endl;
return -1;
}
// 获取设备属性
cudaDeviceProp deviceProp;
err = cudaGetDeviceProperties(&deviceProp, device_id);
if (err != cudaSuccess) {
std::cerr << "Failed to get device properties: " << cudaGetErrorString(err) << std::endl;
return -1;
}
std::cout << "Device Name: " << deviceProp.name << std::endl;
std::cout << "Compute Capability: " << deviceProp.major << "." << deviceProp.minor << std::endl;
// 检查设备是否支持更改共享内存 bank 大小
if (deviceProp.major >= 2) {
// 设置共享内存 bank 大小为 8 字节
err = cudaDeviceSetSharedMemConfig(cudaSharedMemBankSizeEightByte);
if (err != cudaSuccess) {
std::cerr << "Failed to set shared memory configuration: " << cudaGetErrorString(err) << std::endl;
return -1;
}
// 查询共享内存 bank 大小
cudaSharedMemConfig config;
err = cudaDeviceGetSharedMemConfig(&config);
if (err != cudaSuccess) {
std::cerr << "Failed to get shared memory configuration: " << cudaGetErrorString(err) << std::endl;
return -1;
}
// 打印共享内存 bank 大小
switch (config) {
case cudaSharedMemBankSizeDefault:
std::cout << "Shared memory bank size: Default" << std::endl;
break;
case cudaSharedMemBankSizeFourByte:
std::cout << "Shared memory bank size: 4 bytes" << std::endl;
break;
case cudaSharedMemBankSizeEightByte:
std::cout << "Shared memory bank size: 8 bytes" << std::endl;
break;
default:
std::cout << "Unknown shared memory bank size" << std::endl;
}
}
else {
std::cerr << "Device does not support changing shared memory bank size" << std::endl;
}
// 重置设备
cudaDeviceReset();
return 0;
}
When I tried to change the width of the bank to 8 bytes, it didn’t work?
Device Name: NVIDIA GeForce GTX 1650 Ti with Max-Q Design
Compute Capability: 7.5
Shared memory bank size: 4 bytes