Ho un'operazione map
(che viene effettivamente eseguita in parallelo utilizzando parMap
da Control.Parallel.Strategies
) che richiede un po 'di tempo. Dato che so quante volte viene applicata la funzione (n
in questo contesto), come posso visualizzare facilmente, ogni tanto, quante delle applicazioni n
sono state valutate?Tieni traccia dei progressi di una `mappa`
La soluzione più ovvia sarebbe quella di fare la mappa di un mapM
con alcuni putStr
all'interno della funzione di mappatura, ma sarebbe:
- prendere una quantità necessaria di efficienza
- non assaggiare lo stato ogni volta in un mentre ma in ogni applicazioni
- fondamentalmente rimuovere tutte le cose buone di un algoritmo deterministico nel contesto di parallelismo
Quindi, c'è un modo per tenere traccia di questa informazione, che mi manca, che evita questi problemi?
A parte i "campionati" apparentemente significativi in rumeno, cosa significa "campionate"? – dfeuer
Si potrebbe voler esaminare il pacchetto 'monad-par'. Non sembra proprio andare dove stai guardando, ma 'Control.Monad.Par.IO' può alleviare un po 'il dolore. È concepibile che tu possa collegare il tipo di goo che fa andare ThreadScope, ma dubito che ti darà tutto ciò che desideri. Un'altra opzione potrebbe essere quella di usare qualcosa di orribile e non sicuro come 'trace' o' unsafePerformIO' per lasciare che i thread riportino il completamento. Penso che il problema essenziale sia che "questo thread è già finito?" non è una domanda che ha senso in un contesto puro. – dfeuer
Dovresti aggiungere il tipo di 'parMap', o menzionare se proviene da' Control.Parallel.Strategies'. – Zeta