Implementing and optimizing a simple graph metric

Joseph Rushton Wakeling joseph.wakeling at webdrake.net
Wed Sep 18 10:19:06 PDT 2013


On Wednesday, 18 September 2013 at 15:17:25 UTC, Joseph Rushton 
Wakeling wrote:
> I think I did give std.array.Array a trial when trying to speed 
> up its performance, and I don't remember it making any 
> difference (if anything it may have slowed things down).  But 
> I'll give it a second look and report back.

I tried rewriting the variable declarations:

     Array!T centrality;
     centrality.length = g.vertexCount;
     centrality[] = to!T(0);
     Array!size_t stack;
     stack.length = g.vertexCount;
     Array!T sigma;
     sigma.length = g.vertexCount;
     Array!T delta;
     delta.length = g.vertexCount;
     Array!long d;
     d.length = g.vertexCount;
     auto q = VertexQueue(g.vertexCount);
     Appender!(size_t[])[] p = new 
Appender!(size_t[])[g.vertexCount];

It results in a moderate slowdown of the code, at a guess because 
it increases the total number of mallocs/deallocs.

I note that there seems to be no way to initialize 
std.container.Array as having a certain length ... ?

I tried instead using std.array.uninitializedArray to initialize 
the arrays in the betweenness() function -- it was a bit 
difficult to judge here: with a relatively small number of calls 
to betweenness() it seems to have resulted in a speedup, but with 
very many calls, it seems to have been slower.


More information about the Digitalmars-d-announce mailing list