Cache-coherent hashing for broad-phase collision detection
Darren Grant <[email protected]>
| Newsgroups | gmane.games.devel.algorithms |
|---|---|
| Message-ID | <[email protected]> |
Hi,
I am looking at ways of improving cache coherence for a typical
broad-phase collision detection scenario (cpu). The basic
implementation utilizes these data structures:
struct ObjectTracking {
int ObjectIndex;
int RefCount;
};
typedef set<ObjectTracking> Tile;
struct TilingLevel {
vector<Tile> Tiles;
int Pitch;
Tile& Map(int x, int y) { return Tiles[y*Pitch+x]; }
};
struct TilingHierarchy {
vector<TilingLevel> TilingLevels;
Tile& Map(int level, int x, int y) { return TilingLevels[level].Map(x,y); }
};
And the hot process involves frequent iteration of:
for level from 0 to maxlevel
for y from y0(level) to y1(level)
for x from x0(level) to x1(level)
tilingHierarchy.Map(level,x,y).InsertOrRemove();
Performance becomes an issue here when the std::set allocations get
spread out across process memory. I will therefore replace
individual sets with a single shared map to explore implementations
for coherence:
(level,x,y,ObjectIndex)->(RefCount).
(level,x,y,ObjectIndex) has simple perfect hash functions since the
boundary conditions are known at start. Local memory access roughly
favours tiling levels > tiling level > tile row > tile according to
the given code, but I am wary of less obvious yet still important
observations that may be missed.
Does this sound about right? Are there any better options I have
flown right past?
Thank you.
Cheers,
Darren Grant
------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
GDAlgorithms-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gdalgorithms-list
Archives:
http://sourceforge.net/mailarchive/forum.php?forum_name=gdalgorithms-list