从纯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 JPA/Hibernate ManyToMany在联接表中具有附加列,IdClass“没有持久id属性”   java如何在Spring JPA中为自动生成的ID赋值   java工作区。IntelliJ中的xml文件已损坏(第1行错误:prolog中不允许内容),如何修复?   java我正在寻找一个HTML解析器,它可以将“small”标记替换为“span”   java在Android中使用Recycler视图作为片段创建文件浏览器和选择器?   运行第一个JavaFX模块化程序时出现java异常   java无法在testng中实例化类问题   Java erroractual和formal参数列表的长度不同   java在位置管理器中获取错误   java根据请求参数自动连接RequestScope bean   java AnyLogic:如何根据时间和概率检查进程的可用性?   尝试执行hdfs zkfc命令时会弹出java错误   Java扫描器字符串输入   JavaSpring安全性:仅在尚未通过表单登录进行身份验证的情况下对RESTAPI进行身份验证   java对数据的抽象与对行为的抽象   java使用SolrJ设置自定义请求头   java Bouncy Castle J2ME加载现有私钥   从Java程序的主方法中抛出异常有什么意义?   java布尔字段Hibernate QueryException:无法解析属性