对基于Matlab和cupy的GPU计算速度的比较

    • 介绍
    • Matlab的gpuArray()部分:
    • Python的cupy部分:
    • 结论分析
  • 附加

介绍

今天做了一个在Matlab环境下和python环境下的GPU运行速度比较,其中Matlab使用了gpuArray(),而Python使用的是cupy库,运算任务是对一组size=(10000,1024,4,4)和一组size=(10000,1024,4,1)的double数组进行若干次点乘运算,话不多说我们直接看结果吧!

Matlab的gpuArray()部分:

首先我们先循环20次。
Matlab代码:

clc;clear;
x=rand(10000,1024,4,4)*1024.;
y=rand(10000,1024,4,1)*512.3254;

x=gpuArray(x);
y=gpuArray(y);
tic
for i=1:20
    z=x.*y;
end
toc

x=rand(10000,1024,4,4)*1024.;
y=rand(10000,1024,4,1)*512.3254;

tic
for i=1:20
    z=x.*y;
end
toc

clear

结果分别为GPU和CPU下的计算时间:

Python的cupy部分:

同样循环运行20次。
python代码:

import numpy as np
import cupy as cp
import time

x=cp.random.random(size=(10000,1024,4,4))*1024.
y=cp.random.random(size=(10000,1024,4,1))*512.3254
time1=time.time()
for i in range(20):
    z=x*y
print('average time for 20 times gpu:',time.time()-time1)

x=np.random.random(size=(10000,1024,4,4))*1024.
y=np.random.random(size=(10000,1024,4,1))*512.3254
time1=time.time()
for i in range(20):
    z=x*y
print('average time for 20 times cpu:',time.time()-time1)

结果分别为cupy下GPU和CPU下的计算时间:

runfile('C:/Users/Liushl/.spyder-py3/temp.py', wdir='C:/Users/Liushl/.spyder-py3')
average time for 20 times gpu: 0.11713743209838867
average time for 20 times cpu: 18.07845187187195

结论分析

所以到这看起来好像Matlab在用cpu计算上比python快,而用gpu的话,两者相差无几。

附加

你以为到这里就结束了?Too naive young man!无聊的博主把循环次数提升了一下,竟然有惊人的发现!
首先我们把Matlab的循环次数提升一下试试(后面只展示GPU计算速度):
Matlab:

首先Cycle 100次:
历时 0.083524 秒。
Cycle 500次:
历时 0.085372 秒。
Cycle 1000次:
历时 0.089123 秒。

大家是不是:???

经过博主多次测试,

Cycle 1e4次:
历时 0.202748 秒。
Cycle 1e5次:
历时 1.250245 秒。
Cycle 1e6次:
历时 11.663975 秒。

Python:

Cycle 100次:
time for 100 times gpu: 0.11510443687438965
Cycle 500次:
time for 500 times gpu: 0.11411237716674805
Cycle 1000次:
time for 1000 times gpu: 0.12411379814147949
Cycle 1e4次:
time for 10000 times gpu: 118.04505109786987

后面耗时太长了就不测了。。
发现python用cupy随循环次数计算耗时有一个陡增,而matlab没有,应该是matlab可以调用共享gpu内存,以及一些不可告人的优化 \滑稽

今天的分享就这些,祝大家天天增长奇怪的知识!

本文地址:https://blog.csdn.net/weixin_45864655/article/details/110427277