python 详解如何使用GPU大幅提高效率

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 sys

N = 3000

def MatrixTest(n,name,t):
    x = np.random.rand(n,n)
    x = x@x
    print(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)

运行结果为

(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

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

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

#np_cp.py
import numpy as np
import cupy as cp
import sys
from time import time as Now

N = 5000

def testNp(t):
    for i in range(5):
        x = np.random.rand(N,N)
        x = x@x
    print(f"np:{Now()-t}")

def testCp(t):
    for i in range(5):
        x = cp.random.rand(N,N)
        x = x@x
    print(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的计算时间并没有什么变化,充其量是线性增长,毕竟只要缓存吃得下,无论多么大的矩阵,乘法数也无非是按行或者按列增加而已。

以上就是python 详解如何使用GPU大幅提高效率的详细内容,更多关于Python GPU提高效率的资料请关注我们其它相关文章!

(0)

相关推荐

  • 运行tensorflow python程序,限制对GPU和CPU的占用操作

    一般情况下,运行tensorflow时,默认会占用可以看见的所有GPU,那么就会导致其它用户或程序无GPU可用,那么就需要限制程序对GPU的占用.并且,一般我们的程序也用不了所有的GPU资源,只是强行霸占着,大部分资源都不会用到,也不会提升运行速度. 使用nvidia-smi可以查看本机的GPU使用情况,如下图,这里可以看出,本机的GPU型号是K80,共有两个K80,四块可用(一个K80包括两块K40). 1.如果是只需要用某一块或某几块GPU,可以在运行程序时,利用如下命令运行:CUDA_VI

  • Python基于pyCUDA实现GPU加速并行计算功能入门教程

    本文实例讲述了Python基于pyCUDA实现GPU加速并行计算功能.分享给大家供大家参考,具体如下: Nvidia的CUDA 架构为我们提供了一种便捷的方式来直接操纵GPU 并进行编程,但是基于 C语言的CUDA实现较为复杂,开发周期较长.而python 作为一门广泛使用的语言,具有 简单易学.语法简单.开发迅速等优点.作为第四种CUDA支持语言,相信python一定会 在高性能计算上有杰出的贡献–pyCUDA. pyCUDA特点 CUDA完全的python实现 编码更为灵活.迅速.自适应调节

  • Python实现GPU加速的基本操作

    目录 CUDA的线程与块 用GPU打印线程编号 用GPU打印块编号 用GPU打印块的维度 用GPU打印线程的维度 总结 GPU所支持的最大并行度 GPU的加速效果 总结概要 CUDA的线程与块 GPU从计算逻辑来讲,可以认为是一个高并行度的计算阵列,我们可以想象成一个二维的像围棋棋盘一样的网格,每一个格子都可以执行一个单独的任务,并且所有的格子可以同时执行计算任务,这就是GPU加速的来源.那么刚才所提到的棋盘,每一列都认为是一个线程,并有自己的线程编号:每一行都是一个块,有自己的块编号.我们可以

  • 详解python中GPU版本的opencv常用方法介绍

    引言 本篇是以python的视角介绍相关的函数还有自我使用中的一些问题,本想在这篇之前总结一下opencv编译的全过程,但遇到了太多坑,暂时不太想回看做过的笔记,所以这里主要总结python下GPU版本的opencv. 主要函数说明 threshold():二值化,但要指定设定阈值 blendLinear():两幅图片的线形混合 calcHist() createBoxFilter ():创建一个规范化的2D框过滤器 canny边缘检测 createGaussianFilter():创建一个Ga

  • GPU排队脚本实现空闲触发python脚本实现示例

    今天写了一个GPU排队脚本,事实上还是挺实用的.有的服务器是多用户使用,GPU的资源常常被占据着,很可能在夜间GPU空闲了,但来不及运行自己的脚本.如果没有和别人共享服务器的话,自己的多个程序想排队使用GPU,也可以用这个脚本.环境非常简单,有python就行了: python3.7 ubuntu16.04 先创建脚本: vim narrow_setup.py cmd = 'python xxx.py'这句可以设置你要运行的python脚本 # author: muzhan # contact:

  • Python3实现打格点算法的GPU加速实例详解

    目录 技术背景 打格点算法实现 打格点算法加速 总结概要 技术背景 在数学和物理学领域,总是充满了各种连续的函数模型.而当我们用现代计算机的技术去处理这些问题的时候,事实上是无法直接处理连续模型的,绝大多数的情况下都要转化成一个离散的模型再进行数值的计算.比如计算数值的积分,计算数值的二阶导数(海森矩阵)等等.这里我们所介绍的打格点的算法,正是一种典型的离散化方法.这个对空间做离散化的方法,可以在很大程度上简化运算量.比如在分子动力学模拟中,计算近邻表的时候,如果不采用打格点的方法,那么就要针对

  • python 详解如何使用GPU大幅提高效率

    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 f

  • 基于python详解PyScript到底是什么

    目录 前言: 作用 使用方法 总结 前言: 最近 Anaconda 开大会发布了 PyScript ,它允许我们将 Python 代码嵌入到 HTML 中,并在浏览器中允许.PyScript 旨在为用户提供一流的编程语言,该语言具有一致的样式规则.更具表现力且更易于学习. 熟悉前端的朋友应该马上就可以反应到:这就是替代 JavaScript 啊! 确实,这个功能就类似于 JavaScript,如果后面发展得好的话,我们完全可以不写 JavaScript,直接写 Python 也能实现一样的效果.

  • Python详解复杂CSV文件处理方法

    目录 项目简介 项目笔记与心得 1.分批处理与多进程及多线程加速 2.优化算法提高效率 总结 项目简介 鉴于项目保密的需要,不便透露太多项目的信息,因此,简单介绍一下项目存在的难点: 海量数据:项目是对CSV文件中的数据进行处理,而特点是数据量大...真的大!!!拿到的第一个CSV示例文件是110多万行(小CASE),而第二个文件就到了4500万行,等到第三个文件......好吧,一直没见到第三个完整示例文件,因为太大了,据说是第二个示例文件的40多倍,大概二十亿行...... 业务逻辑复杂:项

  • Python 详解基本语法_函数_返回值

    Python 详解基本语法 概要: 函数的返回值是函数重要的组成部分.函数的根本在于实现程序的部分功能,所以很多时候我们需要将函数执行后的结果返回给程序再由程序作出进一步的操作.可以说是函数的返回值令函数与函数之间,函数与主程序之间更加紧密的联系起来. 函数的返回值 在Python的函数中都有一个返回值,默认为None.也可以使用return value语句来定义一个且只能定义一个可为任意类型的返回值.但是我们能够返回一个序列类型的对象,来实现返回多个值的效果. Example: 返回一个Lis

  • python 详解如何写flask文件下载接口

    简述 写一个简单的flask文件下载接口. 依赖 flask.gevent 代码 不废话上代码. #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sat Oct 23 19:53:18 2021 @author: huyi """ from flask import Flask, request, make_response, send_from_directory fr

  • Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程

    目录 前言 环境部署 实现过程 创建项目 定义Item实体 关键词提取工具 爬虫构造 中间件代码构造 制作自定义pipeline settings配置 执行主程序 执行结果 总结 前言 接着我的上一篇:Python 详解爬取并统计CSDN全站热榜标题关键词词频流程 我换成Scrapy架构也实现了一遍.获取页面源码底层原理是一样的,Scrapy架构更系统一些.下面我会把需要注意的问题,也说明一下. 提供一下GitHub仓库地址:github本项目地址 环境部署 scrapy安装 pip insta

  • Python 详解爬取并统计CSDN全站热榜标题关键词词频流程

    前言 最近在出差,发现住的宾馆居然有小强.所以出差无聊之际,写了点爬虫的代码玩玩,问就是应景.本篇文章主要是爬取CSDN全站综合热榜的100个标题,然后分词提取关键词,统计一下词频. 我想了下,对于其他博主还是有用的,可以看看什么标题可以上热榜,就分享一下吧.顺便把我解决各类问题的方法,说一说. 环境 使用的IDE为:spyder(有看着界面不习惯的,忍一下,不关键) 页面爬取使用chromedriver,至于原因我后面会说. 分词器:jieba 爬取页面地址:https://blog.csdn

  • Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程

    目录 前言 环境部署 插件推荐 爬虫目标 项目创建 webdriver部署 项目代码 Item定义 中间件定义 定义爬虫 pipeline输出结果文本 配置文件改动 验证结果 总结 前言 闲来无聊,写了一个爬虫程序获取百度疫情数据.申明一下,研究而已.而且页面应该会进程做反爬处理,可能需要调整对应xpath. Github仓库地址:代码仓库 本文主要使用的是scrapy框架. 环境部署 主要简单推荐一下 插件推荐 这里先推荐一个Google Chrome的扩展插件xpath helper,可以验

  • Python详解文字转语音的实现

    前言: 这是一篇简单的Python文字(汉字)转语音教程,当然对于其他语言工具在实现的方法上也是一样的 . 汉字转语音实现就分为两步,第一步将汉字转为拼音,第二步通过拼音调用相匹配的音频文件.下面是具体的开发实例教程. 开发环境:Windows Python版本:3.x 外置模块准备:pygame(可直接在cmd命令行中pip install pygame安装) 汉字转拼音 我使用的是将汉字转为Unicode码,然后通过查询一个匹配文件(我使用的是unicode_py.txt)获取该汉字的拼音,

  • python 详解turtle画爱心代码

    导语: 哈喽,在经历了过年相亲这一环节,成了是好事,不成也是多认识一个人,见见"世面",也可以"开拓"一下眼界,说不定遇到什么奇葩,以后跟朋友也有了茶余饭后的话题. 希望我们在这快餐时代里,都能遇到小火慢炖的粥~ 正文: 一直觉得turtle是个非常可爱的库,突发奇想,然后想试试传说中的土味表白:用python画一颗小爱心-- Google programming!启动! 确实有很多很多现成的代码,比如[1]: 画出来也很好看: 但左看右看,觉得背后的逻辑,比如fo

随机推荐