小编Eel*_*orn的帖子

Python GPU编程

我目前正在研究python中的一个项目,我想利用GPU进行一些计算.

乍一看似乎有很多可用的工具; 乍一看,我觉得我错过了什么.

Copperhead看起来很棒,但还没有被释放.似乎我只限于编写低级CUDA或openCL内核; 没有推力,没有cudpp.如果我喜欢有东西排序,我将不得不自己做.

这对我来说似乎不对.我确实错过了什么吗?或者这个GPU脚本还没有完全实现炒作呢?

编辑:GPULIB似乎可能是我需要的.文档是基本的,python绑定只是顺便提一下,但我现在申请下载链接.任何人都有这方面的经验,或链接到类似的免费学术用途的GPU库?ReEdit:好的,python绑定实际上是不存在的.

编辑2:所以我想我最好的选择是用C/CUDA写一些东西并从python中调用它?

python cuda gpu

53
推荐指数
5
解决办法
7万
查看次数

Python工作流设计模式

我正在研究一个软件设计,我不知道自己在做什么,感觉我正在重新发明轮子.

我的情况如下:我正在设计一个具有交互式UI的科学实用程序.用户输入应该触发视觉反馈(duh),其中一些是直接的,即编辑域几何,以及其中的一些尽快,而不会阻止用户交互,比如在所述域上解决一些PDE.

如果我绘制出我需要执行的所有操作的图表,我会得到这个相当令人敬畏的密集图形,暴露各种并行机会和缓存/重用部分结果.所以我想要的主要是以透明的方式利用这种并行性(选择的子任务在单独的进程中执行,结果由下游任务"加入"等待所有输入准备就绪),加上只需要重新计算那些输入分支实际上他们的输入改变了

pyutilib.workflow似乎最接近我正在寻找的东西,当然它不是(似乎没有做任何子处理开始).这似乎相当令人失望; 虽然我不是软件工程师,但我会说这里不要求任何疯狂的东西.

另一个复杂因素是我想要的紧密的用户界面集成,其他科学工作流程解决方案似乎无法处理.例如,我想通过转换节点传递拖放事件以进行进一步处理.转换节点有两个输入; 仿射变换状态输入端口,以及知道如何处理它的pointset类.如果仿射变换输入端口为"脏"(等待其依赖项更新),则应该保持该事件直到它变为可用.但是当事件通过节点时,eventinput端口应该被标记为已处理,因此当仿射变换由于进一步的用户输入而改变时它不会重新发送.这只是我出现的许多问题中的一个例子,我看不到任何问题.或者当长时间运行的分叉连接分支在处理前一个输入的过程中接收到新输入时该怎么办.

所以我的问题:您是否碰巧知道我应该阅读的有关工作流设计模式的一些好书/文章?或者我是否想要将方形钉子装入圆孔中,你知道我应该知道的完全不同的设计模式吗?或者是一个python包,可以实现我想要的功能,无论它装扮成什么流行语?

我已经在enthought.traits之上推出了自己的解决方案,但我对此并不十分满意,因为它感觉就像轮子的粗糙和粗制滥造一样.除了我似乎无法在互联网上的任何地方找到任何轮子.

注意:我不是在寻找webframeworks,图形工作流设计器或任何专用工具.只是概念上像pyutilib.workflow的东西,但包括文档和我可以使用的功能集.

###编辑:这是我在阅读和思考问题之后的所在:###

一个人可以应对"工作流程架构"的要求太多样化,因此没有适合所有人的单一鞋子.您是否希望与磁盘存储紧密集成,与Web框架紧密集成,异步性,混合使用自定义有限状态机逻辑进行任务调度?它们都是有效的要求,它们在很大程度上是不兼容的,或者是无意义的混音.

然而,并非所有人都失去了.寻找一个通用的工作流系统来解决任意问题就像寻找一个通用的迭代器来解决你的自定义迭代问题.迭代器主要不是关于可重用性; 你不能重用你的红黑树迭代器迭代你的张量.它们的优势在于关注点的清晰分离以及统一界面的定义.

我正在寻找的(并且已经开始自己编写;它会非常酷)看起来像这样:它的基础是一个通用的实现无关的工作流声明迷你语言,基于装饰器和一些元魔法,将以下语句转换为包含所有必需信息的工作流声明:

@composite_task(inputs(x=Int), outputs(z=Float))
class mycompositetask:
    @task(inputs(x=Int), outputs(y=Float))
    def mytask1(x):
        return outputs( y = x*2 )
    @task(inputs(x=Int, y=Float), outputs(z=Float))
    def mytask2(x, y):
        return outputs( z = x+y )
    mytask1.y = mytask2.y   #redundant, but for illustration; inputs/outputs matching in name and metadata autoconnect
Run Code Online (Sandbox Code Playgroud)

装饰器返回的是task/compositetask/workflow 声明类.而不仅仅是键入约束,手头工作流类型所需的其他元数据很容易添加到语法中.

现在,这个简洁和pythonic声明可以输入到返回实际工作流实例的工作流实例工厂中.这种声明语言非常通用,并且可能不需要在不同的设计要求之间进行很大的改变,但是这样的工作流实例化工厂完全取决于您的设计要求/想象,除了用于传递/检索输入/输出的通用接口.

在其最简单的化身中,结婚有类似于:

wf   = workflow_factory(mycompositetask)
wf.z = lambda result: print result   #register callback on z-output socket
wf.x = 1    #feed data into …
Run Code Online (Sandbox Code Playgroud)

python workflow

19
推荐指数
1
解决办法
4773
查看次数

Python和函数式语言互操作

我目前的主要编程语言是python.我喜欢它有很多东西,但我也喜欢函数式语言.不足以完成整个程序,但绝对适用于某些功能,很适合功能模具.

当然,.NET在这方面是惊人的,同时拥有ironpython和F#.但是考虑到上次我检查时对于科学python生态系统的铁心支持仍然很狡猾,.NET对我来说并不是一个很好的选择.我有点震惊于显然缺乏工具来促进cpython和Haskell之间的互操作.它们都是具有大型社区的成熟语言,对我来说似乎很不错.

有没有关于他们的架构使他们与我不相容的不兼容,或者这只是令人敬畏的东西还在等待发生?

澄清; 那里有一些半生不熟的项目,但我想的是与Weave,pycuda或boost的强大相似的东西.通过几个注释自动化互操作中固有的所有管道的东西.

python interop functional-programming

8
推荐指数
1
解决办法
606
查看次数

Pickle类实例加上定义?

这是一个我怀疑很常见的问题,但我还没有找到解决方案.我想要的是非常简单,看似技术上可行:我有一个简单的python类,我想将它存储在光盘,实例和定义中,在一个文件中.Pickle将存储数据,但它不存储类定义.有人可能会说类定义已存储在我的.py文件中,但我不想要一个单独的.py文件; 我的目标是拥有一个自包含的单个文件,我可以用一行代码弹回我的命名空间.

所以,是的,我知道这可能使用两个文件和两行代码,但我希望它在一个文件和一行代码中.原因是因为我经常发现自己处于这种状况; 我正在研究一些大数据集,在python中操作它,然后将我的切片,切块和转换后的数据写回一些预先存在的目录结构.我不想要的是将这些数据目录与错误命名的python类存根一起丢弃以保持我的代码和数据相关联,而我想要的更少是跟踪和组织定义的所有这些小的ad hoc类的麻烦在脚本中独立运行.

因此,代码可读性方面的便利性不是很大,而是代码和数据之间的轻松和不可理解的关联.这对我来说似乎是一个有价值的目标,尽管我知道它在大多数情况下都不合适.

所以问题是:是否有一个包或代码片段做了这样的事情,因为我似乎找不到任何东西.

python pickle

7
推荐指数
1
解决办法
2951
查看次数

Python开发设置

所以,id喜欢开始严肃的python开发,并且它被证明是一个巨大的痛苦.我完全不担心语言本身; 我很喜欢它,我会毫不费力地把它拿起来.但生态系统让我发疯.

首先,我尝试在Windows下启动并运行.几天后我放弃了,因为90%的软件包不包含Windows支持/安装说明.所以我转而使用macosx,人们说Macosx很适合mac开发.

接下来会有更多的挫败感 我喜欢使用python作为matlab替换和工具开发平台,所以spyderlib看起来像是一个很好的工具.但是现在我一直在忙着在我的Mac上建立pyqt两天,但没有用,我开始质疑它的智慧.显然,遵循几个指南字面上不变地以神秘错误结束.这个依赖关系建立在哪个平台上?需要设置什么神秘的编译器标志?我不知道,我也不在乎; 为什么安装人员没有弄清楚?哦等等,没有...我想使用这些工具,而不是先完全对它们进行反向工程以找出如何构建它们.

关于unix和pythonic怪癖,我可以在这些问题上找到所有文档中的大量隐含知识.有没有办法在这个有着可管理学习曲线的地方扩展这座山?现在我不知道我在做什么.或者我应该回到Windows并试图强制合作我需要的unix软件包?

python macos

3
推荐指数
1
解决办法
1151
查看次数

标签 统计

python ×5

cuda ×1

functional-programming ×1

gpu ×1

interop ×1

macos ×1

pickle ×1

workflow ×1