Skip to content

Instantly share code, notes, and snippets.

@lemire
Created September 3, 2018 15:57
Show Gist options
  • Save lemire/3007d6c51a180f71dcaa1ab12e2e78f1 to your computer and use it in GitHub Desktop.
Save lemire/3007d6c51a180f71dcaa1ab12e2e78f1 to your computer and use it in GitHub Desktop.
another mystery
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include "roaring.c"
int main() {
size_t bitmapcount = 2;
size_t size = 1000000;
struct timeval st, et;
int elapsed;
roaring_bitmap_t **bitmaps =
(roaring_bitmap_t **)malloc(sizeof(roaring_bitmap_t *) * bitmapcount);
for (size_t i = 0; i < bitmapcount; i++) {
bitmaps[i] = roaring_bitmap_from_range(0, 1000000, 1);
for (size_t j = 0; j < size / 20; j++)
roaring_bitmap_remove(bitmaps[i], rand() % size);
// optionally run
roaring_bitmap_printf_describe(bitmaps[i]);
}
gettimeofday(&st, NULL);
roaring_bitmap_t *answer1 = roaring_bitmap_or_many(bitmapcount, bitmaps);
gettimeofday(&et, NULL);
elapsed = ((et.tv_sec - st.tv_sec) * 1000000) + (et.tv_usec - st.tv_usec);
printf("roaring_bitmap_or_many time: %d micro seconds\n", elapsed);
gettimeofday(&st, NULL);
roaring_bitmap_t *answer2 = roaring_bitmap_copy(bitmaps[0]);
for (size_t i = 1; i < bitmapcount; i++) {
roaring_bitmap_or_inplace(answer2, bitmaps[i]);
}
gettimeofday(&et, NULL);
elapsed = ((et.tv_sec - st.tv_sec) * 1000000) + (et.tv_usec - st.tv_usec);
printf("naive time: %d micro seconds\n", elapsed);
for (size_t i = 0; i < bitmapcount; i++) {
roaring_bitmap_run_optimize(bitmaps[i]);
roaring_bitmap_printf_describe(bitmaps[i]);
}
gettimeofday(&st, NULL);
roaring_bitmap_t *answer3 = roaring_bitmap_or_many(bitmapcount, bitmaps);
gettimeofday(&et, NULL);
elapsed = ((et.tv_sec - st.tv_sec) * 1000000) + (et.tv_usec - st.tv_usec);
printf("roaring_bitmap_or_many time: %d micro seconds\n", elapsed);
gettimeofday(&st, NULL);
roaring_bitmap_t *answer4 = roaring_bitmap_copy(bitmaps[0]);
for (size_t i = 1; i < bitmapcount; i++) {
roaring_bitmap_or_inplace(answer2, bitmaps[i]);
}
gettimeofday(&et, NULL);
elapsed = ((et.tv_sec - st.tv_sec) * 1000000) + (et.tv_usec - st.tv_usec);
printf("naive OR time: %d micro seconds\n", elapsed);
for (size_t i = 0; i < bitmapcount; i++) {
roaring_bitmap_free(bitmaps[i]);
}
free(bitmaps);
roaring_bitmap_free(answer1);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment