Defining a custom newByteArray primop that uses calloc?
Brandon Simmons
brandon.m.simmons at gmail.com
Tue Nov 25 20:24:53 UTC 2014
In my tests, using calloc from:
https://hackage.haskell.org/package/missing-foreign-0.1.1/docs/Foreign-Marshal-MissingAlloc.html
was about twice as fast as allocating and zeroing the same amount of
memory with `newByteArray` + any of `copy/set/fillMutableByteArray`
(all three were nearly identical). Is there a way I can reasonably
define my own `newByteArray` that uses calloc?
FWIW here are a couple of the benchmarks I'm working with in criterion:
arrTestSet :: Int -> IO ()
arrTestSet len = do
let eBytes = (P.sizeOf (undefined::Int))*len
a <- P.newAlignedPinnedByteArray
eBytes
(P.alignment (undefined :: Int))
void $ P.setByteArray a 0 len (1::Int)
arrTestCallocAndWrite :: Int -> IO ()
arrTestCallocAndWrite len = do
ptr <- callocBytes (len*(P.sizeOf(undefined::Int))) :: IO (Ptr Int)
pokeElemOff ptr 0 1
free ptr
Thanks,
Brandon
More information about the Glasgow-haskell-users
mailing list