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.
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? –
@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
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