[erlang-questions] A silly set of questions for a silly application.

David Beynon dave@REDACTED
Sat Mar 15 20:32:04 CET 2008


I am currently engaged in a bit of language abuse, specifically  
attempting to use erlang for image processing.  My app consists of  
the following:

A set of image loaders/savers written in C++, connected via ports.

Some image processing code in C++ for the really expensive stuff,  
also connected via ports.

Colour space conversion code in erlang - probably the wrong language,  
but the digraph library convinced me that it was a good idea - it  
figures out the shortest set of conversions between any 2 colour  
spaces and gives me a suitable function.

The initial implementation based its image representation on the  
"array" module, which was fine for my initial small test data sets,  
but completely murdered performance when I got onto full sized images  
(approx 3000*2500 * 3 channel floating point).  After a bit of  
experimentation I more or less doubled the speed by dumping data to a  
list instead, and then increased it by a factor of 10 or so by  
putting in a binary based image representation.  Current performance  
is more or less acceptable.

My questions are essentially as follows:

- Am I correct in thinking that my major performance hit was due to  
the erlang memory manager?  Loading large array and list objects gave  
me an extremely sluggish shell.  Is this due to excessive garbage  

- If so then is there a sensible way of getting around it, or am I  
better off with binary storage?

If the second one is true then it isn't a huge deal, but I will  
probably end up farming more of the processing to external C++  
helpers.  This isn't a huge deal, but I am trying to go for easily  
readable code with moderate performance rather than the fastest  
possible.  I find erlang excels at readable.

final question: Is this a stupid thing to be doing? '-)


More information about the erlang-questions mailing list