Fast matrix struct

anonymous via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Dec 14 16:29:29 PST 2014


On Sunday, 14 December 2014 at 22:14:55 UTC, Ryan wrote:
> I'm writing a Matrix struct that I plan to use for some number 
> crunching, which will be intensive at times. So I want it to be 
> fast.
>
> Will I do better by manually managing the memory myself with 
> malloc and free in the constructors/destructor or just using 
> plain D arrays?
>
> The manual way I could bypass the GC and bounds checks. I don't 
> need (or want) any of the fancy appending concatenation and the 
> potential slowdowns from the heap allocations that comes with 
> the builtin arrays.
>
> But I have to wonder, if I just don't use those features, will 
> it be just as fast with the GC (assuming I compile out the 
> bounds checks with the -release compiler option)?
>
> Right now my strategy is to malloc one large chunk of memory in 
> the constructor (and postblit) and treat the 2-d matrix as a 
> 1-d array internally. Then just use pointer arithmetic to 
> access the elements.
>
> I know the best way to know is just to test. But writing both 
> versions would take a LOT of work, and I'm looking for guidance 
> about which path will probably be most fruitful.
>
> Thanks,

Just a hint about "a LOT of work":

----------
struct Hop {

   version(noGC) // defined with a custom compiler switch 
-version=noGC
     private T[] arr;
   else
     std.container.Array!T arr;

}
----------

The GC-free array already exist in the standard library.


More information about the Digitalmars-d-learn mailing list