python用cuda之后快到起飞
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之后快到起飞相关推荐
- C++、python、CUDA性能分析--矩阵乘法
网上看到一个分析python.Numpy.C++.cuda.cuBLAS做矩阵运算性能的帖子,我觉得非常好.所以,就自己动手实测了一下.这才有了这篇文章.就算是给需要的朋友做个参考吧. ******* ...
- 中文领域最详细的Python版CUDA入门教程
本系列为英伟达GPU入门介绍的第二篇,主要介绍CUDA编程的基本流程和核心概念,并使用Python Numba编写GPU并行程序.为了更好地理解GPU的硬件架构,建议读者先阅读我的第一篇文章. GPU ...
- c+和python哪个快-python比c更快
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python的优点是代码可重用性高和开发速度快,但是时间和内存的使用不如c++. ...
- 宝塔面板网站一打开cpu百分百_BT宝塔面板打开这个功能网站快到起飞,降低宝塔面板内存和CPU使用率,降低运行负载...
最近一段时间网站经常出现链接数据库错误,当然原因很简单,卡着了.查看宝塔面板发现负载状态经常是100%,内存使用率也是100%,CPU也不用说了,所以在网上查找了一些关于降低宝塔面板服务器内存和CPU ...
- python创建一个json_如何为Python选择一个更快的JSON库
使用JSON越多, 你就越有可能遇到JSON编码或解码瓶颈.Python的内置库也不错, 但是还有多个更快的JSON库可用: 如何选择使用哪一个呢? 事实是,没有一个正确的答案,没有一个最快的JSON ...
- [Python+Anaconda] 查看Python、Anaconda下python、CUDA、函数库的版本
查看Python.Anaconda下Python.CUDA.函数库的版本 前言 第三方库(比如Pytorch)要依赖Python版本,CUDA版本,对于不同的版本组合,会有不同的安装命令. 这就要求我 ...
- python移动图形工作站_让Python跑得更快
原标题:让Python跑得更快 点击关注 异步图书,置顶公众号 每天与你分享 IT好书 技术干货 职场知识 Tips 参与文末话题讨论,即有机会获得异步图书一本. Python很容易学.你之所以阅读本 ...
- python读csv最快方法_python读有汉字的csv如何让python变得更快?
Python和其他脚本语言通常会被摒弃,因为它们相对于一些类似于C语言的编译型的语言来说效率很低.比如下面的斐波纳契数的例子: C语言中:int fib(int n){ if (n < 2) r ...
- Python爬虫-爬取快看漫画网图片并拼接成漫画长图
Python爬虫-爬取快看漫画网图片并拼接成漫画长图 1.爬取图片 2.拼接图片 1.爬取图片 import os import requests from bs4 import BeautifulS ...
最新文章
- andorid 全部对话框
- uva 610(割边)
- VS如何更改项目类型?
- python引用传递的区别_python的值类型和引用类型及值传递和引用传递的区别
- 启用了不安全的HTTP方法
- (转)SQL Server:在 SQL Server 2005 中配置数据库邮件,发送邮件
- windows10 C盘清理
- 有关分库分表你想知道的,都在这儿了
- java 托盘开发_基于java开发之系统托盘的应用
- 【codevs2485】七夕祭(贪心,环形纸牌均分)
- 音频格式转换器哪个好,推荐几款免费的mp3格式转换器
- 计算机读不出光盘,光驱读不出光盘,小编教你电脑光盘不能被识别怎么解决
- Pumpkin Raising Walk Through
- 旧机还在换盆?! Linux deploy让她再发光!
- 计算机基础知识实验内容及步骤,计算机基础实验报告要点.doc
- 计算机网络——移动IP
- CCNA,CCNP,CCIE是什么?
- ansible使用之——网络设备自动巡检
- ng Baidu Baidu Baidu ang
- linux 16中文输入法,ubuntu 16.04 下安装并切换搜狗中文输入法