ipython의 일부 기능을 테스트 중이므로 잘못 생각한 것 같습니다.IPython에서 일부 함수를 실행하는 것이 일반적인 파이썬 함수보다 느립니다.
일부 수학 연산을 실행하기 위해 3 가지 방법을 테스트 중입니다.
@parallel.parallel(view=dview, block=True)
및 기능을 사용하여 1map
- (파이썬 정상적인 기능)
- 3 사용하는 클라이언트의로드 밸런싱 기능을 단일 코어 기능을 사용하여 2
이 코드가 있습니다
from IPython import parallel
import numpy as np
import multiprocessing as mp
import time
rc = parallel.Client(block=True)
dview = rc[:]
lbview = rc.load_balanced_view()
@parallel.require(np)
def suma_pll(a, b):
return a + b
@parallel.require(np)
def producto_pll(a, b):
return a * b
def suma(a, b):
return a + b
def producto(a, b):
return a * b
@parallel.parallel(view=dview, block=True)
@parallel.require(np)
@parallel.require(suma_pll)
@parallel.require(producto_pll)
def a_calc_pll(a, b):
result = []
for i, v in enumerate(a):
result.append(
producto_pll(suma_pll(a[i], a[i]), suma_pll(b[i], b[i]))//100
)
return result
@parallel.require(suma)
@parallel.require(producto)
def a_calc_remote(a, b):
result = []
for i, v in enumerate(a):
result.append(
producto(suma(a[i], a[i]), suma(b[i], b[i]))//100
)
return result
def a_calc(a, b):
return producto(suma(a, a), suma(b, b))//100
def main_pll(a, b):
return a_calc_pll.map(a, b)
def main_lb(a, b):
c = lbview.map(a_calc_remote, a, b, block=True)
return c
def main(a, b):
c = []
for i in range(len(a)):
c += [a_calc(a[i], b[i]).tolist()]
return c
if __name__ == '__main__':
a, b = [], []
for i in range(1, 1000):
a.append(np.array(range(i+00, i+10)))
b.append(np.array(range(i+10, i+20)))
t = time.time()
c1 = main_pll(a, b)
t1 = time.time()-t
t = time.time()
c2 = main(a, b)
t2 = time.time()-t
t = time.time()
c3 = main_lb(a, b)
t3 = time.time()-t
print(str(c1) == str(c2))
print(str(c3) == str(c2))
print('%f secs (multicore)' % t1)
print('%f secs (singlecore)' % t2)
print('%f secs (multicore_load_balance)' % t3)
을
내 검색 결과 :
True
True
0.040741 secs (multicore)
0.004004 secs (singlecore)
1.286592 secs (multicore_load_balance)
왜 멀티 코어 루틴이 단일 코어 루틴보다 느립니까? 이 접근 방식의 문제점은 무엇입니까? 문제를 해결하려면 어떻게해야합니까?
일부 정보 : 2.2.0 ipython python3.4.1, NumPy와 1.9.0은 LocalEngineSetLauncher
(a = np.array (a) B = np.array (b)))', 내 결과는 : 트루 트루 0.043795 초 (멀티) 0.010011 초 (싱글 코어) 1.541814 초 (multicore_load_balance) 단일 코어 기능은 시간이 증가했지만 다른 기능은 증가하지 않았습니다. – xmn