gpt4 book ai didi

python - 并行Python : 4 threads have same speed as 2 threads

转载 作者:太空宇宙 更新时间:2023-11-03 18:02:23 25 4
gpt4 key购买 nike

我正在使用Parallel Python用于在多个内核上执行计算量大的代码。我有一个i7-4600M处理器,有2个核心和4个线程。

有趣的是,如果我使用 2 个或 4 个线程,计算所需的时间几乎相同。我写了一些示例代码来演示这种现象。

import itertools
import pp
import time

def cc(data, n):
count = 0
for A in data:
for B in itertools.product((-1,0,1), repeat=n):
inner_product = sum(a*b for a,b in zip(A,B))
if inner_product == 0:
count += 1
return count

n = 9

for thread_count in (1, 2, 3, 4):
print("Thread_count = {}".format(thread_count))
ppservers = ()
job_server = pp.Server(thread_count, ppservers=ppservers)

datas = [[] for _ in range(thread_count)]
for index, A in enumerate(itertools.product((0,1), repeat=n)):
datas[index%thread_count].append(A)
print("Data sizes: {}".format(map(len, datas)))

time_start = time.time()
jobs = [job_server.submit(cc,(data,n), (), ("itertools",)) for data in datas]
result = sum(job() for job in jobs)
time_end = time.time()
print("Time = {}".format(time_end - time_start))
print("Result = {}".format(result))
print

这是运行程序和CPU使用情况的简短视频:https://www.screenr.com/1ULN当我使用2个线程时,cpu使用率为50%,如果我使用4个线程,则使用100%。但它只是稍微快一点。使用 2 个线程,我获得了 1.8 倍的加速,使用 3 个线程,我获得了 1.9 倍的加速,使用 4 个线程,我获得了 2 倍的加速。

如果代码太快,请使用 n = 10n = 11。但要小心,复杂度是6^n。因此,n = 10 的时间是 n = 9 的 6 倍。

最佳答案

2 个核心和 4 个线程意味着每个核心上有两个超线程,这不会线性扩展,因为它们共享资源并且可能会相互妨碍,具体取决于工作负载。并行 Python 在幕后使用进程和 IPC。每个核心都调度两个不同的进程,因此您可能会看到缓存抖动(核心的缓存在超线程之间共享)。

关于python - 并行Python : 4 threads have same speed as 2 threads,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27473703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com