欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-02 11:05:52
对基于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()部分:首先...

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

介绍

今天做了一个在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下的计算时间:
对基于Matlab和cupy的GPU计算速度的比较

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