OpenCL的Python封裝:PyOpenCL

jopen 10年前發布 | 45K 次閱讀 PyOpenCL OpenGL 圖形/圖像處理

OpenCL的一個非常完整Python綁定,以及廣泛的并行算法。但是,對于那些希望體驗OpenCL的開發,核心算法仍然必須用C語言編寫。
OpenCL全稱 Open Computing Language ,是 第一個面向異構系統通用目的并行編程的開放式、免費標準 ,也是一個統一的編程環境,便于軟件開發人員為 高性能計算服務器、桌面計算系統、手持設備 編寫高效輕便的代碼,而且 廣泛適用于多核心處理器(CPU)、圖形處理器(GPU)、Cell類型架構以及數字信號處理器(DSP)等其他并行處理器 ,在游戲、娛樂、科研、醫療等各種領域都有廣闊的發展前景。

from py2opencl import Py2OpenCL
import numpy
from numpy.random import randint

def next_it( x, y, dest, src ): """ neighbor coordinates:

   0, 1, 2,
   3,    4,
   5, 6, 7

"""
live_neighbors = ( src[ x-1, y-1 ] + src[ x, y-1 ] + src[ x+1, y-1 ]
                   + src[ x-1, y ] + src [ x+1, y ]
                   + src[ x-1, y+1 ] + src[ x, y+1 ] + src[ x+1, y+1 ] )
if live_neighbors < 2:
    dest[x,y] = 0
elif live_neighbors == 3:
    dest[x,y] = 1
elif src[x,y] and live_neighbors == 2:
    dest[x,y] = 1
elif live_neighbors > 3:
    dest[x,y] = 0
else:
    dest[x,y] = 0

grid = randint( 0, 2, size=(40, 40) ).astype(numpy.dtype('uint8'))

iterate = Py2OpenCL( next_it ) iterate.bind( grid, return_type = numpy.dtype('uint8') )

print iterate.kernel

for i in range(int(1e6)): grid = iterate.apply( grid )</pre>

項目主頁:http://www.baiduhome.net/lib/view/home/1417184038956

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!