OpenCL的Python封装:PyOpenCL

jopen 9年前

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 )

项目主页:http://www.open-open.com/lib/view/home/1417184038956