2011-12-28 19 views
7

Bardzo podoba mi się interfejs Repa, nawet niezależnie od jego możliwości współbieżności. I potrzebuję tablic repa, aby były sekwencyjne, ponieważ moje tablice są względnie małe, a ich równoległość jest bezużyteczna, a nawet szkodliwa.Repa bez paralelizacji

Jednak używam równoległości w moim programie z parallel-io, więc kompiluję go -threaded i uruchamiam z +RTS -Nx. I to umożliwia równoległość do repa. Czy istnieje sposób na wyłączenie funkcji współbieżności repa?

Hm, pisząc to, zrozumiałem, że jest mało prawdopodobne, że będę potrzebował czegoś innego niż DIM1, więc może powinienem przełączyć się na Vector. Niemniej jednak odpowiedź na pytanie będzie przydatna.

Komunikat ostrzegawczy pojawia się równolegle jest

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. 

I rzeczywiście nie mają force w moim kodzie.

+0

Jest to interesujące pytanie, ale czy jesteś pewny *, że zezwalanie na równoległość repa jest szkodliwe dla wydajności? Czy profilowałeś to? –

+0

@DanBurton przynajmniej z N4 działa ~ 3 razy dłużej niż bez '+ RTS Nx'. Chociaż może to być spowodowane wyjściem komunikatów ostrzegawczych. Umieszczę ostrzeżenie na stanowisku – Yrogirg

+0

Byłbym niesamowicie zaskoczony, gdyby repa paraliżowała operacje na tablicach zbyt małych, aby z nich skorzystać. Stawiałbym mocno na komunikat ostrzegawczy powodujący spowolnienie. – ehird

Odpowiedz

3

Użyj wersji rozwojowej repa 3 z http://code.ouroborus.net/repa/repa-head. Ma wersję "force" (jak nazywane computeS), która sekwencyjnie oceni tablicę.

Repa nie dokonuje automatycznego sekwencjonowania operacji na małych tablicach. Z (map f xs) środowisko wykonawcze zależy w dużej mierze od tego, co "f" robi jako rozmiar "xs". Repa nie próbuje ustalić, co robi "f" (to byłoby trudne), więc nie wie, jak kosztowne będzie obliczenie.

Powiązane problemy