|
@@ -65,7 +65,6 @@ def dict_perf_generator(perfsymbol):
|
|
|
return p
|
|
|
|
|
|
def future_generator(g, n_jobs, perfsymbol):
|
|
|
- p=dict_perf_generator(perfsymbol)
|
|
|
# g is generated by delayed function, after converting to a list, the format is [function, (arg1, arg2, ... ,)]
|
|
|
L=list(g)
|
|
|
# generate a list of function according to g
|
|
@@ -80,7 +79,9 @@ def future_generator(g, n_jobs, perfsymbol):
|
|
|
L_func.append(f(*L_args))
|
|
|
return L_func
|
|
|
# get the number of block
|
|
|
- if n_jobs<0:
|
|
|
+ if n_jobs<-n_cpus-1 or n_jobs>n_cpus:
|
|
|
+ print("Error: n_jobs is out of range, number of CPUs is", n_cpus)
|
|
|
+ elif n_jobs<0:
|
|
|
n_block=n_cpus+1+n_jobs
|
|
|
else:
|
|
|
n_block=n_jobs
|
|
@@ -89,11 +90,16 @@ def future_generator(g, n_jobs, perfsymbol):
|
|
|
# operation in each split list
|
|
|
L_fut=[]
|
|
|
for i in range(len(L_split)):
|
|
|
- fut=starpupy.task_submit(lf, L_split[i], p.get_struct())
|
|
|
- L_fut.append(fut)
|
|
|
+ if perfsymbol==None:
|
|
|
+ fut=starpupy.task_submit(lf, L_split[i])
|
|
|
+ L_fut.append(fut)
|
|
|
+ else:
|
|
|
+ p=dict_perf_generator(perfsymbol)
|
|
|
+ fut=starpupy.task_submit(lf, L_split[i], p.get_struct())
|
|
|
+ L_fut.append(fut)
|
|
|
return L_fut
|
|
|
|
|
|
-def parallel(*, mode, n_jobs=None, perfmodel, \
|
|
|
+def parallel(*, mode="normal", n_jobs=1, perfmodel=None, end_msg=None,\
|
|
|
backend=None, verbose=0, timeout=None, pre_dispatch='2 * n_jobs',\
|
|
|
batch_size='auto', temp_folder=None, max_nbytes='1M',\
|
|
|
mmap_mode='r', prefer=None, require=None):
|
|
@@ -106,8 +112,7 @@ def parallel(*, mode, n_jobs=None, perfmodel, \
|
|
|
for i in range(len(L_fut)):
|
|
|
L_res=await L_fut[i]
|
|
|
res.extend(L_res)
|
|
|
- print(res)
|
|
|
- #p.free_struct()
|
|
|
+ #print(res)
|
|
|
return res
|
|
|
asyncio.run(asy_main())
|
|
|
return asy_main
|
|
@@ -117,7 +122,16 @@ def parallel(*, mode, n_jobs=None, perfmodel, \
|
|
|
def parallel_future(g):
|
|
|
L_fut=future_generator(g, n_jobs, perfmodel)
|
|
|
fut=asyncio.gather(*L_fut)
|
|
|
- return fut
|
|
|
+ if end_msg==None:
|
|
|
+ return fut
|
|
|
+ else:
|
|
|
+ loop = asyncio.get_running_loop()
|
|
|
+ async def await_fut():
|
|
|
+ retval=await fut
|
|
|
+ print(end_msg)
|
|
|
+ return retval
|
|
|
+ return loop.run_in_executor(None, await_fut)
|
|
|
+ #return fut
|
|
|
return parallel_future
|
|
|
|
|
|
def delayed(f):
|
|
@@ -128,10 +142,9 @@ def delayed(f):
|
|
|
|
|
|
######################################################################
|
|
|
# dump performance model
|
|
|
-def dump_perfmodel(perfmodel):
|
|
|
+def perfmodel_plot(perfmodel):
|
|
|
p=dict_perf[perfmodel]
|
|
|
starpupy.save_history_based_model(p.get_struct())
|
|
|
-
|
|
|
-# dump function
|
|
|
-def dump(value, filename, compress=0, protocol=None, cache_size=None):
|
|
|
- pickle.dump(value, filename, protocol)
|
|
|
+ os.system('starpu_perfmodel_plot -s "' + perfmodel +'"')
|
|
|
+ os.system('gnuplot starpu_'+perfmodel+'.gp')
|
|
|
+ os.system('gv starpu_'+perfmodel+'.eps')
|