J'utilise actuellement python multiprocess pour faire de la programmation parallèle simple. J'utilise un décorateur asyncpython multiprocess pinning
def async(decorated):
module = getmodule(decorated)
decorated.__name__ += '_original'
setattr(module, decorated.__name__, decorated)
def send(*args, **opts):
return async.pool.apply_async(decorated, args, opts)
return send
puis
@async
def evalfunc(uid, start, end):
veckernel(Posx, Posy, Posz, Quant, Delta)
return (uid, GridVal)
def runit(outdir):
async.pool = Pool(8)
results = []
for uid in range(8):
result = evalfunc(uid,Chunks[uid], Chunks[uid+1])
results.append(result)
Si j'exécuter sur un processeur 8 ou 8 cœurs la machine utilise essentiellement deux noyaux. Pourquoi donc? Existe-t-il un moyen de faire un épinglage adéquat du noyau comme avec les pthreads?
Merci beaucoup, Mark