Hi, anybody here who are good at parallel processing in Rhino Python?
I made a simple test but the results doesn’t seem right.
I have tried to make a script that lets the cpu calculate n += 1 for 1 second in default one core mode and THEN set up 500 tasks that runs for 1 second IF time ran is less than 1 second. (That should result in x number of tasks that ran for 1 second and the rest of the 500 to be returned as
import System.Threading.Tasks as tasks import rhinoscriptsyntax as rs import time import random def calculateSinglecore(time2Run): time1=time.time() i = 0 while True: i += 1 if time.time()-time1 > time2Run: break return int(i/time2Run) def calculateMulticore(time2Run): points=range(500) results=range(500) timeStart=time.time() def calculate(i): n=0 while time.time()-timeStart < time2Run: n += 1 results[i] = n tasks.Parallel.ForEach(xrange(len(points)), calculate) results = [x for x in results if x != 0] print len(results), "Threads started" print results ### Add up all calculations Total = sum(results) ### measure actual time used and divide sum to get calculations within one second runTime=time.time()-timeStart result = int(Total/runTime) return result test1 = calculateSinglecore(1) print test1,"calculations per second in serial processing" test2 = calculateMulticore(1) print test2,"calculations per second in parallel processing" print round(test2/test1,2), "times faster in parallel"
My results on a 12 core system is:
482991 calculations per second in serial processing
25 Threads started
[45542, 38472, 44854, 45001, 43605, 43845, 48035, 45841, 45119, 43848, 47106, 47589, 36292, 41124, 44695, 43304, 38177, 49657, 47278, 41905, 46837, 44746, 46086, 50670, 45309]
1105097 calculations per second in parallel processing
2.29 times faster in parallel
NOTE: Some thing I don’t understand is that if I set the number of tasks (points and results) to 2 instead of 500 I get the same result… and each task has a higher count…