Quiero escribir una estrategia para evaluar elementos en una matriz en paralelo. Las viejas estrategias tenían parArr
para hacer esto (see here). Pero esto no se encuentra en el nuevo módulo Control.Parallel.Strategies.Cómo escribir estrategias de matriz Haskell
E.g. Evaluación lista paralela: map f myList `using` parList rdeepseq
que le gustaría ser capaz de hacer algo como: amap f myArr `using` parArr rdeepseq
, donde amap
es de Data.Array.Base y aplica una función a cada uno de los elementos (secuencialmente).
Lo siguiente parece funcionar pero me pregunto si lo está haciendo bien, y quiero saber cómo podría definir mi propio parArr
.
Esto funciona: amap ((+1) `using` rpar) $ Array.array (0,4) [(0,10),(1,20),(2,30),(3,40),(4,50)]
@ dave4420: gracias por la edición :-) – vis
¿Estás seguro de que funciona? Porque '' (+1) 'usando' rpar'' es bastante extraño. Evaluará la expresión '(+1)' en paralelo, lo cual no tiene mucho sentido porque '(+1)' es una expresión lambda, por lo tanto, ya está en WHNF y no queda nada por evaluar. Puede que haya querido decir '' amap (('using' rpar). (+ 1)) '', ¿no? – Rotsor
¿Por qué no utilizar 'repa' o' vector', que ya tienen estrategias paralelas, y son mucho más flexibles en general? –