OpenCL的Python封装:PyOpenCL
jopen
10年前
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 )