
#9281: Rewrite `integer-gmp` to use only non-allocating GMP functions -------------------------------------+------------------------------------- Reporter: hvr | Owner: hvr Type: task | Status: patch Priority: normal | Milestone: 7.10.1 Component: libraries | Version: (other) | Keywords: integer-gmp Resolution: | Operating System: Unknown/Multiple Differential Revisions: Phab:D82 | Type of failure: None/Unknown Architecture: | Test Case: Unknown/Multiple | Blocking: Difficulty: Unknown | Blocked By: | Related Tickets: #8647 | -------------------------------------+------------------------------------- Changes (by hvr): * status: new => patch * differential: => Phab:D82 * related: => #8647 Comment: Here's a first [Phab:D82 draft version]. The number of library calls going into GMP (via `ltrace -c`, which btw is a wonderful tool for that) is essentially the same (in some cases slightly lower, as the new code is a bit more clever in some ways). However, I'm seeing improvements as well as regressions in the Nofib results (see Phab:P6). I still need to figure out what the reason is for the rather visible allocation increase in `primetest` (and maybe `kahan` and `bernouilli`). It could be this different approach undoes part of #8647, as we can't so easily optimistically allocate temporary single-limbs on the stack (on the bright side, we've got almost no Cmm code anymore...) Btw, while implementing the code, I would have wanted to write {{{#!hs foreign import ccall unsafe "integer_gmp_mpn_tdiv_q" c_mpn_tdiv_q :: MutableByteArray# s -> ByteArray# -> GmpSize# -> ByteArray# -> GmpSize# -> State# s -> State# s foreign import ccall unsafe "gmp.h __gmpn_divrem_1" c_mpn_divrem_1 :: MutableByteArray# s -> GmpSize# -> ByteArray# -> GmpSize# -> GmpLimb# -> State# s -> (# s, Word# #) }}} However, GHC insisted on having me to write `... -> IO ()` and `... -> IO Word` respectively, thus forcing a boxed/lifted `Word` even though `{-# LANGUAGE UnliftedFFITypes #-}` was in effect. Any chance to have unlifted types allowed for `IO`-like FFI ccalls to reduce the overhead? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9281#comment:4 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler