Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pytorch 为什么在Pytork中打印GPU张量的值需要这么长时间?_Pytorch_Nvidia - Fatal编程技术网

Pytorch 为什么在Pytork中打印GPU张量的值需要这么长时间?

Pytorch 为什么在Pytork中打印GPU张量的值需要这么长时间?,pytorch,nvidia,Pytorch,Nvidia,我写了这个pytorch程序来计算GPU上的5000*5000矩阵乘法,100次迭代 import torch import numpy as np import time N = 5000 x1 = np.random.rand(N, N) ######## a 5000*5000 matrix multiplication on GPU, 100 iterations ####### x2 = torch.tensor(x1, dtype=torch.float32).to("

我写了这个pytorch程序来计算GPU上的5000*5000矩阵乘法,100次迭代

import torch
import numpy as np
import time

N = 5000
x1 = np.random.rand(N, N)

######## a 5000*5000 matrix multiplication on GPU, 100 iterations #######
x2 = torch.tensor(x1, dtype=torch.float32).to("cuda:0")

start_time = time.time()
for n in range(100):
    G2 = x2.t() @ x2
print(G2.size())
print("It takes", time.time() - start_time, "seconds to compute")
print("G2.device:", G2.device)

start_time2 = time.time()
# G4 = torch.zeros((5,5),device="cuda:0")
G4 = G2[:5, :5]
print("G4.device:", G4.device)
print("G4======", G4)
# G5=G4.cpu()
# print("G5.device:",G5.device)
print("It takes", time.time() - start_time2, "seconds to transfer or display")
以下是我笔记本电脑上的结果:

火炬尺寸([50005000])

计算需要0.2224395123291016秒

G2.1设备:cuda:0

G4.1设备:cuda:0

G4=张量([1636.31951227.191311252.68711242.45841235.8160], [1227.1913, 1653.0522, 1260.2621, 1246.9526, 1250.2871], [1252.6871, 1260.2621, 1685.1147, 1257.2373, 1266.2213], [1242.4584, 1246.9526, 1257.2373, 1660.5951, 1239.5414], [1235.8160, 1250.2871, 1266.2213, 1239.5414, 1670.0034]], 设备='cuda:0')

传输或显示需要60.13639569282532秒

进程已完成,退出代码为0

我很困惑为什么要花这么多时间在GPU上显示变量G5,因为它的大小只有5*5。 顺便说一句,我使用“G5=G4.cpu()”将GPU上的变量传输到cpu,这也需要很多时间

我的开发环境(相当旧的笔记本电脑):

  • pytorch 1.0.0

  • CUDA 8.0

  • Nvidia GeForce GT 730m

  • Windows 10专业版


当增加迭代次数时,计算时间没有明显增加,但传输或显示明显增加,为什么?有人能解释吗,非常感谢。

Pytorch CUDA操作是异步的。在请求导出结果之前,GPU张量上的大多数操作实际上是非阻塞的。这意味着,在您要求使用CPU版本的张量之前,像矩阵乘法这样的命令基本上是与您的代码并行处理的。当您停止计时器时,无法保证操作已完成。你可以阅读更多关于这方面的内容


要正确计时代码块,您应该将调用添加到。这个函数应该调用两次,一次在启动计时器之前,一次在停止计时器之前。在分析代码之外,您应该避免调用此函数,因为它可能会降低总体性能。

Pytorch CUDA操作是异步的。在请求导出结果之前,GPU张量上的大多数操作实际上是非阻塞的。这意味着,在您要求使用CPU版本的张量之前,像矩阵乘法这样的命令基本上是与您的代码并行处理的。当您停止计时器时,无法保证操作已完成。你可以阅读更多关于这方面的内容


要正确计时代码块,您应该将调用添加到。这个函数应该调用两次,一次在启动计时器之前,一次在停止计时器之前。在分析代码之外,您应该避免调用此函数,因为它可能会降低整体性能。

检查此检查此检查是指在我的代码循环中计算尚未完成,直到显示结果或将值从GPU复制到CPU为止,是的,这就是它的意思。这意味着计算在我的代码循环中还没有完成,直到显示结果或将值从GPU复制到CPU为止,是的,这就是它的意思。