Created
September 3, 2018 15:57
-
-
Save lemire/3007d6c51a180f71dcaa1ab12e2e78f1 to your computer and use it in GitHub Desktop.
another mystery
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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