#4004: Improve performance of a few functions in Foreign.Marshal.*
---------------------------------+------------------------------------------
Reporter: rtvd | Owner:
Type: task | Status: new
Priority: normal | Component: Runtime System
Version: 6.12.2 | Keywords:
Os: Unknown/Multiple | Testcase:
Architecture: Unknown/Multiple | Failure: Runtime performance bug
Patch: 1 |
---------------------------------+------------------------------------------
A number of functions in Foreign.Marshal.* are relatively slow. The
reasons for it are:
* Division and multiplication operations when determining the size of
memory block in words (bit shifts should be used instead).
* The functions do not get inlined and so do not optimize away things
dependent on the data type in question.
A couple of patches fix at least some of the performance issues.
With both of them applied, the results of performance improvement, as
tested by a basic benchmark in non-threaded RTS are:
{{{
TEST NAME BEFORE AFTER
withCString: 146.391 ns 133.646 ns
alloca: 51.424 ns 15.208 ns
allocaBytes: 31.872 ns 14.501 ns
mallocForeignPointer: 34.630 ns 17.498 ns
bytestring: 94.872 ns 58.938 ns
mvar: 61.473 ns 54.806 ns
alloca+advancePtr: 54.480 ns 14.687 ns
new/finalizerFree: 61.172 ns 44.144 ns
with: 69.096 ns 14.600 ns
}}}
Please could someone take a look at the patches I offer and merge them
into the repository?
One of them is for the runtime system (definitions for Cmm), another one
is for Foreign.Marsha.*.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4004>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs