GPU程序cuda设置

程序中cuda的设置

默认会用 Cuda 0,有时候容易拥堵

device = "cuda:0" if torch.cuda.is_available() else "cpu"
print('device = ', device)
model = net().to(device)

修改方法

一般使用.cuda()或者.to(device),注意device的名字不能直接用数字

而是用torch.device(‘cuda:1’)表示

device = torch.device("cuda:0")
device1 = torch.device("cuda:1") 
for batch_idx, (img, label) in enumerate(train_loader):
 img=img.to(device1)
 label=label.to(device1)

实例化网络

model = Net()
model.to(device) #使用序号为0的GPU
# 或model.to(device1) #使用序号为1的GPU

把tensor改成numpy

measurements, channels, sigma_2 = load_CEdataset(measurement_path, channel_path)
measurements = measurements.to(device)
channels = channels.to(device)
sigma_2 = sigma_2.to(device)

measurements = measurements[0:500,:]
measurements = measurements.cpu().numpy()
channels = channels[0:500,:]
channels = channels.cpu().numpy()
sigma_2 = sigma_2[0:500,:]
sigma_2 = sigma_2.cpu().numpy()

多GPU

假设有4个GPU,其id设置如下

device_ids =[0,1,2,3]
#对数据
input_data=input_data.to(device=device_ids[0])
#对于模型
net = torch.nn.DataParallel(model)
net.to(device)

此时利用某一些gpu来存放数据(分配来做一些事),DataParallel会自动让所有gpu进行参与

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CUDA是一种并行计算平台和编程模型,用于利用GPU进行高性能计算。在CUDA中,可以使用CUDA C/C++编程语言来编写并行程序。压力测试程序是用来测试GPU性能和稳定性的程序,可以通过对GPU进行大量计算任务的并行处理来评估其性能。 以下是一个简单的CUDAGPU压力测试程序的示例: ```cpp #include <stdio.h> // CUDA核函数,每个线程计算一个加法操作 __global__ void addKernel(int *a, int *b, int *c, int n) { int tid = blockIdx.x * blockDim.x + threadIdx.x; if (tid < n) { c[tid] = a[tid] + b[tid]; } } int main() { int n = 1000000; // 数组大小 int *a, *b, *c; // 输入和输出数组 int *d_a, *d_b, *d_c; // 在GPU上分配的输入和输出数组 // 在主机上分配内存 a = (int*)malloc(n * sizeof(int)); b = (int*)malloc(n * sizeof(int)); c = (int*)malloc(n * sizeof(int)); // 在GPU上分配内存 cudaMalloc(&d_a, n * sizeof(int)); cudaMalloc(&d_b, n * sizeof(int)); cudaMalloc(&d_c, n * sizeof(int)); // 初始化输入数组 for (int i = 0; i < n; i++) { a[i] = i; b[i] = i; } // 将输入数组从主机内存复制到GPU内存 cudaMemcpy(d_a, a, n * sizeof(int), cudaMemcpyHostToDevice); cudaMemcpy(d_b, b, n * sizeof(int), cudaMemcpyHostToDevice); // 启动CUDA核函数,每个线程计算一个加法操作 int blockSize = 256; int numBlocks = (n + blockSize - 1) / blockSize; addKernel<<<numBlocks, blockSize>>>(d_a, d_b, d_c, n); // 将输出数组从GPU内存复制到主机内存 cudaMemcpy(c, d_c, n * sizeof(int), cudaMemcpyDeviceToHost); // 验证结果 for (int i = 0; i < n; i++) { if (c[i] != a[i] + b[i]) { printf("Error: incorrect result\n"); break; } } // 释放GPU上的内存 cudaFree(d_a); cudaFree(d_b); cudaFree(d_c); // 释放主机上的内存 free(a); free(b); free(c); return 0; } ``` 这个示例程序使用CUDA C/C++编写,实现了一个简单的向量加法操作。它首先在主机上分配输入和输出数组的内存,然后在GPU上分配相应的内存。接下来,它将输入数组从主机内存复制到GPU内存,并启动CUDA核函数来进行并行计算。最后,它将输出数组从GPU内存复制回主机内存,并验证结果的正确性。最后,释放GPU和主机上的内存。 这个示例程序只是一个简单的压力测试程序,你可以根据自己的需求进行修改和扩展。例如,可以增加更复杂的计算任务,调整数组大小和线程块大小等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值