为什么numpy的执行时间比cupy快?
我在玩弄numpy和cupy之间的差异,并注意到在我创建的这两个类似程序中,cupy版本的速度要慢得多,尽管它是在GPU上运行的 以下是numpy版本:为什么numpy的执行时间比cupy快?,numpy,cupy,Numpy,Cupy,我在玩弄numpy和cupy之间的差异,并注意到在我创建的这两个类似程序中,cupy版本的速度要慢得多,尽管它是在GPU上运行的 以下是numpy版本: import time import numpy as np size = 5000 upperBound = 20 dataSet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" dataLength = np.random.randint(0, high=
import time
import numpy as np
size = 5000
upperBound = 20
dataSet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
dataLength = np.random.randint(0, high=upperBound, size=size, dtype='l')
randomNumber = np.random.randint(0, high=62, size=size * upperBound, dtype='l')
count = 0
dataCount = 0
start_time = time.time()
for i in range(size):
lineData = ""
for j in range(dataLength[i]):
lineData = lineData + dataSet[randomNumber[count]]
count = count + 1
print(lineData)
dataCount = dataCount + 1
time = str(time.time() - start_time)
print("------------------------\n" + "It took this many sedonds: " + time)
print("There were " + str(dataCount) + " many data generations.")
这是丘比特的版本:
import time
import cupy as cp
size = 5000
upperBound = 20
dataSet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
dataLength = cp.random.randint(0, high=upperBound, size= size,dtype='l')
randomNumber = cp.random.randint(0, high=62, size= upperBound * size,dtype='l')
count = 0
dataCount = 0
start_time = time.time()
for i in range(size):
lineData = ""
for j in range(int(dataLength[i])):
lineData = lineData + str(dataSet[int(randomNumber[count])])
count = count + 1
print(lineData)
dataCount = dataCount + 1
time = str(time.time() - start_time)
print("-------------------\n" +"It took this many seconds: " + time)
print("There were " + str(dataCount) + " many data generations.")
除了一个使用numpy,另一个使用cupy之外,它们本质上是相同的代码。我原以为cupy会因为GPU的使用而执行得更快,但事实并非如此。numpy的运行时间为:0.032。而cupy的运行时间为:0.484
我在这段代码中看不到用户定义的内核,因此它没有使用GPU进行任何重要的矩阵计算。因此,数据进出GPU的延迟和类型转换可能占主导地位。这是有道理的。非常感谢。为了从答案中澄清,这段代码在GPU上所做的唯一工作就是创建随机整数。其他一切都在CPU上,只需执行许多小操作即可将数据从GPU复制到CPU。