Репа без распараллеливания - PullRequest
7 голосов
/ 28 декабря 2011

Мне очень нравится интерфейс Repa, даже независимо от его возможностей параллелизма. И мне действительно нужно, чтобы массивы репы были последовательными, поскольку мои массивы относительно малы, и распараллеливание на них бесполезно, даже вредно.

Однако я использую распараллеливание в моей программе с параллельным вводом-выводом, поэтому я компилирую его -threaded и запускаю с +RTS -Nx. И это дает возможность распараллеливания для repa. Есть ли способ отключить функции параллелизма в repa?

Хм, при написании этого я понял, что вряд ли мне понадобится что-то другое, кроме DIM1, поэтому, возможно, мне стоит перейти на Vector. Но тем не менее ответ на вопрос будет полезен.

Предупреждающее сообщение, которое я получаю при параллельном запуске:

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.

На самом деле в моем коде нет force.

1 Ответ

3 голосов
/ 06 января 2012

Используйте версию Repa 3 для разработки от http://code.ouroborus.net/repa/repa-head. Она имеет версию "force" (так называемый computeS), которая будет оценивать массив последовательно.

Repa не выполняет автоматическую последовательность операций наднебольшие массивы.С (map f xs) время выполнения зависит как от того, что делает f, так и от размера xs.Repa не пытается выяснить, что делает 'f' (это было бы сложно), поэтому он не знает, насколько дорогими будут вычисления.

...