複数のコアで計算量の多いコードを実行するためにParallel Pythonを使用しています。2 コアと 4 スレッドのi7-4600Mプロセッサを使用しています。
興味深いことに、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使用率の短いビデオを次に示します。しかし、それはわずかに高速です。2 つのスレッドを使用すると 1.8 倍のスピードアップが得られ、3 つのスレッドを使用すると 1.9 倍のスピードアップが得られ、4 つのスレッドを使用すると 2 倍のスピードアップが得られます。
コードが速すぎる場合は、n = 10
またはを使用しますn = 11
。しかし、注意してください、複雑さは6^n
. したがってn = 10
、 の 6 倍の時間がかかりn = 9
ます。