我想并行化python2.7中的两个嵌套for循环,但我自己没有成功。我不知道如何接近并行化的定义。你知道吗
不管怎样,这里是单处理器代码:
import time
i = [int(x) for x in range(10000)]
j = [int(x) for x in range(10000, 20000)]
print len(i)
print len(j)
def sum(niz1,niz2):
suma=[]
for i in range(len(niz1)):
suma1=0
for j in range(len(niz2)):
suma1=suma1+niz1[i]*niz2[j]
suma.append(suma1)
return suma
start_t0=time.time()
suma=sum(i, j)
print len(suma)
print ("Time: %s seconds " % (time.time() - start_t0))
我想对第一个数组进行并行化。既然在第二个循环中也需要这个数组,那么如何执行呢?你知道吗
简单的解释和代码示例会很有帮助。你知道吗
一些想法:
我希望你真正的计算比你贴的要复杂。如果不是,只需计算一次
niz2
的和,然后将niz1
的每个元素乘以该和就可以得到结果向量。(假设实际的用例更复杂)Python对于CPU受限的计算速度不快。在处理大量数字时,应该使用
numpy
之类的库。Numpy的操作是用C实现的,因此比常规的python实现快得多。(假设numpy不是一个选项)在Python中,有一个全局解释器锁(GIL),它确保(除了IO任务)一次只有一个线程处于活动状态。这意味着对于计算来说,使用多个线程不会提高计算时间。实现真正并行化的唯一方法是使用多个进程(
import multiprocessing
),但是在进程之间复制计算结果可能成为瓶颈。总之,首先尝试优化单核执行。使用numpy已经可以解决80%的用例。只有在这些优化还不够的情况下才进行并行化,不要期望从中得到实质性的改进。你知道吗
这有用吗?你知道吗
在Python中计算大型值数组的第一步应该是在numpy中实现它。这样您就可以利用numpy的矢量化。通过下面的脚本,我成功地在15微秒的时间内运行了相同的计算,而不是在您的版本中的9秒(几乎快了1000000x)。你知道吗
不过,这可能不是您真正的计算,所以您应该考虑在用例中如何做到这一点。你知道吗
相关问题 更多 >
编程相关推荐