@@ -314,6 +314,10 @@ foldManyChunksOfSum :: Int -> Handle -> IO Int
314foldManyChunksOfSum n inh =
314foldManyChunksOfSum n inh =
315 S.length $ IP.foldMany (FL.takeLE n FL.sum) (S.unfold FH.read inh)
315 S.length $ IP.foldMany (FL.takeLE n FL.sum) (S.unfold FH.read inh)
317+foldMany1ChunksOfSum :: Int -> Handle -> IO Int
318+foldMany1ChunksOfSum n inh =
319+ S.length $ IP.foldMany1 (FL.takeLE n FL.sum) (S.unfold FH.read inh)
317parseManyChunksOfSum :: Int -> Handle -> IO Int
321parseManyChunksOfSum :: Int -> Handle -> IO Int
318parseManyChunksOfSum n inh =
322parseManyChunksOfSum n inh =
@@ -327,7 +331,6 @@ parseManyChunksOfSum n inh =
327chunksOf :: Int -> Handle -> IO Int
331chunksOf :: Int -> Handle -> IO Int
328chunksOf n inh =
332chunksOf n inh =
329 -- writeNUnsafe gives 2.5x boost here over writeN.
333 -- writeNUnsafe gives 2.5x boost here over writeN.
330− -- XXX replace with S.arraysOf
331 S.length $ S.chunksOf n (AT.writeNUnsafe n) (S.unfold FH.read inh)
334 S.length $ S.chunksOf n (AT.writeNUnsafe n) (S.unfold FH.read inh)
333#ifdef INSPECTION
336#ifdef INSPECTION
@@ -339,6 +342,10 @@ inspect $ 'chunksOf `hasNoType` ''IUF.ConcatState -- FH.read/UF.concat
339inspect $ 'chunksOf `hasNoType` ''MA.ReadUState -- FH.read/A.read
342inspect $ 'chunksOf `hasNoType` ''MA.ReadUState -- FH.read/A.read
345+{-# INLINE arraysOf #-}
346+arraysOf :: Int -> Handle -> IO Int
347+arraysOf n inh = S.length $ IP.arraysOf n (S.unfold FH.read inh)
342o_1_space_reduce_read_grouped :: BenchEnv -> [Benchmark]
349o_1_space_reduce_read_grouped :: BenchEnv -> [Benchmark]
343o_1_space_reduce_read_grouped env =
350o_1_space_reduce_read_grouped env =
344 [ bgroup "reduce/read/chunks"
351 [ bgroup "reduce/read/chunks"
@@ -358,6 +365,14 @@ o_1_space_reduce_read_grouped env =
358 "S.foldMany (FL.take 1 FL.sum)"
365 "S.foldMany (FL.take 1 FL.sum)"
360 $ \inh _ -> inline foldManyChunksOfSum 1 inh
367 $ \inh _ -> inline foldManyChunksOfSum 1 inh
369+ ("S.foldMany1 (FL.take " ++ show (bigSize env) ++ " FL.sum)")
371+ $ \inh _ -> noinline foldMany1ChunksOfSum (bigSize env) inh
373+ "S.foldMany1 (FL.take 1 FL.sum)"
375+ $ \inh _ -> inline foldMany1ChunksOfSum 1 inh
361 , mkBenchSmall
376 , mkBenchSmall
362 ("S.parseMany (FL.take " ++ show (bigSize env) ++ " FL.sum)")
377 ("S.parseMany (FL.take " ++ show (bigSize env) ++ " FL.sum)")
@@ -368,12 +383,20 @@ o_1_space_reduce_read_grouped env =
368 $ \inh _ -> inline parseManyChunksOfSum 1 inh
383 $ \inh _ -> inline parseManyChunksOfSum 1 inh
370 -- folding chunks to arrays
385 -- folding chunks to arrays
371− , mkBenchSmall "S.arraysOf 1" env $ \inh _ ->
386+ , mkBenchSmall "S.chunksOf 1" env $ \inh _ ->
372 chunksOf 1 inh
387 chunksOf 1 inh
373− , mkBench "S.arraysOf 10" env $ \inh _ ->
388+ , mkBench "S.chunksOf 10" env $ \inh _ ->
374 chunksOf 10 inh
389 chunksOf 10 inh
375− , mkBench "S.arraysOf 1000" env $ \inh _ ->
390+ , mkBench "S.chunksOf 1000" env $ \inh _ ->
376 chunksOf 1000 inh
391 chunksOf 1000 inh
393+ -- arraysOf may use a different impl than chunksOf
394+ , mkBenchSmall "S.arraysOf 1" env $ \inh _ ->
396+ , mkBench "S.arraysOf 10" env $ \inh _ ->
398+ , mkBench "S.arraysOf 1000" env $ \inh _ ->