From: Michael Niedermayer <michael@niedermayer.cc> To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Subject: [FFmpeg-devel] [PATCH v3] [NOT for git] avutil/tests/map: benchmark code [BENCHMARK included] Date: Tue, 15 Apr 2025 22:50:39 +0200 Message-ID: <20250415205039.537639-1-michael@niedermayer.cc> (raw) 1000 entries variable bytes at location 4-5 4809796 decicycles in av_map_add, 512 runs, 0 skips 3457756 decicycles in av_map_get, 512 runs, 0 skips 153482370 decicycles in av_dict_set, 512 runs, 0 skips 150045088 decicycles in av_dict_get, 512 runs, 0 skips 100 entries variable bytes at location 4-5 307603 decicycles in av_map_add, 512 runs, 0 skips 207432 decicycles in av_map_get, 512 runs, 0 skips 1743433 decicycles in av_dict_set, 512 runs, 0 skips 1609130 decicycles in av_dict_get, 512 runs, 0 skips 10 entries variable bytes at location 4-5 20084 decicycles in av_map_add, 512 runs, 0 skips 11145 decicycles in av_map_get, 512 runs, 0 skips 45788 decicycles in av_dict_set, 512 runs, 0 skips 21217 decicycles in av_dict_get, 512 runs, 0 skips 5 entries variable bytes at location 4-5 9476 decicycles in av_map_add, 512 runs, 0 skips 4427 decicycles in av_map_get, 512 runs, 0 skips 19873 decicycles in av_dict_set, 512 runs, 0 skips 5404 decicycles in av_dict_get, 512 runs, 0 skips 3 entries variable bytes at location 4-5 5695 decicycles in av_map_add, 512 runs, 0 skips 2553 decicycles in av_map_get, 512 runs, 0 skips 11035 decicycles in av_dict_set, 511 runs, 1 skips 2523 decicycles in av_dict_get, 512 runs, 0 skips 3 entries variable bytes at location 0-1 5496 decicycles in av_map_add, 512 runs, 0 skips 1939 decicycles in av_map_get, 512 runs, 0 skips 10867 decicycles in av_dict_set, 510 runs, 2 skips 1823 decicycles in av_dict_get, 512 runs, 0 skips 5 entries variable bytes at location 0-1 8228 decicycles in av_map_add, 512 runs, 0 skips 3297 decicycles in av_map_get, 512 runs, 0 skips 17767 decicycles in av_dict_set, 512 runs, 0 skips 3917 decicycles in av_dict_get, 512 runs, 0 skips 10 entries variable bytes at location 0-1 16691 decicycles in av_map_add, 511 runs, 1 skips 7220 decicycles in av_map_get, 512 runs, 0 skips 37575 decicycles in av_dict_set, 512 runs, 0 skips 11498 decicycles in av_dict_get, 512 runs, 0 skips 100 entries variable bytes at location 0-1 231734 decicycles in av_map_add, 512 runs, 0 skips 128690 decicycles in av_map_get, 512 runs, 0 skips 1017393 decicycles in av_dict_set, 512 runs, 0 skips 726464 decicycles in av_dict_get, 512 runs, 0 skips 1000 entries variable bytes at location 0-1 3857396 decicycles in av_map_add, 512 runs, 0 skips 2563465 decicycles in av_map_get, 512 runs, 0 skips 70277113 decicycles in av_dict_set, 512 runs, 0 skips 68152897 decicycles in av_dict_get, 512 runs, 0 skips Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> --- libavutil/tests/map.c | 57 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/libavutil/tests/map.c b/libavutil/tests/map.c index 38f0a153e68..90950769f98 100644 --- a/libavutil/tests/map.c +++ b/libavutil/tests/map.c @@ -26,6 +26,8 @@ #include "libavutil/mem.h" #include "libavutil/map.h" +#include "libavutil/timer.h" +#include "libavutil/dict.h" static void print_set(const AVMap *s) { @@ -37,6 +39,7 @@ static void print_set(const AVMap *s) int main(void) { +#if 0 void *our_cmp[] = { strcmp, av_map_strcmp_keyvalue, @@ -185,6 +188,60 @@ int main(void) av_map_free(&set); av_assert0(!set); } +#else +#define N_ENTRIES 1000 +#define P 4 + fprintf(stderr, "%d entries variable bytes at location %d-%d\n", N_ENTRIES, P, P+1); + for (int runs = 0; runs < 1000; runs++) { + AVMap *map = av_map_new(av_strcasecmp, NULL, NULL); + for(int pass = 0; pass < 2; pass++) { + START_TIMER + unsigned r = 5; + for(int i=0; i<N_ENTRIES; i++) { + r = r*123 + 7; + char str[7] = "TEST"; + str[P ] = r; + str[P+1] = r>>8; + if(pass == 0) { + av_map_add(map, str, 7, str, 7, 0); + } else { + av_map_get(map, str, av_strcasecmp); + } + } + if (pass) { + STOP_TIMER("av_map_get") + } else { + STOP_TIMER("av_map_add") + } + } + av_map_free(&map); + } + + for (int runs = 0; runs < 1000; runs++) { + AVDictionary *dict = NULL; + for(int pass = 0; pass < 2; pass++) { + START_TIMER + unsigned r = 5; + for(int i=0; i<N_ENTRIES; i++) { + r = r*123 + 7; + char str[7] = "TEST"; + str[P ] = r; + str[P+1] = r>>8; + if(pass == 0) { + av_dict_set(&dict, str, str, 0); + } else { + av_dict_get(dict, str, NULL, 0); + } + } + if (pass) { + STOP_TIMER("av_dict_get") + } else { + STOP_TIMER("av_dict_set") + } + } + av_dict_free(&dict); + } +#endif return 0; } -- 2.49.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next reply other threads:[~2025-04-15 20:50 UTC|newest] Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top 2025-04-15 20:50 Michael Niedermayer [this message] 2025-04-15 23:24 ` softworkz . 2025-04-16 13:52 ` Michael Niedermayer
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20250415205039.537639-1-michael@niedermayer.cc \ --to=michael@niedermayer.cc \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git