cupy我觉得可以理解为cuda for numpy,安装方式pip install cupy,假设

import numpy as np
import cupy as cp

那么对于np.XXX一般可以直接替代为cp.XXX

其实numpy已经够快了,毕竟是C写的,每次运行的时候都会尽其所能地调用系统资源。为了验证这一点,我们可以用矩阵乘法来测试一下:在形式上通过多线程并发、多进程并行以及单线程的方式,来比较一下numpy的速度和对资源的调度情况,代码为

# th_pr_array.py
from threading import Thread
from multiprocessing import Process
from time import time as Now
import numpy as np
import sysN = 3000def MatrixTest(n,name,t):x = np.random.rand(n,n)x = x@xprint(f"{name} @ {t} : {Now()-t}")def thTest():t = Now()for i in range(5):Thread(target=MatrixTest,args=[N,f'th{i}',t]).start()def prTest():t = Now()for i in range(5):Process(target=MatrixTest,args=[N,f'pr{i}',t]).start()if __name__=="__main__":if sys.argv[1]=="th":thTest()elif sys.argv[1]=="pr":prTest()else:t = Now()for i in range(5):MatrixTest(N,"single",t)

运行结果非常戏剧性,用了多线程的,耗时19.09s;用了多进程的耗时4.7s;而啥也没用的,只用了2.1s。

所以说在numpy中就别用python内置的并行和并发了,反而会称为累赘。而且这么一比更会印证numpy的强大性能。

但在cupy面前,这个速度会显得十分苍白,下面连续5次创建5000x5000的随机矩阵并进行矩阵乘法,

#np_cp.py
import numpy as np
import cupy as cp
import sys
from time import time as NowN = 5000def testNp(t):for i in range(5):x = np.random.rand(N,N)x = x@xprint(f"np:{Now()-t}")def testCp(t):for i in range(5):x = cp.random.rand(N,N)x = x@xprint(f"cp:{Now()-t}")if __name__ == "__main__":t = Now()if sys.argv[1] == 'np':testNp(t)elif sys.argv[1]=='cp':testCp(t)

最后的结果是

(base) E:\Documents\00\1108>python np_cp.py np
np:8.914457082748413(base) E:\Documents\00\1108>python np_cp.py cp
cp:0.545649528503418

而且非常霸道的是,当矩阵维度从5000x5000升到15000x15000后,cupy的计算时间并没有什么变化,充其量是线性增长,毕竟只要缓存吃得下,无论多么大的矩阵,乘法数也无非是按行或者按列增加而已。

附:测试函数的输出结果

(base) E:\Documents\00\1108>python th_pr_numpy.py th
th0 @ 1636357422.3703225 : 15.23965334892273
th1 @ 1636357422.3703225 : 17.726242780685425
th2 @ 1636357422.3703225 : 19.001763582229614
th3 @ 1636357422.3703225 : 19.06676197052002
th4 @ 1636357422.3703225 : 19.086761951446533

(base) E:\Documents\00\1108>python th_pr_numpy.py pr
pr3 @ 1636357462.4170427 : 4.031360864639282
pr0 @ 1636357462.4170427 : 4.55387806892395
pr1 @ 1636357462.4170427 : 4.590881824493408
pr4 @ 1636357462.4170427 : 4.674877643585205
pr2 @ 1636357462.4170427 : 4.702877759933472

(base) E:\Documents\00\1108>python th_pr_numpy.py single
single @ 1636357567.8899782 : 0.36359524726867676
single @ 1636357567.8899782 : 0.8137514591217041
single @ 1636357567.8899782 : 1.237830400466919
single @ 1636357567.8899782 : 1.683635950088501
single @ 1636357567.8899782 : 2.098794937133789

python用cuda之后快到起飞相关推荐

  1. C++、python、CUDA性能分析--矩阵乘法

    网上看到一个分析python.Numpy.C++.cuda.cuBLAS做矩阵运算性能的帖子,我觉得非常好.所以,就自己动手实测了一下.这才有了这篇文章.就算是给需要的朋友做个参考吧. ******* ...

  2. 中文领域最详细的Python版CUDA入门教程

    本系列为英伟达GPU入门介绍的第二篇,主要介绍CUDA编程的基本流程和核心概念,并使用Python Numba编写GPU并行程序.为了更好地理解GPU的硬件架构,建议读者先阅读我的第一篇文章. GPU ...

  3. c+和python哪个快-python比c更快

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python的优点是代码可重用性高和开发速度快,但是时间和内存的使用不如c++. ...

  4. 宝塔面板网站一打开cpu百分百_BT宝塔面板打开这个功能网站快到起飞,降低宝塔面板内存和CPU使用率,降低运行负载...

    最近一段时间网站经常出现链接数据库错误,当然原因很简单,卡着了.查看宝塔面板发现负载状态经常是100%,内存使用率也是100%,CPU也不用说了,所以在网上查找了一些关于降低宝塔面板服务器内存和CPU ...

  5. python创建一个json_如何为Python选择一个更快的JSON库

    使用JSON越多, 你就越有可能遇到JSON编码或解码瓶颈.Python的内置库也不错, 但是还有多个更快的JSON库可用: 如何选择使用哪一个呢? 事实是,没有一个正确的答案,没有一个最快的JSON ...

  6. [Python+Anaconda] 查看Python、Anaconda下python、CUDA、函数库的版本

    查看Python.Anaconda下Python.CUDA.函数库的版本 前言 第三方库(比如Pytorch)要依赖Python版本,CUDA版本,对于不同的版本组合,会有不同的安装命令. 这就要求我 ...

  7. python移动图形工作站_让Python跑得更快

    原标题:让Python跑得更快 点击关注 异步图书,置顶公众号 每天与你分享 IT好书 技术干货 职场知识 Tips 参与文末话题讨论,即有机会获得异步图书一本. Python很容易学.你之所以阅读本 ...

  8. python读csv最快方法_python读有汉字的csv如何让python变得更快?

    Python和其他脚本语言通常会被摒弃,因为它们相对于一些类似于C语言的编译型的语言来说效率很低.比如下面的斐波纳契数的例子: C语言中:int fib(int n){ if (n < 2) r ...

  9. Python爬虫-爬取快看漫画网图片并拼接成漫画长图

    Python爬虫-爬取快看漫画网图片并拼接成漫画长图 1.爬取图片 2.拼接图片 1.爬取图片 import os import requests from bs4 import BeautifulS ...

最新文章

  1. andorid 全部对话框
  2. uva 610(割边)
  3. VS如何更改项目类型?
  4. python引用传递的区别_python的值类型和引用类型及值传递和引用传递的区别
  5. 启用了不安全的HTTP方法
  6. (转)SQL Server:在 SQL Server 2005 中配置数据库邮件,发送邮件
  7. windows10 C盘清理
  8. 有关分库分表你想知道的,都在这儿了
  9. java 托盘开发_基于java开发之系统托盘的应用
  10. 【codevs2485】七夕祭(贪心,环形纸牌均分)
  11. 音频格式转换器哪个好,推荐几款免费的mp3格式转换器
  12. 计算机读不出光盘,光驱读不出光盘,小编教你电脑光盘不能被识别怎么解决
  13. Pumpkin Raising Walk Through
  14. 旧机还在换盆?! Linux deploy让她再发光!
  15. 计算机基础知识实验内容及步骤,计算机基础实验报告要点.doc
  16. 计算机网络——移动IP
  17. CCNA,CCNP,CCIE是什么?
  18. ansible使用之——网络设备自动巡检
  19. ng Baidu Baidu Baidu ang
  20. linux 16中文输入法,ubuntu 16.04 下安装并切换搜狗中文输入法

热门文章

  1. hibernate中的hql语句,字符串时间范围筛选处理
  2. matlab 设置网格线为虚线
  3. Excel常用用特殊符号输入快捷键__2020.02.29
  4. Android高级控件
  5. 网络适配器如何设置?
  6. DELL Latitude 3400进入BIOS
  7. 使用Advanced Installer 打包Revit插件
  8. 移动开发实践项目:仿美柚界面基于Android的女性生理期管理APP
  9. 自己总结的web前端的jquery面试题
  10. 攻防世界之miscmisc