最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python寫CUDA程序的方法

 更新時間:2017年03月27日 10:09:06   投稿:jingxian  
下面小編就為大家?guī)硪黄褂肞ython寫CUDA程序的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

使用Python寫CUDA程序有兩種方式:

* Numba
* PyCUDA

numbapro現(xiàn)在已經(jīng)不推薦使用了,功能被拆分并分別被集成到accelerate和Numba了。

例子

numba

Numba通過及時編譯機制(JIT)優(yōu)化Python代碼,Numba可以針對本機的硬件環(huán)境進行優(yōu)化,同時支持CPU和GPU的優(yōu)化,并且可以和Numpy集成,使Python代碼可以在GPU上運行,只需在函數(shù)上方加上相關(guān)的指令標(biāo)記,

如下所示:

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的內(nèi)核函數(shù)(kernel)其實就是使用C/C++編寫的,通過動態(tài)編譯為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使用一些指令標(biāo)記某些函數(shù)進行加速(也可以使用Python編寫內(nèi)核函數(shù)),這一點類似于OpenACC,而PyCUDA需要自己寫kernel,在運行時進行編譯,底層是基于C/C++實現(xiàn)的。通過測試,這兩種方式的加速比基本差不多。但是,numba更像是一個黑盒,不知道內(nèi)部到底做了什么,而PyCUDA就顯得很直觀。因此,這兩種方式具有不同的應(yīng)用:

* 如果只是為了加速自己的算法而不關(guān)心CUDA編程,那么直接使用numba會更好。

* 如果為了學(xué)習(xí)、研究CUDA編程或者實驗?zāi)骋粋€算法在CUDA下的可行性,那么使用PyCUDA。

* 如果寫的程序?qū)硪浦驳紺/C++,那么就一定要使用PyCUDA了,因為使用PyCUDA寫的kernel本身就是用CUDA C/C++寫的。

以上這篇使用Python寫CUDA程序的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python命令行引導(dǎo)用戶填寫ssh登錄信息詳解

    python命令行引導(dǎo)用戶填寫ssh登錄信息詳解

    這篇文章主要為大家介紹了python命令行引導(dǎo)用戶填寫ssh登錄信息詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • Python中的Numeric包和Numarray包使用教程

    Python中的Numeric包和Numarray包使用教程

    這篇文章主要介紹了Python中的Numeric包和Numarray包使用教程,來自IBM官方網(wǎng)站上的技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • Python的NumPy使用之?dāng)?shù)組過濾

    Python的NumPy使用之?dāng)?shù)組過濾

    這篇文章主要介紹了Python的NumPy使用之?dāng)?shù)組過濾,在 NumPy中,我們使用布爾索引列表來過濾數(shù)組布爾索引列表是與數(shù)組中的索引相對應(yīng)的布爾值列表,需要的朋友可以參考下
    2023-07-07
  • 用python寫掃雷游戲?qū)嵗a分享

    用python寫掃雷游戲?qū)嵗a分享

    我們給大家分享了一篇關(guān)于用python寫一個掃雷經(jīng)典游戲的實例代碼,大家可以測試運行下。
    2018-05-05
  • Python實現(xiàn)改變與矩形橡膠的線條的顏色代碼示例

    Python實現(xiàn)改變與矩形橡膠的線條的顏色代碼示例

    這篇文章主要介紹了Python實現(xiàn)改變與矩形橡膠的線條的顏色代碼示例,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • 使用python繪制隨機地形地圖

    使用python繪制隨機地形地圖

    Python 作為一門功能強大的編程語言,在地圖生成方面有著豐富的資源和庫,本文將介紹如何使用 Python 中的一些工具和庫來繪制隨機地形地圖,感興趣的小伙伴可以跟著小編一起來看看
    2024-04-04
  • Python 如何保存json文件并格式化

    Python 如何保存json文件并格式化

    這篇文章主要介紹了Python 如何保存json文件并格式化,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Python編程中裝飾器的使用示例解析

    Python編程中裝飾器的使用示例解析

    這篇文章主要介紹了Python編程中裝飾器的使用示例解析,包括裝飾函數(shù)和方法,含參的裝飾器以及裝飾類這三個方面,需要的朋友可以參考下
    2016-06-06
  • 詳解Python虛擬機是如何實現(xiàn)閉包的

    詳解Python虛擬機是如何實現(xiàn)閉包的

    Python中的閉包是一個強大的概念,允許函數(shù)捕獲和訪問其周圍的作用域,即使這些作用域在函數(shù)執(zhí)行完畢后也能被訪問,這篇文章將著重討論Python虛擬機是如何實現(xiàn)閉包的,文中有相關(guān)的代碼示例供大家參考,具有一定的參考價值,需要的朋友可以參考下
    2023-12-12
  • 如何解決Pycharm運行報錯No Python interpreter selected問題

    如何解決Pycharm運行報錯No Python interpreter selected

    這篇文章主要介紹了如何解決Pycharm運行時No Python interpreter selected問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05

最新評論

达州市| 开封县| 阿巴嘎旗| 镇原县| 红桥区| 梨树县| 松江区| 石家庄市| 潞城市| 金湖县| 睢宁县| 宁晋县| 嘉黎县| 利津县| 安福县| 兴安盟| 澄迈县| 盖州市| 平昌县| 定襄县| 民权县| 黔南| 晋宁县| 霍山县| 天峻县| 鄱阳县| 广元市| 巍山| 宿松县| 屯昌县| 台中县| 方正县| 登封市| 财经| 兴城市| 枞阳县| 耒阳市| 张掖市| 涿鹿县| 社旗县| 大悟县|