我有一个二维表格(矩阵)我需要独立处理这个矩阵中的每一行。每一行的处理都很耗时。我想使用我们大学的并行计算资源(加拿大网格什么的)我能有一些关于如何开始的建议吗?我以前从未使用过并行计算。谢谢:)
zbq4xfa01#
从这里开始:http://docs.python.org/library/multiprocessing.html请务必阅读以下内容:http://docs.python.org/library/multiprocessing.html#examples这可能会有所帮助:http://www.slideshare.net/pvergain/multiprocessing-with-python-presentation .虽然它非常优秀,但它包括线程和多处理,即使多处理通常远远上级尝试多线程。对于网格计算,多线程在很大程度上是无用的。此外,您可能还想了解celery。
mefy6pfw2#
我是一个名为scoop的新库的开发者之一。它正是为此目的(网格或超级计算、科学计算)而构建的,我建议你给予。在您的情况下,您需要做的就是这样的调用:
futures.map(YourFunc, matrixLine)
然后,它将分布在您的网格或您选择的任何环境中。
klh5stk13#
就像评论员说的那样,在你的大学里找一个人谈谈。你的问题的答案将具体到网格上安装的软件。如果你可以访问网格,那么你很可能也可以访问一个负责回答你问题的人(他们会很乐意帮助你)-找到这个人!
ecr0jaav4#
建议您使用C++/C执行此计算。您可以使用**#include头使用OpenMP API。您<omp.h>可以使用#pragma amp parallel指令启动并行区域。由于您正在并行计算用于计算矩阵乘法的for循环,您可以使用#pragma omp parallel for { }**在并行区域内启动for循环。OpenMP将自动处理进程同步。查看以下示例代码:https://gist.github.com/metallurgix/0dfafc03215ce89fc595记住使用一个大的矩阵来查看速度的实际改进。一个小的矩阵实际上会表现不佳,这是因为由于分叉和加入多个线程而增加了任务开销。如果你想使用多个处理器而不是多个线程来并行化你的代码,你也可以查看MPI。
c2e8gylq5#
根据你的描述,我想说:首先看看numpy。Numpy提供了以矢量化方式计算列和行的方法,速度接近C。根据您的问题,这可能比纯CPython的并行计算更快。你可以使用numpy-arrays的并行计算来获得一个真正大的速度提升。可能的方法是在集群上使用multiprocessing或Ipython。
numpy
C
CPython
multiprocessing
5条答案
按热度按时间zbq4xfa01#
从这里开始:http://docs.python.org/library/multiprocessing.html
请务必阅读以下内容:http://docs.python.org/library/multiprocessing.html#examples
这可能会有所帮助:http://www.slideshare.net/pvergain/multiprocessing-with-python-presentation .
虽然它非常优秀,但它包括线程和多处理,即使多处理通常远远上级尝试多线程。
对于网格计算,多线程在很大程度上是无用的。
此外,您可能还想了解celery。
mefy6pfw2#
我是一个名为scoop的新库的开发者之一。
它正是为此目的(网格或超级计算、科学计算)而构建的,我建议你给予。
在您的情况下,您需要做的就是这样的调用:
然后,它将分布在您的网格或您选择的任何环境中。
klh5stk13#
就像评论员说的那样,在你的大学里找一个人谈谈。你的问题的答案将具体到网格上安装的软件。如果你可以访问网格,那么你很可能也可以访问一个负责回答你问题的人(他们会很乐意帮助你)-找到这个人!
ecr0jaav4#
建议您使用C++/C执行此计算。您可以使用**#include头使用OpenMP API。您<omp.h>可以使用#pragma amp parallel指令启动并行区域。由于您正在并行计算用于计算矩阵乘法的for循环,您可以使用#pragma omp parallel for { }**在并行区域内启动for循环。OpenMP将自动处理进程同步。
查看以下示例代码:https://gist.github.com/metallurgix/0dfafc03215ce89fc595
记住使用一个大的矩阵来查看速度的实际改进。一个小的矩阵实际上会表现不佳,这是因为由于分叉和加入多个线程而增加了任务开销。
如果你想使用多个处理器而不是多个线程来并行化你的代码,你也可以查看MPI。
c2e8gylq5#
根据你的描述,我想说:首先看看
numpy
。Numpy提供了以矢量化方式计算列和行的方法,速度接近C
。根据您的问题,这可能比纯CPython
的并行计算更快。你可以使用
numpy
-arrays的并行计算来获得一个真正大的速度提升。可能的方法是在集群上使用multiprocessing
或Ipython。