返回顶部
首页 > 资讯 > 后端开发 > Python >使用Python写CUDA程序的方法
  • 678
分享到

使用Python写CUDA程序的方法

程序方法Python 2022-06-04 18:06:54 678人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

使用Python写CUDA程序有两种方式: * Numba * PyCUDA numbapro现在已经不推荐使用了,功能被拆分并分别被集成到accelerate和Numba了。 例子 numba Nu

使用Python写CUDA程序有两种方式:

* Numba
* PyCUDA

numbapro现在已经不推荐使用了,功能被拆分并分别被集成到accelerate和Numba了。

例子

numba

Numba通过及时编译机制(JIT)优化python代码,Numba可以针对本机的硬件环境进行优化,同时支持CPU和GPU的优化,并且可以和Numpy集成,使Python代码可以在GPU上运行,只需在函数上方加上相关的指令标记,

如下所示:


import numpy as np 
from timeit import default_timer as timer
from numba import vectorize

@vectorize(["float32(float32, float32)"], target='cuda')
def vectorAdd(a, b):
  return a + b

def main():
  N = 320000000

  A = np.ones(N, dtype=np.float32 )
  B = np.ones(N, dtype=np.float32 )
  C = np.zeros(N, dtype=np.float32 )

  start = timer()
  C = vectorAdd(A, B)
  vectorAdd_time = timer() - start

  print("c[:5] = " + str(C[:5]))
  print("c[-5:] = " + str(C[-5:]))

  print("vectorAdd took %f seconds " % vectorAdd_time)

if __name__ == '__main__':
  main()


PyCUDA

PyCUDA的内核函数(kernel)其实就是使用C/C++编写的,通过动态编译为GPU微码,Python代码与GPU代码进行交互,如下所示:


import pycuda.autoinit
import pycuda.driver as drv
import numpy as np
from timeit import default_timer as timer

from pycuda.compiler import SourceModule
mod = SourceModule("""
__global__ void func(float *a, float *b, size_t N)
{
 const int i = blockIdx.x * blockDim.x + threadIdx.x;
 if (i >= N)
 {
  return;
 }
 float temp_a = a[i];
 float temp_b = b[i];
 a[i] = (temp_a * 10 + 2 ) * ((temp_b + 2) * 10 - 5 ) * 5;
 // a[i] = a[i] + b[i];
}
""")

func = mod.get_function("func")  

def test(N):
  # N = 1024 * 1024 * 90  # float: 4M = 1024 * 1024

  print("N = %d" % N)

  N = np.int32(N)

  a = np.random.randn(N).astype(np.float32)
  b = np.random.randn(N).astype(np.float32)  
  # copy a to aa
  aa = np.empty_like(a)
  aa[:] = a
  # GPU run
  nTheads = 256
  nBlocks = int( ( N + nTheads - 1 ) / nTheads )
  start = timer()
  func(
      drv.InOut(a), drv.In(b), N,
      block=( nTheads, 1, 1 ), grid=( nBlocks, 1 ) )
  run_time = timer() - start 
  print("gpu run time %f seconds " % run_time)  
  # cpu run
  start = timer()
  aa = (aa * 10 + 2 ) * ((b + 2) * 10 - 5 ) * 5
  run_time = timer() - start 

  print("cpu run time %f seconds " % run_time) 

  # check result
  r = a - aa
  print( min(r), max(r) )

def main():
 for n in range(1, 10):
  N = 1024 * 1024 * (n * 10)
  print("------------%d---------------" % n)
  test(N)

if __name__ == '__main__':
  main()

对比

numba使用一些指令标记某些函数进行加速(也可以使用Python编写内核函数),这一点类似于OpenACC,而PyCUDA需要自己写kernel,在运行时进行编译,底层是基于C/c++实现的。通过测试,这两种方式的加速比基本差不多。但是,numba更像是一个黑盒,不知道内部到底做了什么,而PyCUDA就显得很直观。因此,这两种方式具有不同的应用:

* 如果只是为了加速自己的算法而不关心CUDA编程,那么直接使用numba会更好。

* 如果为了学习、研究CUDA编程或者实验某一个算法在CUDA下的可行性,那么使用PyCUDA。

* 如果写的程序将来要移植到C/C++,那么就一定要使用PyCUDA了,因为使用PyCUDA写的kernel本身就是用CUDA C/C++写的。

以上这篇使用Python写CUDA程序的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 使用Python写CUDA程序的方法

本文链接: https://lsjlt.com/news/13542.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用Python写CUDA程序的方法
    使用Python写CUDA程序有两种方式: * Numba * PyCUDA numbapro现在已经不推荐使用了,功能被拆分并分别被集成到accelerate和Numba了。 例子 numba Nu...
    99+
    2022-06-04
    程序 方法 Python
  • 使用Python写CUDA程序
    使用Python写CUDA程序有两种方式: * Numba * PyCUDA numbapro现在已经不推荐使用了,功能被拆分并分别被集成到accelerate和Numba了。 例子 numba Numba通过及时编译机制(...
    99+
    2023-01-31
    程序 Python CUDA
  • Linux应用程序使用写文件调试程序的方法
    linux,一切皆文件,那么在android系统本身,也是Linux+java罢了,也是在Linux的运行环境下。 通常,我们在调试程序的都会使用printf。 在Android中,我们会去使用logcat,现在,给大家...
    99+
    2022-06-04
    应用程序bug调试 写文件调试程序 linux应用程序使用写文件调试程序的方法
  • 教你在VS2022 MFC程序中调用CUDA代码的方法
    目录在VS2022 MFC程序中调用CUDA函数Pre: 安装好CUDA后VS中该有的效果将CUDA函数集成到MFC项目中1. 为项目添加CUDA配置2. 把cuda代码添加到项目中...
    99+
    2024-04-02
  • python简单程序的编写方法是什么
    这篇文章主要介绍“python简单程序的编写方法是什么”,在日常操作中,相信很多人在python简单程序的编写方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python简单程序的编写方法是什么”的疑...
    99+
    2023-06-17
  • 使用VScode编写python程序并打
      据说Visual Studio Code(VS Code)的诸多好处,了解了一下果然很喜欢,我喜欢它的原因主要有3个,一是VS Code开源且跨平台,二是因为其界面非常酷,三是可以满足我的大所属代码需求,除此之外当然还有强大的好奇心。...
    99+
    2023-01-30
    程序 VScode python
  • 使用pyscript在网页中撰写Python程式的方法
    根据 Anaconda 的项目 pyscript,可以将 python 的代码直接写在网页中,目前只支援两种标签,分别是<py-script> 与 <py-repl...
    99+
    2024-04-02
  • 使用Node.js为其他程序编写扩展的基本方法
    准备开始 首先我们用下面的目录结构来创建一个节点通知(node-notify)文件夹. . |-- build/ # This is where our...
    99+
    2022-06-04
    程序 方法 Node
  • 写Python时不用import的方法教程
    这篇文章给大家介绍写Python时不用import的方法教程,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在写 Python 程序的时候,我们需要依赖一些库,所以一开始我们总是:imp...
    99+
    2024-04-02
  • linux应用程序的编写方法是什么
    Linux应用程序的编写方法可以分为以下几个步骤:1. 选择编程语言:Linux支持多种编程语言,如C、C++、Python、Jav...
    99+
    2023-09-22
    linux
  • Python写的ATM小程序
    很久没写博客了,近两年的时间一直在搞Openstack相关的东西,有时间我也会把我认为值得写得一些技术和经验分享出来。以后准备好好学学Python了,要不快没饭吃了,这两个礼拜看了一些视频教程和书籍,遂拿这个ATM小程序练练手。文件结构:程...
    99+
    2023-01-31
    程序 Python ATM
  • python程序调用远程服务的方法
    小编给大家分享一下python程序调用远程服务的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言项目是基于python3的PC桌面项目。因为需要对外发布we...
    99+
    2023-06-07
  • python程序设计的方法
    本篇文章和大家了解一下python程序设计的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。Python是一种面向对象oop(Object Oriented Programming)的脚本语言。面向对象是采用基于对象(...
    99+
    2023-07-02
  • Python调用C++程序的方法详解
    前言 大家都知道Python的优点是开发效率高,使用方便,C++则是运行效率高,这两者可以相辅相成,不管是在Python项目中嵌入C++代码,或是在C++项目中用Python实现外围功能,都可能遇到Pyth...
    99+
    2022-06-04
    详解 程序 方法
  • 用python读写excel的方法
    这篇文章主要介绍了用python读写excel的方法,涉及xlrd模块与xlwt模块的应用,具有一定的学习借鉴价值,需要的朋友可以参考下 本文实例讲述了用python读写excel的方法。分享给大家供大家参考。具体如下: 最近需要从...
    99+
    2023-01-31
    方法 python excel
  • 异步编程的魔法棒:用 Python 编写并发应用程序
    异步编程是一种编程范式,它允许在不阻塞主线程的情况下执行任务。这对于需要处理大量传入请求或长期运行任务的应用程序至关重要。Python 提供了多种工具,使开发异步应用程序变得轻而易举。 异步编程的好处 高吞吐量:异步应用程序可以同时处...
    99+
    2024-03-09
  • 怎么使用Python编写诗词接龙程序
    诗歌语料库  首先,我们利用Python爬虫来爬取诗歌,制作语料库。爬取的页面如下:爬取的诗歌由于本文主要为试了展示该项目的思路,因此,只爬取了该页面中的唐诗三百首、古诗三百、宋词三百、宋词精选,一共大约110...
    99+
    2023-05-14
    Python
  • 如何使用Python编写诗词接龙程序
    这篇文章主要介绍了如何使用Python编写诗词接龙程序的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用Python编写诗词接龙程序文章都会有所收获,下面我们一起来看看吧。诗歌语料库  首先,我们利用Pyt...
    99+
    2023-07-06
  • 使用Python编写简单的画图板程序的示例教程
    从这次开始,我会由简单到困难(其实也不会困难到哪里去)讲几个例程,每一个例程都是我自己写(或者修改,那样的话我会提供原始出处)的,都具有一定的操作性和娱乐性。例程中汇尽量覆盖到以前所讲的pygame中方方面...
    99+
    2022-06-04
    示例 简单 程序
  • idea编写java程序的方法是什么
    编写Java程序的方法是以下几个步骤:1. 确定程序需求和目标:确定程序要实现的功能和目标。2. 设计程序结构:根据需求和目标,设计...
    99+
    2023-08-11
    idea java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作