비 병렬 버전과 병렬 버전의 실행 시간을 비교하려고합니다. 문제는 병렬 함수가 스레딩 패키지와 잘 작동하지만 다중 처리 패키지로 전환 한 후에 프로세스가 시작되지 않는다는 것입니다. 이것이 내 컴파일러 또는 다른 것 때문에 발생하는지 궁금합니다. 다른 사람이 내 코드를 실행하여 다른 환경에서 작동하는지 확인할 수 있습니까? 그리고 그렇지 않다면 코드 내에서 어떤 문제가 있습니까?행렬의 외란을 계산하는 함수에 대해 다중 처리가 작동하지 않습니다.
import numpy as np
from multiprocessing import Process
def single_row(a,b,output):
for j in range(len(b[0])):
for k in range(len(a)):
output[j]=output[j]+a[k]*b[k][j]
#Parallel Matrix Cross Multiplication
def cross_parallel(a,b):
if len(a[0])==len(b):
tasks=[None]*len(a)
T=np.array([[0]*len(b[0])]*len(a))
for i in range(len(a)):
tasks[i]=Process(target=single_row,args=(a[i],b,T[i]))
for task in tasks:
task.start()
for task in tasks:
task.join()
return T
else:
print 'Error: Invalid Matrices'
#Non-parallel Matrix Cross Multiplication
def cross_basic(a,b):
if len(a[0])==len(b):
T=np.array([[0]*len(b[0])]*len(a))
for i in range(len(a)):
for j in range(len(b[0])):
for k in range(len(a[0])):
T[i][j]=T[i][j]+a[i][k]*b[k][j]
return T
else:
print 'Error: Invalid Matrices'
if __name__ == '__main__':
x=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
y=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
print cross_basic(x,y)
print cross_parallel(x,y)
결과 :
[[ 90 100 110 120]
[202 228 254 280]
[314 356 398 440]
[426 484 542 600]]
[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]
(라인 15에서 만 다른) 작동 스레딩 패키지를 사용하여 버전 :
import numpy as np
from threading import Thread
def single_row(a,b,output):
for j in range(len(b[0])):
for k in range(len(a)):
output[j]=output[j]+a[k]*b[k][j]
#Parallel Matrix Cross Multiplication
def cross_parallel(a,b):
if len(a[0])==len(b):
tasks=[None]*len(a)
T=np.array([[0]*len(b[0])]*len(a))
for i in range(len(a)):
tasks[i]=Thread(target=single_row,args=(a[i],b,T[i]))
for task in tasks:
task.start()
for task in tasks:
task.join()
return T
else:
print 'Error: Invalid Matrices'
#Non-parallel Matrix Cross Multiplication
def cross_basic(a,b):
if len(a[0])==len(b):
T=np.array([[0]*len(b[0])]*len(a))
for i in range(len(a)):
for j in range(len(b[0])):
for k in range(len(a[0])):
T[i][j]=T[i][j]+a[i][k]*b[k][j]
return T
else:
print 'Error: Invalid Matrices'
if __name__ == '__main__':
x=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
y=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
print cross_basic(x,y)
print cross_parallel(x,y)
결과 : 당신이
[[ 90 100 110 120]
[202 228 254 280]
[314 356 398 440]
[426 484 542 600]]
[[ 90 100 110 120]
[202 228 254 280]
[314 356 398 440]
[426 484 542 600]]