[petsc-dev] use of hash table vs array in various places in PETSc

Mark F. Adams mark.adams at columbia.edu
Mon Sep 19 16:29:00 CDT 2011


An alternative to a virtual function is changing the hash table code:

#define HASH_FACT 79943
#define HASHT(ta,x) ((unsigned long)((HASH_FACT*(unsigned long)x)%ta->tablesize))

and make HASH_FACT a variable.  Set HASH_FACT  to 1 if you want an array (and thus the index (x) is less than the table size tablesize).  The index x is one based so the hash function should modified:

#define HASHT(ta,x) ((unsigned long)((HASH_FACT*(unsigned long)(x-1))%ta->tablesize))

Mark

On Sep 19, 2011, at 4:20 PM, Jed Brown wrote:

> On Mon, Sep 19, 2011 at 22:13, Aron Ahmadia <aron.ahmadia at kaust.edu.sa> wrote:
> BG/P has in-order superscalar execution, you *will* stall on that cache miss because the compiler will not do you any favors in terms of separating the load of the data from its use.
> 
> An indirect call without SMT has a hard stall if the vtable is not in cache too because nothing can be done until that address is loaded. Of course if you call through the same objects a bunch of times, the vtable will be hot, so no issues.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20110919/5dd563bf/attachment.html>


More information about the petsc-dev mailing list