From 0214a3c71f33ea798921c425578ef5455c2d7fe8 Mon Sep 17 00:00:00 2001 From: Sean Barrett Date: Sat, 16 Apr 2016 10:04:03 -0700 Subject: [PATCH 1/2] untested simple batching; document algorithm; automatically use sqrt(N) instead of 32 as cluster size --- stb_connected_components.h | 87 +++++++++++++++++++++++++++++++++++--- tests/stb.dsp | 4 ++ tests/test_c_compilation.c | 5 --- 3 files changed, 85 insertions(+), 11 deletions(-) diff --git a/stb_connected_components.h b/stb_connected_components.h index 2ba78a3..c3b6886 100644 --- a/stb_connected_components.h +++ b/stb_connected_components.h @@ -24,18 +24,49 @@ // publish, and distribute this file as you see fit. // // +// CHANGELOG +// +// 0.92 (2016-04-16) Compute sqrt(N) cluster size by default +// 0.91 (2016-04-15) Initial release +// // TODO: -// - test C++ compile // - better API documentation -// - internals documentation (including algorithm) +// - more comments // - try re-integrating naive algorithm & compare performance -// - batching (keep data structure w/ dirty clusters) +// - more optimized batching (current approach still recomputes clumps many times) // - function for setting a grid of squares at once (just use batching) // - shrink data by storing only, say, 2X max exits // (instead of max exits per clump), and repack cluster // if it runs out (possibly by just rebuilding from scratch, // could even use dirty-cluster data structure) // should reduce 1Kx1K from ~66MB to ~8MB +// +// ALGORITHM +// +// The NxN grid map is split into sqrt(N) x sqrt(N) blocks called +// "clusters". Each cluster independently computes a set of connected +// components within that cluster (ignoring all connectivity out of +// that cluster) using a union-find disjoint set forest. This produces a bunch +// of locally connected components called "clumps". Each clump is (a) connected +// within its cluster, (b) does not directly connect to any other clumps in the +// cluster (though it may connect to them by paths that lead outside the cluster, +// but those are ignored at this step), and (c) maintains an adjacency list of +// all clumps in adjacent clusters that it _is_ connected to. Then a second +// union-find disjoint set forest is used to compute connected clumps +// globally, across the whole map. Reachability is then computed by +// finding which clump each input point belongs to, and checking whether +// those clumps are in the same "global" connected component. +// +// The above data structure can be updated efficiently; on a change +// of a single grid square on the map, only one cluster changes its +// purely-local state, so only one cluster needs its clumps fully +// recomputed. Clumps in adjacent clusters need their adjacency lists +// updated: first to remove all references to the old clumps in the +// rebuilt cluster, then to add new references to the new clumps. Both +// of these operations can use the existing "find which clump each input +// point belongs to" query to compute that adjacency information rapidly. +// In one 1024x1024 test on a specific machine, a one-tile update was +// about 250 times faster than a full disjoint-set-forest on the full map. #ifndef INCLUDE_STB_CONNECTED_COMPONENTS_H #define INCLUDE_STB_CONNECTED_COMPONENTS_H @@ -79,12 +110,18 @@ extern int stbcc_query_grid_node_connection(stbcc_grid *g, int x1, int y1, int x // bonus functions // +// wrap multiple stbcc_update_grid calls in these function to compute +// multiple updates more efficiently; cannot make queries inside batch +extern void stbcc_update_batch_begin(stbcc_grid *g); +extern void stbcc_update_batch_end(stbcc_grid *g); + // query the grid data structure for whether a given square is open or not extern int stbcc_query_grid_open(stbcc_grid *g, int x, int y); // get a unique id for the connected component this is in; it's not necessarily // small, you'll need a hash table or something to remap it (or just use extern unsigned int stbcc_get_unique_id(stbcc_grid *g, int x, int y); +#define STBCC_NULL_UNIQUE_ID 0xffffffff // returned for closed map squares #ifdef __cplusplus } @@ -104,11 +141,19 @@ extern unsigned int stbcc_get_unique_id(stbcc_grid *g, int x, int y); #define STBCC__MAP_STRIDE (1 << (STBCC_GRID_COUNT_X_LOG2-3)) #ifndef STBCC_CLUSTER_SIZE_X_LOG2 -#define STBCC_CLUSTER_SIZE_X_LOG2 5 + #define STBCC_CLUSTER_SIZE_X_LOG2 (STBCC_GRID_COUNT_X_LOG2/2) // log2(sqrt(2^N)) = 1/2 * log2(2^N)) = 1/2 * N + #if STBCC_CLUSTER_SIZE_X_LOG2 > 6 + #undef STBCC_CLUSTER_SIZE_X_LOG2 + #define STBCC_CLUSTER_SIZE_X_LOG2 6 + #endif #endif #ifndef STBCC_CLUSTER_SIZE_Y_LOG2 -#define STBCC_CLUSTER_SIZE_Y_LOG2 5 + #define STBCC_CLUSTER_SIZE_Y_LOG2 (STBCC_GRID_COUNT_Y_LOG2/2) + #if STBCC_CLUSTER_SIZE_Y_LOG2 > 6 + #undef STBCC_CLUSTER_SIZE_Y_LOG2 + #define STBCC_CLUSTER_SIZE_Y_LOG2 6 + #endif #endif #define STBCC__CLUSTER_SIZE_X (1 << STBCC_CLUSTER_SIZE_X_LOG2) @@ -182,6 +227,8 @@ typedef struct struct st_stbcc_grid { int w,h,cw,ch; + int in_batched_update; + //unsigned char cluster_dirty[STBCC__CLUSTER_COUNT_Y][STBCC__CLUSTER_COUNT_X]; // could bitpack, but: 1K x 1K => 1KB unsigned char map[STBCC__GRID_COUNT_Y][STBCC__MAP_STRIDE]; // 1K x 1K => 1K x 128 => 128KB stbcc__clumpid clump_for_node[STBCC__GRID_COUNT_Y][STBCC__GRID_COUNT_X]; // 1K x 1K x 2 = 2MB stbcc__cluster cluster[STBCC__CLUSTER_COUNT_Y][STBCC__CLUSTER_COUNT_X]; // 1K x 1K x 0.5 x 64 x 2 = 64MB @@ -196,6 +243,7 @@ int stbcc_query_grid_node_connection(stbcc_grid *g, int x1, int y1, int x2, int int cy1 = STBCC__CLUSTER_Y_FOR_COORD_Y(y1); int cx2 = STBCC__CLUSTER_X_FOR_COORD_X(x2); int cy2 = STBCC__CLUSTER_Y_FOR_COORD_Y(y2); + assert(!g->in_batched_update); if (c1 == STBCC__NULL_CLUMPID || c2 == STBCC__NULL_CLUMPID) return 0; label1 = g->cluster[cy1][cx1].clump[c1].global_label; @@ -215,6 +263,8 @@ unsigned int stbcc_get_unique_id(stbcc_grid *g, int x, int y) stbcc__clumpid c = g->clump_for_node[y][x]; int cx = STBCC__CLUSTER_X_FOR_COORD_X(x); int cy = STBCC__CLUSTER_Y_FOR_COORD_Y(y); + assert(!g->in_batched_update); + if (c == STBCC__NULL_CLUMPID) return STBCC_NULL_UNIQUE_ID; return g->cluster[cy][cx].clump[c].global_label.c; } @@ -355,7 +405,25 @@ void stbcc_update_grid(stbcc_grid *g, int x, int y, int solid) stbcc__add_connections_to_adjacent_cluster(g, cx, cy-1, 0, 1); stbcc__add_connections_to_adjacent_cluster(g, cx, cy+1, 0,-1); - stbcc__build_connected_components_for_clumps(g); + if (!g->in_batched_update) + stbcc__build_connected_components_for_clumps(g); + #if 0 + else + g->cluster_dirty[cy][cx] = 1; + #endif +} + +void stbcc_update_batch_begin(stbcc_grid *g) +{ + assert(!g->in_batched_update); + g->in_batched_update = 1; +} + +void stbcc_update_batch_end(stbcc_grid *g) +{ + assert(g->in_batched_update); + g->in_batched_update = 0; + stbcc__build_connected_components_for_clumps(g); // @OPTIMIZE: only do this if update was non-empty } size_t stbcc_grid_sizeof(void) @@ -374,6 +442,13 @@ void stbcc_init_grid(stbcc_grid *g, unsigned char *map, int w, int h) g->h = h; g->cw = w >> STBCC_CLUSTER_SIZE_X_LOG2; g->ch = h >> STBCC_CLUSTER_SIZE_Y_LOG2; + g->in_batched_update = 0; + + #if 0 + for (j=0; j < STBCC__CLUSTER_COUNT_Y; ++j) + for (i=0; i < STBCC__CLUSTER_COUNT_X; ++i) + g->cluster_dirty[j][i] = 0; + #endif for (j=0; j < h; ++j) { for (i=0; i < w; i += 8) { diff --git a/tests/stb.dsp b/tests/stb.dsp index b5ce917..bc4cf60 100644 --- a/tests/stb.dsp +++ b/tests/stb.dsp @@ -106,6 +106,10 @@ SOURCE=..\stb_c_lexer.h # End Source File # Begin Source File +SOURCE=..\stb_connected_components.h +# End Source File +# Begin Source File + SOURCE=..\stb_divide.h # End Source File # Begin Source File diff --git a/tests/test_c_compilation.c b/tests/test_c_compilation.c index 3f4148c..de25330 100644 --- a/tests/test_c_compilation.c +++ b/tests/test_c_compilation.c @@ -9,7 +9,6 @@ #define STB_RECT_PACK_IMPLEMENTATION #define STB_VOXEL_RENDER_IMPLEMENTATION #define STB_EASY_FONT_IMPLEMENTATION -#define STB_CONNECTED_COMPONENTS_IMPLEMENTATION #include "stb_easy_font.h" #include "stb_herringbone_wang_tile.h" @@ -22,10 +21,6 @@ #include "stb_image_resize.h" #include "stb_rect_pack.h" -#define STBCC_GRID_COUNT_X_LOG2 10 -#define STBCC_GRID_COUNT_Y_LOG2 10 -#include "stb_connected_components.h" - #define STBVOX_CONFIG_MODE 1 #include "stb_voxel_render.h" From e585dad291c07afe6dd955d4c605fe57c69243b3 Mon Sep 17 00:00:00 2001 From: Sean Barrett Date: Sat, 16 Apr 2016 11:21:59 -0700 Subject: [PATCH 2/2] change map image formats to workaround stb_image bug --- data/map_01.png | Bin 26064 -> 30625 bytes data/map_03.png | Bin 8747 -> 9620 bytes stb_connected_components.h | 2 +- tests/stb.dsp | 2 +- 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/map_01.png b/data/map_01.png index a2be8a0dc73c2be249a6250034362ccaef2644ea..2da3f5cb3925b0fd39dac2f93df1fa8d94d5a09e 100644 GIT binary patch literal 30625 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 Cw(-ya literal 26064 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 DDUN2i literal 8747 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 diff --git a/stb_connected_components.h b/stb_connected_components.h index c3b6886..57fa55c 100644 --- a/stb_connected_components.h +++ b/stb_connected_components.h @@ -33,7 +33,7 @@ // - better API documentation // - more comments // - try re-integrating naive algorithm & compare performance -// - more optimized batching (current approach still recomputes clumps many times) +// - more optimized batching (current approach still recomputes local clumps many times) // - function for setting a grid of squares at once (just use batching) // - shrink data by storing only, say, 2X max exits // (instead of max exits per clump), and repack cluster diff --git a/tests/stb.dsp b/tests/stb.dsp index bc4cf60..eff7541 100644 --- a/tests/stb.dsp +++ b/tests/stb.dsp @@ -42,7 +42,7 @@ RSC=rc.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /G6 /MT /W3 /GX /Z7 /O2 /Ob2 /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "TT_TEST" /FD /c +# ADD CPP /nologo /G6 /MT /W3 /GX /Z7 /O2 /Ob2 /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "GRID_TEST" /FD /c # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe