profiling and ~64x perf improvements

lean
Avril 4 years ago
parent a2167bd106
commit 5d4a44ab57
Signed by: flanchan
GPG Key ID: 284488987C31F630

1
.gitignore vendored

@ -3,3 +3,4 @@ obj
build/ build/
test/ test/
shuffle3-* shuffle3-*
profiling/

@ -16,6 +16,8 @@ RELEASE_LDFLAGS?= -O3 -flto
DEBUG_CFLAGS?= -g -O0 DEBUG_CFLAGS?= -g -O0
DEBUG_LDFLAGS?= -O0 DEBUG_LDFLAGS?= -O0
STRIP=strip
OBJ = $(addprefix obj/,$(SRC:.c=.o)) OBJ = $(addprefix obj/,$(SRC:.c=.o))
.PHONY: release .PHONY: release
@ -35,7 +37,7 @@ $(BUILD)/$(PROJECT)-release: CFLAGS+= $(RELEASE_CFLAGS)
$(BUILD)/$(PROJECT)-release: LDFLAGS+= $(RELEASE_LDFLAGS) $(BUILD)/$(PROJECT)-release: LDFLAGS+= $(RELEASE_LDFLAGS)
$(BUILD)/$(PROJECT)-release: $(OBJ) $(BUILD)/$(PROJECT)-release: $(OBJ)
$(CC) $^ $(CFLAGS) -o $@ $(LDFLAGS) $(CC) $^ $(CFLAGS) -o $@ $(LDFLAGS)
strip $@ $(STRIP) $@
$(BUILD)/$(PROJECT)-debug: CFLAGS+= $(DEBUG_CFLAGS) $(BUILD)/$(PROJECT)-debug: CFLAGS+= $(DEBUG_CFLAGS)
$(BUILD)/$(PROJECT)-debug: LDFLAGS+= $(DEBUG_LDFLAGS) $(BUILD)/$(PROJECT)-debug: LDFLAGS+= $(DEBUG_LDFLAGS)

@ -18,6 +18,8 @@ CFLAGS += $(COMMON_FLAGS) --std=gnu11
CXXFLAGS += $(COMMON_FLAGS) --std=gnu++20 -fno-exceptions CXXFLAGS += $(COMMON_FLAGS) --std=gnu++20 -fno-exceptions
LDFLAGS += -lfmt LDFLAGS += -lfmt
STRIP=strip
RELEASE_CFLAGS?= -O3 -flto $(OPT_FLAGS) RELEASE_CFLAGS?= -O3 -flto $(OPT_FLAGS)
RELEASE_CXXFLAGS?= -O3 -flto $(CXX_OPT_FLAGS) RELEASE_CXXFLAGS?= -O3 -flto $(CXX_OPT_FLAGS)
RELEASE_LDFLAGS?= -O3 -flto RELEASE_LDFLAGS?= -O3 -flto
@ -58,7 +60,7 @@ $(PROJECT)-release: CXXFLAGS += $(RELEASE_CXXFLAGS)
$(PROJECT)-release: LDFLAGS += $(RELEASE_LDFLAGS) $(PROJECT)-release: LDFLAGS += $(RELEASE_LDFLAGS)
$(PROJECT)-release: $(OBJ) $(PROJECT)-release: $(OBJ)
$(CXX) $^ $(CXXFLAGS) -o $@ $(LDFLAGS) $(CXX) $^ $(CXXFLAGS) -o $@ $(LDFLAGS)
strip $@ $(STRIP) $@
$(PROJECT)-debug: CFLAGS+= $(DEBUG_CFLAGS) $(PROJECT)-debug: CFLAGS+= $(DEBUG_CFLAGS)
$(PROJECT)-debug: CXXFLAGS += $(DEBUG_CXXFLAGS) $(PROJECT)-debug: CXXFLAGS += $(DEBUG_CXXFLAGS)

@ -23,7 +23,7 @@ namespace rng {
inline void unshuffle(R& rng, span<T> span) inline void unshuffle(R& rng, span<T> span)
{ {
if(!span.size()) return; if(!span.size()) return;
std::vector<std::size_t> rng_values; std::vector<std::size_t> rng_values(span.size());
fmt::print(" -> unshuffling {} objects...", span.size()); fmt::print(" -> unshuffling {} objects...", span.size());
for(std::size_t i=span.size()-1;i>0;i--) for(std::size_t i=span.size()-1;i>0;i--)

@ -13,37 +13,9 @@
_Static_assert(sizeof(float)==sizeof(uint32_t), "float is not 32 bits"); _Static_assert(sizeof(float)==sizeof(uint32_t), "float is not 32 bits");
struct prog_args {
int argc;
char ** argv;
};
/*
static void shuffle_file(const char* filename)
{
panic("unimplemented");
}
static void unshuffle_file(const char* filename)
{
panic("unimplemented");
}*/
//XXX: Not using this anymore
static void* map_callback(mmap_t map, void* user)
{
struct prog_args args = *(struct prog_args*)user;
dprintf("fd %d mapped (sz %lu) (ptr %p)\n", map.fd, map.len, map.ptr);
return NULL;
}
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
struct prog_args args = {.argc = argc, .argv = argv}; //struct prog_args args = {.argc = argc, .argv = argv};
//rng_test(); //rng_test();
@ -62,26 +34,3 @@ int main(int argc, char** argv)
return 0; return 0;
} }
#ifdef _TEST
static void do_reinterpret_test()
{
char* string = "Hello world.. how are you?????";
size_t string_sz = strlen(string);
size_t outsz;
uint64_t* string_as_longs = bytes_to_long((uint8_t*)string, string_sz, &outsz);
printf("%s (%lu) -> u64 %lu\n", string, string_sz, outsz);
for (register int i=0;i<outsz;i++) {
printf(" %lu\n", string_as_longs[i]);
}
printf("OK!\n\n");
float* string_as_floats = bytes_to_float((uint8_t*)string, string_sz, &outsz);
printf("%s (%lu) -> f32 %lu\n", string, string_sz, outsz);
for (register int i=0;i<outsz;i++) {
printf(" %f\n", string_as_floats[i]);
}
printf("OK!\n\n");
}
#endif

@ -17,12 +17,16 @@ std::tuple<T, T> minmax_t(const span<T>& array, Fn keep)
{ {
T highest; T highest;
T lowest; T lowest;
bool init=false;
for(std::size_t i=0;i<array.size();i++) for(std::size_t i=0;i<array.size();i++)
{ {
if(!keep(array[i])) continue; if(!keep(array[i])) continue;
auto item = array[i]; auto item = array[i];
if(!i) lowest = highest = item; if(!init) {
init = true;
lowest = highest = item;
}
else if(item < lowest) lowest = item; else if(item < lowest) lowest = item;
else if(item > highest) highest = item; else if(item > highest) highest = item;
} }

Loading…
Cancel
Save