为什么我的GPU在矩阵运算中比CPU慢?

CPU: i7-9750 @2.6GHz (配备16G DDR4 内存); GPU: Nvidia Geforce GTX 1600 TI (6G); 操作系统: Windows 10-64位

我尝试比较GPU在基本矩阵运算中的速度与CPU的速度,并基本遵循了这个https://towardsdatascience.com/heres-how-to-use-cupy-to-make-numpy-700x-faster-4b920dda1f56。以下是我非常简单的代码

import numpy as npimport cupy as cpimport time### Numpy and CPUs = time.time()A = np.random.random([10000,10000]); B = np.random.random([10000,10000])CPU = np.matmul(A,B); CPU *= 5e = time.time()print(f'CPU time: {e - s: .2f}')### CuPy and GPUs = time.time()C= cp.random.random([10000,10000]); D = cp.random.random([10000,10000])GPU = cp.matmul(C,D); GPU *= 5cp.cuda.Stream.null.synchronize()  # to let the code finish executing on the GPU before calculating the timee = time.time()print(f'GPU time: {e - s: .2f}')

讽刺的是,结果显示CPU 时间: 11.74GPU 时间: 12.56

这让我很困惑。为什么GPU在大规模矩阵运算中竟然比CPU还慢?请注意,我甚至还没有应用并行计算(我是一个初学者,我不确定系统是否会为我开启)。我确实查看了类似的问题,例如为什么我的CPU在矩阵运算中比GPU快?。但在这里我使用的是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、进行矩阵乘法和标量乘法,总共不到一秒钟的时间

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注