Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH v3] [NOT for git] avutil/tests/map: benchmark code [BENCHMARK included]
@ 2025-04-15 20:50 Michael Niedermayer
  2025-04-15 23:24 ` softworkz .
  0 siblings, 1 reply; 3+ messages in thread
From: Michael Niedermayer @ 2025-04-15 20:50 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

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".

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [FFmpeg-devel] [PATCH v3] [NOT for git] avutil/tests/map: benchmark code [BENCHMARK included]
  2025-04-15 20:50 [FFmpeg-devel] [PATCH v3] [NOT for git] avutil/tests/map: benchmark code [BENCHMARK included] Michael Niedermayer
@ 2025-04-15 23:24 ` softworkz .
  2025-04-16 13:52   ` Michael Niedermayer
  0 siblings, 1 reply; 3+ messages in thread
From: softworkz . @ 2025-04-15 23:24 UTC (permalink / raw)
  To: FFmpeg development discussions and patches



> -----Original Message-----
> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of
> Michael Niedermayer
> Sent: Dienstag, 15. April 2025 22:51
> 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]
> 

[..]

> 
> 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;
>  }
> --

Hi Michael,

is av_map_get() supposed tg work? I wasn't able to retrieve any values
(always null return).


Thanks


_______________________________________________
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".

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [FFmpeg-devel] [PATCH v3] [NOT for git] avutil/tests/map: benchmark code [BENCHMARK included]
  2025-04-15 23:24 ` softworkz .
@ 2025-04-16 13:52   ` Michael Niedermayer
  0 siblings, 0 replies; 3+ messages in thread
From: Michael Niedermayer @ 2025-04-16 13:52 UTC (permalink / raw)
  To: FFmpeg development discussions and patches


[-- Attachment #1.1: Type: text/plain, Size: 4201 bytes --]

On Tue, Apr 15, 2025 at 11:24:37PM +0000, softworkz . wrote:
> 
> 
> > -----Original Message-----
> > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of
> > Michael Niedermayer
> > Sent: Dienstag, 15. April 2025 22:51
> > 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]
> > 
> 
> [..]
> 
> > 
> > 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;
> >  }
> > --
> 
> Hi Michael,
> 
> is av_map_get() supposed tg work? I wasn't able to retrieve any values
> (always null return).

if you flip the #if 0 above this is a test that tests
av_map_get() and other functions.
Its new code and certainly bugs remain.
If you found cases that dont work, send a patch that adds these
cases to this test, and ill look at it eventually
or even better send a patch that fixes the issue you found

thx

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

If you drop bombs on a foreign country and kill a hundred thousand
innocent people, expect your government to call the consequence
"unprovoked inhuman terrorist attacks" and use it to justify dropping
more bombs and killing more people. The technology changed, the idea is old.

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

[-- Attachment #2: Type: text/plain, Size: 251 bytes --]

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-04-16 13:52 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-04-15 20:50 [FFmpeg-devel] [PATCH v3] [NOT for git] avutil/tests/map: benchmark code [BENCHMARK included] Michael Niedermayer
2025-04-15 23:24 ` softworkz .
2025-04-16 13:52   ` Michael Niedermayer

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