[GHC] #8061: Support for Complex Double in Foreign Function Interface

GHC ghc-devs at haskell.org
Mon Aug 12 07:11:25 CEST 2013


#8061: Support for Complex Double in Foreign Function Interface
-------------------------------------+------------------------------------
        Reporter:  dsamperi          |            Owner:
            Type:  feature request   |           Status:  new
        Priority:  normal            |        Milestone:
       Component:  Compiler          |          Version:  7.6.3
      Resolution:                    |         Keywords:
Operating System:  Unknown/Multiple  |     Architecture:  Unknown/Multiple
 Type of failure:  None/Unknown      |       Difficulty:  Unknown
       Test Case:                    |       Blocked By:
        Blocking:                    |  Related Tickets:
-------------------------------------+------------------------------------
Changes (by carter):

 * cc: carter.schonwald@… (added)


Comment:

 this is a matter near and dear to me.

 the best way to work around this in current GHC (and indeed what i'll be
 doing soon) is to have a wrapper on the C/Fortran side that takes a
 pointer to a single element storable array for a Complex Floats and
 Complex Doubles. I'll then pass a pointer to a single elem array via FFI,
 and read the answer from the storable array on the haskell side.  For any
 interesting numerical algorithms, i believe this trick, which would be
 internal/private to the library, is not likely to be any performance
 bottle neck.


 the complex number case is pretty easy to handle that way. Also you
 shouldn't use hs-linear-algebra, no ones maintaining it (i spent some time
 trying to clean it up, decided it wasn't worth it, will be releasing my
 own alternative in a few weeks)

 though because complex doubles and floats have a memory layout specified
 by the ieee (i believe), adding support via a scheme like what Simon is
 suggesting would be pretty nice

  I *believe* that for general structs, it might be less clear... aren't C
 structure padded to satisfy platform specific alignment constraints? Is
 that specified per platform ABI?

 @Simon,
 GHC HEAD in the -fllvm path could pretty cheaply have unboxed complex
 numbers using the SIMD  machinery on supported platforms. (gratned... that
 wouldn't quite be portable and the native code gen needs some simd love
 before such a rep would be viable)

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8061#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler




More information about the ghc-tickets mailing list