首页 文章

CPU和GPU操作并行化

提问于
浏览
2

我有一个应用程序有3个主要功能,目前正在顺序运行:

1) 将数据加载到内存并对其执行预处理 .

2) 使用带有theano的GPU对数据执行一些计算 .

3) 监控GPU上的计算状态并将其打印到屏幕上 .

通过使用多线程,这三个功能令人尴尬地可并行化 . 但是在python中,我依次执行所有这三个功能 . 部分是因为过去我在Python多线程和GIL问题上运气不好 .

在这种情况下,我不一定需要利用多CPU的全部功能 . 我想要做的就是,在执行GPU计算时加载数据并预处理它们,同时监视计算的状态 . 目前大多数耗时的计算都是在2)执行的,所以我在2)的操作上有时间限制 . 现在我的问题是:

  • python可以并行化这3个操作而不会产生新的瓶颈,例如:由于GIL问题 .

*我应该使用多处理而不是多线程吗?

简而言之,如果我应该在Python中,应该如何并行化这三个操作 .

自从我上次为CPU编写多线程代码(特别是对于python)以来已经有一段时间了,任何指导都将受到赞赏 .

编辑:错别字 .

1 回答

  • 2

    GIL有时候会有点麻烦......

    其中很多内容都围绕着如何使用GPU . 您使用的API是否允许您将其设置为运行然后关闭并执行其他操作,偶尔轮询以查看GPU是否已完成?或者也许它可以引发一个事件,调用回调或类似的东西?

    我从你的问题中感觉到答案是否定的......在这种情况下,我怀疑你唯一的选择(鉴于你使用的是Python)是多处理的 . 如果答案是肯定的,那么你可以从GPU开始,然后在此期间进行一些预处理和绘图,然后检查GPU是否已经完成 .

    我不太了解Python或它如何进行多处理,但我怀疑它涉及序列化和复制在进程之间发送的数据 . 如果您正在处理的数据量很大(我建议担心100兆字节标记 . 虽然这只是预感),但您可能希望考虑序列化和复制数据所花费的时间 . 如果您不喜欢该分析的答案,那么就使用Python而言,您可能运气不佳 .

    你说最耗时的部分是GPU处理吗?据推测,其他两个部分相当冗长,否则试图将它们并行化将毫无意义 . 例如,如果GPU是运行时的95%,那么通过并行化其余部分节省5%几乎不值得 .

相关问题