Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python CPU和GPU操作并行化_Python_Multithreading_Parallel Processing_Multiprocessing - Fatal编程技术网

Python CPU和GPU操作并行化

Python CPU和GPU操作并行化,python,multithreading,parallel-processing,multiprocessing,Python,Multithreading,Parallel Processing,Multiprocessing,我有一个应用程序,它有3个主要功能,目前正在按顺序运行: 1)将数据加载到内存并对其执行预处理 2)使用带编号的GPU对数据执行一些计算 3)监控GPU上的计算状态并将其打印到屏幕上 通过使用多线程,这3项功能的并行性令人尴尬。但在python中,我按顺序执行所有这三个功能。部分原因是过去我在Python多线程和GIL问题上运气不好 在本例中,我不一定需要利用手头多个cpu的全部功能。我想做的就是,在GPU执行计算时加载数据并对其进行预处理,同时监视计算的状态。目前大多数耗时的计算都是在2)处执

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

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

2)使用带编号的GPU对数据执行一些计算

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%似乎不值得。

您解决了这个问题吗?我面临着完全相同的问题,除了在我的情况下,最昂贵的步骤是“加载数据”。如果您有一些解决方案,我将非常感谢您发布。是的,您是对的,我使用的框架不支持轮询,以查看GPU目前是否已完成(但他们告诉我,他们计划在未来支持,这已列入他们的议程)。似乎多重处理是我最好的选择。