# Standalone kernel harness (no backend linked). # nice make -j4 build test + bench into $(OUT) # make test [N=2] N million random iterations per kernel family + exhaustive grid # make bench throughput per level (under flock /tmp/sift-perf.lock) # make bench-col the same for the column kernels (src/col/kern*.c) # make bench-shred the shredder kernels (src/col/shred_kern*.c) against their composition from the shared slots # make SANITIZE=1 test ASan + UBSan build (into $(OUT)-san) # make colodd [R=20] the column kernels at lengths 0..4097 around every vector width, on exact-size buffers (use SANITIZE=1) OUT ?= /tmp/sift-kernels-tools N ?= 2 LIB = $(SRC)/bm25/kernels.c $(SRC)/bm25/kernels_avx2.c $(SRC)/bm25/kernels_avx512.c $(SRC)/bm25/kernels_neon.c \ $(SRC)/col/kern.c $(SRC)/col/kern_avx2.c $(SRC)/col/kern_avx512.c $(SRC)/col/kern_neon.c \ $(SRC)/col/shred_kern.c $(SRC)/col/shred_kern_avx2.c $(SRC)/col/shred_kern_avx512.c $(SRC)/col/shred_kern_neon.c \ $(SRC)/col/codec_kern.c $(SRC)/col/codec_avx2.c $(SRC)/col/codec_avx512.c $(SRC)/col/codec_neon.c \ $(SRC)/agg/kern.c $(SRC)/agg/kern_avx2.c $(SRC)/agg/kern_avx512.c $(SRC)/agg/kern_neon.c \ $(SRC)/bm25/bitmap_scalar.c $(SRC)/bm25/bitmap_avx2.c $(SRC)/bm25/bitmap_avx512.c $(SRC)/bm25/bitmap_neon.c HDR = $(SRC)/bm25/kernels.h $(SRC)/bm25/kernels_int.h $(SRC)/col/kern.h $(SRC)/col/kern_int.h $(SRC)/col/shred.h $(SRC)/agg/kern.h $(SRC)/col/codec.h $(SRC)/col/codec_int.h $(SRC)/col/codec_vec.h harness.h include ../tools.mk $(OUT)/bench: $(OUT)/bench.o $(OUT)/bench_col.o $(OUT)/bench_shred.o $(OUT)/alt.o $(OBJ) $(CC) $(CFLAGS) -o $@ $^ $(LDLIBS) $(OUT)/colodd: $(OUT)/colodd.o $(OBJ) $(CC) $(CFLAGS) -o $@ $^ $(LDLIBS) colodd: $(OUT)/colodd $(OUT)/colodd $(R) bench-col: $(OUT)/bench $(FLOCK) $(OUT)/bench col bench-shred: $(OUT)/bench $(FLOCK) $(OUT)/bench shred .PHONY: bench-col bench-shred colodd