torch.cuda.synchronize()

转自:(17条消息) torch.cuda.synchronize()_桃汽宝的博客-CSDN博客_torch.cuda.synchronize()
def time_synchronized():
    # pytorch-accurate time
    if torch.cuda.is_available():
        torch.cuda.synchronize()
    return time.time()

测试时间的代码

代码1

start = time.time()
result = model(input)
end = time.time()

代码2

torch.cuda.synchronize()
start = time.time()
result = model(input)
torch.cuda.synchronize()
end = time.time()

代码2是正确的。因为在pytorch里面,程序的执行都是异步的。
如果采用代码1,测试的时间会很短,因为执行完end=time.time()程序就退出了,后台的cu也因为python的退出退出了。
如果采用代码2,代码会同步cu的操作,等待gpu上的操作都完成了再继续成形end = time.time()

代码3

start = time.time()
result = model(input)
print(result)
end = time.time()

如果将代码1改为代码3 ,代码3和代码2的时间是类似的。
因为代码3会等待gpu上的结果执行完传给print函数,所以时间就和代码2同步的操作的时间基本上是一致的了。
将print(result)换成result.cpu()结果是一致的。

你可能感兴趣的:(深度学习,pytorch,python)