python - CPU 和 GPU 操作并行化

标签 python multithreading parallel-processing multiprocessing

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

1) 将数据加载到内存中并对其进行预处理。

2) 使用 GPU 和 theano 对数据进行一些计算。

3) 监控 GPU 上的计算状态并将它们打印到屏幕上。

通过使用多线程,这 3 个功能可以并行化。但是在 python 中,我依次执行所有这三个功能。部分原因是过去我在 Python 多线程和 GIL 问题上运气不佳。

在这种情况下,我不一定需要利用手头的多 CPU 的全部功能。我只想在 GPU 执行计算的同时加载数据并对其进行预处理,同时监控计算的状态。目前最耗时的计算是在 2) 处执行的,所以我对 2) 处的操作有点时间限制。现在我的问题是:

*python 能否在不产生新瓶颈的情况下并行化这 3 个操作,例如:由于 GIL 问题。

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

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

自从我上次为 CPU(尤其是 python)编写多线程代码以来已经有一段时间了,任何指导将不胜感激。

编辑:拼写错误。

最佳答案

GIL 有时有点麻烦......

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

我从你的问题中感觉到答案是否定的......在这种情况下,我怀疑你唯一的选择(假设你使用的是 Python)是多处理。如果答案是肯定的,那么您可以启动 GPU,然后继续进行一些预处理和绘图,然后检查 GPU 是否已完成。

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

你说最耗时的部分是GPU处理?大概其他两个部分相当冗长,否则尝试将它们并行化就没有意义了。例如,如果 GPU 占用了 95% 的运行时间,那么通过并行化其余部分来节省 5% 似乎不值得。

关于python - CPU 和 GPU 操作并行化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16775249/

相关文章:

python - 如何从 4 个 csv 文件中随机抽样,以便在 Python 中每个 csv 文件中按顺序出现不超过 2/3 行

用于从 Linux 机器上的网络摄像头拍照的 Python api

python - 无法在 Windows 10 上安装 PIP

c# - 从 NetworkStream 读取。 ReadLine() 与 Read into ByteArray 哪个更好?

java - 为什么这个多线程程序会陷入死循环?

python - 记录掷骰子游戏的输赢

java - 线程快速排序

java - Java线程-保持函数与线程的多个返回值同步

for-loop - 如何在 julia 语言中并行一个简单的 for 循环?

c# - 在单独的线程上将数据绑定(bind)到网格控件