Running GHC on the IBM Cell

Suter, Jaap jsuter at ea.com
Fri Dec 22 13:45:39 EST 2006


Hello,
 
I'm trying to get GHC to run on the Cell processor. That is, just on the
PPU PowerPC side. The SPUs will continue to run C programs, managed and
driven by a Haskell manager on the PPU. I'm mostly interested in GHC for
its concurrency features (STM in particular).
 
Not knowing much about GHC yet, here's what I would expect in the ideal
situation.
 
1. The RTS is largely cross-platform already. I might have to make some
minor tweaks, but for the most part it should compile out of the box.
 
2. I setup GHC to compile my .hs files to .hc files; the C
intermediates.
 
3. These are hopefully cross-platform as well, instead of being tied to
my GHC distribution's platform.
 
4. I compile the RTS and .hc files and link them all together.
 
5. Done.
 
This raises a few questions...
 
* Are the .hc files cross-platform? Or does a GHC compiled for PowerPC
generate different intermediate C code than a GHC compiled for X86?
Ideally the platform specifics are hidden inside the RTS and two
different GHC builds will output identical .hc files.
 
* How cross-platform is the RTS?
 
I downloaded the source tarball and dropped it on top of my XP
installation of GHC. I then generated a simple Hello World haskell .hc
intermediate and tried to compile that and the RTS. Unfortunately I ran
into problems because things like HAVE_WINDOWS_H and HAVE_SIGNALS_H were
defined.
 
I started manually editing the code to tweak the configuration but ran
into more problems (signal_set_t doesn't exist on my platform, but can't
be conditionally compiled. static arrays of unknown size (StgWordArray)
make my compiler unhappy. Etcetera).
 
At this point I figured I would stop and ask for some help first, before
I invest a lot of energy in a dead-end path. There must be a simpler
way.
 
I read parts of the "porting GHC to your platform" documentation, but I
believe it addresses a different problem. I don't want to recompile GHC
itself. I want to run my existing GHC on my XP machine and output
intermediate .hc files. I then feed these plus a cross-platform RTS to
my Cell compiler to get a workable program.
 
I suppose I need to regenerate the ghautoconf for my particular platform
(rather than hand-tweaking the existing one). Unfortunately I'm not much
of a Linux or Gnu toolset expert. I see a bunch of config.*  and
configure.* file in the root folder. I suppose I should read up on those
a little more. I'll do my homework first.
 
In the meanwhile, if anybody has any quick and simple advice to make
this process smoother that would be greatly appreciated.
 
Kind regards,

Jaap Suter - http://www.jaapsuter.com
 
Some more random questions...
 
* ghautoconf.h and HsBaseConfig.h have similar #defines (like
HAVE_WINDOWS_H). Is there a reason for that? I always need to update
them in two places now.
 
* After downloading the source tarball and unzipping over my XP GHC
installation, I got both an 'include' and an 'includes' directory. This
is somewhat confusing.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/glasgow-haskell-users/attachments/20061222/d3685d41/attachment.htm


More information about the Glasgow-haskell-users mailing list