2011-12-28 12 views
7

Mi piace molto l'interfaccia di Repa, anche a prescindere dalle sue capacità di concorrenza. E in effetti ho bisogno che gli array di repa siano sequenziali, dato che i miei array sono relativamente piccoli e la loro parallelizzazione è inutile, persino dannosa.Repa Senza Parallelizzazione

Tuttavia io uso parallelizzazione nel mio programma con parallelo-io, quindi lo compilo -threaded ed eseguo con +RTS -Nx. E questo consente la parallelizzazione per repa. C'è un modo per disattivare le funzionalità di concorrenza di repa?

Hm, mentre sto scrivendo ho capito che è improbabile che abbia bisogno di altro, quindi DIM1, quindi forse dovrei passare a Vector. Ma comunque la risposta alla domanda sarà utile.

Il messaggio di avviso che ottengo con corrono parallele è

Data.Array.Repa: Performing nested parallel computation sequentially. 
    You've probably called the 'force' function while another instance was 
    already running. This can happen if the second version was suspended due 
    to lazy evaluation. Use 'deepSeqArray' to ensure that each array is fully 
    evaluated before you 'force' the next one. 

Io in realtà non hanno alcun force nel mio codice.

+0

È una domanda interessante, ma sei * sicuro * che consentire a repa di parallelizzare fa male le prestazioni? L'hai profilato? –

+0

@DanBurton almeno con N4 esegue ~ 3 volte più a lungo che senza '+ RTS Nx'. Anche se potrebbe essere dovuto all'emissione di messaggi di avvertimento. Metterò il messaggio di avviso al post – Yrogirg

+0

Sarei incredibilmente sorpreso se ripassi operazioni parallele su array troppo piccoli per trarne vantaggio. Scommetterei pesantemente sull'uscita del messaggio di avviso che causa il rallentamento. – ehird

risposta

3

Utilizzare la versione di sviluppo di Repa 3 da http://code.ouroborus.net/repa/repa-head. Ha una versione di "force" (come si chiama computeS) che valuterà l'array in sequenza.

Repa non sequenziale automaticamente le operazioni su piccoli array. Con (map f xs) il tempo di esecuzione dipende tanto da cosa fa 'f' quanto dalla dimensione di 'xs'. Repa non tenta di capire cosa sta facendo la 'f' (sarebbe difficile), quindi non sa quanto sarà costoso il calcolo.

Problemi correlati