为什么我的 GPU 在矩阵运算中比 CPU 慢?
Why is my GPU slower than CPU in matrix operations?
CPU:i7-9750 @2.6GHz(带 16G DDR4 内存);显卡:英伟达Geforce GTX 1600 TI (6G); OS: Windows 10-64 位
我试了一下GPU做基本矩阵运算的速度和CPU对比,基本是按照这个https://towardsdatascience.com/heres-how-to-use-cupy-to-make-numpy-700x-faster-4b920dda1f56。以下是我超级简单的代码
import numpy as np
import cupy as cp
import time
### Numpy and CPU
s = time.time()
A = np.random.random([10000,10000]); B = np.random.random([10000,10000])
CPU = np.matmul(A,B); CPU *= 5
e = time.time()
print(f'CPU time: {e - s: .2f}')
### CuPy and GPU
s = time.time()
C= cp.random.random([10000,10000]); D = cp.random.random([10000,10000])
GPU = cp.matmul(C,D); GPU *= 5
cp.cuda.Stream.null.synchronize()
# to let the code finish executing on the GPU before calculating the time
e = time.time()
print(f'GPU time: {e - s: .2f}')
具有讽刺意味的是,它表明
CPU时间:11.74
GPU 时间:12.56
这真让我困惑。在大型矩阵运算上,GPU 怎么可能比 CPU 还要慢?请注意,我什至没有应用并行计算(我是初学者,我不确定系统是否会为我打开它。)我确实检查过类似的问题,例如。但在这里我使用 cupy 而不是 mxnet (cupy 较新,专为 GPU 计算而设计)。
有人可以帮忙吗?非常感谢!
numpy random 默认生成浮点数(32 位)。 Cupy random 默认生成 64 位(双精度)。要进行同类比较,请像这样更改 GPU 随机数生成:
C= cp.random.random([10000,10000], dtype=cp.float32)
D = cp.random.random([10000,10000], dtype=cp.float32)
我的硬件(CPU 和 GPU)与您不同,但是一旦进行此更改,GPU 版本比 cpu 版本快 12 倍。使用 cupy 生成随机数的 ndarray,矩阵乘法和标量乘法总共不到一秒
CPU:i7-9750 @2.6GHz(带 16G DDR4 内存);显卡:英伟达Geforce GTX 1600 TI (6G); OS: Windows 10-64 位
我试了一下GPU做基本矩阵运算的速度和CPU对比,基本是按照这个https://towardsdatascience.com/heres-how-to-use-cupy-to-make-numpy-700x-faster-4b920dda1f56。以下是我超级简单的代码
import numpy as np
import cupy as cp
import time
### Numpy and CPU
s = time.time()
A = np.random.random([10000,10000]); B = np.random.random([10000,10000])
CPU = np.matmul(A,B); CPU *= 5
e = time.time()
print(f'CPU time: {e - s: .2f}')
### CuPy and GPU
s = time.time()
C= cp.random.random([10000,10000]); D = cp.random.random([10000,10000])
GPU = cp.matmul(C,D); GPU *= 5
cp.cuda.Stream.null.synchronize()
# to let the code finish executing on the GPU before calculating the time
e = time.time()
print(f'GPU time: {e - s: .2f}')
具有讽刺意味的是,它表明 CPU时间:11.74 GPU 时间:12.56
这真让我困惑。在大型矩阵运算上,GPU 怎么可能比 CPU 还要慢?请注意,我什至没有应用并行计算(我是初学者,我不确定系统是否会为我打开它。)我确实检查过类似的问题,例如
有人可以帮忙吗?非常感谢!
numpy random 默认生成浮点数(32 位)。 Cupy random 默认生成 64 位(双精度)。要进行同类比较,请像这样更改 GPU 随机数生成:
C= cp.random.random([10000,10000], dtype=cp.float32)
D = cp.random.random([10000,10000], dtype=cp.float32)
我的硬件(CPU 和 GPU)与您不同,但是一旦进行此更改,GPU 版本比 cpu 版本快 12 倍。使用 cupy 生成随机数的 ndarray,矩阵乘法和标量乘法总共不到一秒