从纯python代码自动创建opencl内核

py2opencl的Python项目详细描述


===
py2oppencl
==



内核(用类似c的语言编写),然后使用andreas klóckner的pyopencl
模块提交GPU的内核。它不是要将任意的
python代码转换为opencl,因为这是不可能的。相反,它仅限于
简单的python lambda和只包含简单数学运算的函数
和内置的opencl函数。



Py2Pencl,F

Py2=Py2Pencl(Lambda x:-x如果x和lt;0.5否则f.sin(x))
a=Py2.map(np.ran随机.rand(10000000))



>打印Py2.kernel

>>;
>gt;
>gt;int-g id=get_global const float*x,全局float*resu g;
>>>;gt;int-gid=get_global_id(0)id(0);
>>>
>>>;res_g[gid]=((x[gid]<;0.5))?-x[gid]:sin(x[gid]);
>;}




>虽然有许多约束,但支持更复杂的函数。以下函数对图像像素进行平均:


import numpy as np
from py2oppencl import py2oppencl,f
import image


img_path='py2oppencl/test/lenna.png'

img=np.array(image.open(img_path).convert('rgb')

def avg(x,y,z,dest,src):
注意,生成的c代码将自动处理包装
right=src[x+1,y,z]
left=src[x-1,y,z]
up=src[x,y-1,z]
down=src[x,y+1,z]
dest[x,y,(右/4)+(左/4)+(上/4)+(上/4)+(下/4)



dest=py2oppencl(avg.map(img)
image.fromarray(dest'rgb').save('foo.png')




opencl驱动程序应该在mac os x上开箱即用。如果你在linux上,没有一个好的gpu,我应该在macos x上开箱即用。如果你在linux上,又没有一个好的gpu,那么我应该在macos x上开箱即用py2oppencl。如果你在linux上,如果你在linux上,没有一个好的gpu,我建议AMD的ICD,发现`这里是http://developer.amd.com/tools and sdks/opencl zone/opencl tools sdks/amd accelerated parallel processing app sdk/`
(截至2014年7月26日)。它支持现代英特尔CPU,不需要GPU。(可能它也支持AMD CPU。)


截至本文撰写之时,Intel的Beignet驱动程序在Ubuntu14.04上似乎已被破坏。




>在Ubuntu14.04上经过测试的平台
==

-nvidia cuda/nvidia-opencl-icd-331在Ubuntu14.04上
-amd加速并行处理(AMD-app-sdk-v2.9)在Intel Core i7-3610qm上,ubuntu 14.04
-苹果针对intel core i5-4258u的opencl驱动程序,os x 10.9
-苹果针对intel“iris”(intel hd 4000)的opencl驱动程序,os x 10.9


=====

-支持while循环和c-style循环(即,for i i n range(n)
-性能写入

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java组在不同线程中记录消息   java Wicket挂载404错误页   Java:如何制作对象数组的副本?   类似Windows中的java日期时间选择器   java无法获取JTextField用户输入以搜索文本文件   安卓 Java:如何随机更改背景和字体颜色   Java定时器中的摆动变化延迟   java让Selenium暂停X秒   将响应传递到视图时发生java Nativescript错误   java刷新安卓列表视图的最佳方式是什么?   单java进程的多线程队列/工作线程体系结构   web服务Java NoSuchMethodException   java groupingBy和filter一步到位   java游标。getCount()给定错误   即使引用的文件位于项目根目录中,java PrintWrite仍会持续引发“未找到文件”异常