Being systematic about the flattening.
This commit is contained in:
parent
93f4e1d9b4
commit
a0c545e2c4
44
Makefile
44
Makefile
|
@ -19,6 +19,50 @@ all: $(EXECUTABLES)
|
||||||
parse: main.cpp common_defs.h linux-perf-events.h
|
parse: main.cpp common_defs.h linux-perf-events.h
|
||||||
$(CXX) $(CXXFLAGS) -o parse main.cpp
|
$(CXX) $(CXXFLAGS) -o parse main.cpp
|
||||||
|
|
||||||
|
testflatten: parse parsenocheesy parsenodep2 parsenodep4 parsenodep6 parsenodep8 parsenodep10 parsenodep12 parsenodep14 parsenodep16
|
||||||
|
for filename in jsonexamples/twitter.json jsonexamples/gsoc-2018.json jsonexamples/citm_catalog.json jsonexamples/canada.json ; do \
|
||||||
|
echo $$filename ; \
|
||||||
|
set -x; \
|
||||||
|
./parse $$filename ; \
|
||||||
|
./parsenocheesy $$filename ; \
|
||||||
|
./parsenocheesy $$filename ; \
|
||||||
|
./parsenodep2 $$filename ; \
|
||||||
|
./parsenodep4 $$filename ; \
|
||||||
|
./parsenodep6 $$filename ; \
|
||||||
|
./parsenodep8 $$filename ; \
|
||||||
|
./parsenodep10 $$filename ; \
|
||||||
|
./parsenodep12 $$filename ; \
|
||||||
|
./parsenodep14 $$filename ; \
|
||||||
|
./parsenodep16 $$filename ; \
|
||||||
|
set +x; \
|
||||||
|
done
|
||||||
|
|
||||||
|
parsenocheesy: main.cpp common_defs.h linux-perf-events.h
|
||||||
|
$(CXX) $(CXXFLAGS) -o parsenocheesy main.cpp -DSUPPRESS_CHEESY_FLATTEN
|
||||||
|
|
||||||
|
parsenodep2: main.cpp common_defs.h linux-perf-events.h
|
||||||
|
$(CXX) $(CXXFLAGS) -o parsenodep2 main.cpp -DNO_PDEP_PLEASE -DNO_PDEP_WIDTH=2
|
||||||
|
|
||||||
|
parsenodep4: main.cpp common_defs.h linux-perf-events.h
|
||||||
|
$(CXX) $(CXXFLAGS) -o parsenodep4 main.cpp -DNO_PDEP_PLEASE -DNO_PDEP_WIDTH=4
|
||||||
|
|
||||||
|
parsenodep6: main.cpp common_defs.h linux-perf-events.h
|
||||||
|
$(CXX) $(CXXFLAGS) -o parsenodep6 main.cpp -DNO_PDEP_PLEASE -DNO_PDEP_WIDTH=6
|
||||||
|
|
||||||
|
parsenodep8: main.cpp common_defs.h linux-perf-events.h
|
||||||
|
$(CXX) $(CXXFLAGS) -o parsenodep8 main.cpp -DNO_PDEP_PLEASE -DNO_PDEP_WIDTH=8
|
||||||
|
|
||||||
|
parsenodep10: main.cpp common_defs.h linux-perf-events.h
|
||||||
|
$(CXX) $(CXXFLAGS) -o parsenodep10 main.cpp -DNO_PDEP_PLEASE -DNO_PDEP_WIDTH=10
|
||||||
|
|
||||||
|
parsenodep12: main.cpp common_defs.h linux-perf-events.h
|
||||||
|
$(CXX) $(CXXFLAGS) -o parsenodep12 main.cpp -DNO_PDEP_PLEASE -DNO_PDEP_WIDTH=12
|
||||||
|
|
||||||
|
parsenodep14: main.cpp common_defs.h linux-perf-events.h
|
||||||
|
$(CXX) $(CXXFLAGS) -o parsenodep14 main.cpp -DNO_PDEP_PLEASE -DNO_PDEP_WIDTH=14
|
||||||
|
|
||||||
|
parsenodep16: main.cpp common_defs.h linux-perf-events.h
|
||||||
|
$(CXX) $(CXXFLAGS) -o parsenodep16 main.cpp -DNO_PDEP_PLEASE -DNO_PDEP_WIDTH=16
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f $(EXECUTABLES)
|
rm -f $(EXECUTABLES)
|
||||||
|
|
14
main.cpp
14
main.cpp
|
@ -296,6 +296,20 @@ never_inline bool flatten_indexes(size_t len, ParsedJson & pj) {
|
||||||
while (s) {
|
while (s) {
|
||||||
base_ptr[base++] = (u32)idx + __builtin_ctzll(s); s &= s - 1ULL;
|
base_ptr[base++] = (u32)idx + __builtin_ctzll(s); s &= s - 1ULL;
|
||||||
}
|
}
|
||||||
|
#elif defined(NO_PDEP_PLEASE)
|
||||||
|
#ifndef NO_PDEP_WIDTH
|
||||||
|
#define NO_PDEP_WIDTH 6
|
||||||
|
#endif
|
||||||
|
u32 cnt = __builtin_popcountll(s);
|
||||||
|
u32 next_base = base + cnt;
|
||||||
|
while (s) {
|
||||||
|
for(size_t i = 0; i < NO_PDEP_WIDTH; i++) {
|
||||||
|
base_ptr[base+i] = (u32)idx + __builtin_ctzll(s);
|
||||||
|
s = s & (s - 1);
|
||||||
|
}
|
||||||
|
base += NO_PDEP_WIDTH;
|
||||||
|
}
|
||||||
|
base = next_base;
|
||||||
#else
|
#else
|
||||||
u32 cnt = __builtin_popcountll(s);
|
u32 cnt = __builtin_popcountll(s);
|
||||||
u32 next_base = base + cnt;
|
u32 next_base = base + cnt;
|
||||||
|
|
Loading…
Reference in New Issue