Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: "softworkz ." <softworkz-at-hotmail.com@ffmpeg.org>
To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Subject: Re: [FFmpeg-devel] [RFC] AVDictionary2
Date: Sat, 12 Apr 2025 11:02:48 +0000
Message-ID: <DM8P223MB0365F528D03EF414AAEE1390BAB12@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM> (raw)
In-Reply-To: <20250411190608.GC4991@pb2>



> -----Original Message-----
> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of
> Michael Niedermayer
> Sent: Freitag, 11. April 2025 21:06
> To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
> Subject: Re: [FFmpeg-devel] [RFC] AVDictionary2
> 
> Hi
> 
> On Tue, Apr 08, 2025 at 09:30:16PM +0000, softworkz . wrote:
> [...]
> 
> > To tell you the truth - at that point I was thinking: "Ah, clever!
> That's why the AVDictionary is done like that" 😊
> 
> The dictionary implementation is not clever
> look at copy for example it iterates over av_dict_set() which itself
> calls
> av_dict_get() which it itself iterates over the dictionary
> so av_dict_copy() is O(n^2) for example
> 
> also a single fate run, calls av_dict_iterate() 4921207 times
> and fate should mostly be short small files and minimal self contained
> testcases
> 
> thx
> 
> [...]
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB


Hi Michael,


here are the benchmark results from your new AVDictionary2;



$ ./dict2_benchmark 5
Benchmarking AVDictionary vs AVDictionary2 with 5 entries

1. Insertion Performance:
   AVDictionary:  0.009 ms
   AVDictionary2: 0.004 ms (44.4% of original time)

2. Lookup Performance (100% existing keys):
   AVDictionary:  0.076 ms
   AVDictionary2: 0.292 ms (384.2% of original time)

3. Lookup Performance (50% existing keys):
   AVDictionary:  0.074 ms
   AVDictionary2: 0.320 ms (432.4% of original time)

4. Iteration Performance:
   AVDictionary:  0.000 ms
   AVDictionary2: 0.000 ms (-nan(ind)% of original time)

Benchmark completed successfully

admin@it UCRT64 /v/ffbuild/source/ffmpeg
$ ./dict2_benchmark 10
Benchmarking AVDictionary vs AVDictionary2 with 10 entries

1. Insertion Performance:
   AVDictionary:  0.014 ms
   AVDictionary2: 0.013 ms (92.9% of original time)

2. Lookup Performance (100% existing keys):
   AVDictionary:  0.154 ms
   AVDictionary2: 0.370 ms (240.3% of original time)

3. Lookup Performance (50% existing keys):
   AVDictionary:  0.155 ms
   AVDictionary2: 0.291 ms (187.7% of original time)

4. Iteration Performance:
   AVDictionary:  0.000 ms
   AVDictionary2: 0.000 ms (-nan(ind)% of original time)

Benchmark completed successfully

admin@it UCRT64 /v/ffbuild/source/ffmpeg
$ ./dict2_benchmark 100
Benchmarking AVDictionary vs AVDictionary2 with 100 entries

1. Insertion Performance:
   AVDictionary:  0.083 ms
   AVDictionary2: 0.094 ms (113.3% of original time)

2. Lookup Performance (100% existing keys):
   AVDictionary:  1.025 ms
   AVDictionary2: 0.308 ms (30.0% of original time)

3. Lookup Performance (50% existing keys):
   AVDictionary:  1.024 ms
   AVDictionary2: 0.331 ms (32.3% of original time)

4. Iteration Performance:
   AVDictionary:  0.001 ms
   AVDictionary2: 0.002 ms (200.0% of original time)

Benchmark completed successfully

admin@it UCRT64 /v/ffbuild/source/ffmpeg
$ ./dict2_benchmark 1000
Benchmarking AVDictionary vs AVDictionary2 with 1000 entries

1. Insertion Performance:
   AVDictionary:  1.830 ms
   AVDictionary2: 0.605 ms (33.1% of original time)

2. Lookup Performance (100% existing keys):
   AVDictionary:  10.704 ms
   AVDictionary2: 0.446 ms (4.2% of original time)

3. Lookup Performance (50% existing keys):
   AVDictionary:  12.905 ms
   AVDictionary2: 0.614 ms (4.8% of original time)

4. Iteration Performance:
   AVDictionary:  0.026 ms
   AVDictionary2: 0.028 ms (107.7% of original time)

Benchmark completed successfully

admin@it UCRT64 /v/ffbuild/source/ffmpeg
$ ./dict2_benchmark 10000
Benchmarking AVDictionary vs AVDictionary2 with 10000 entries

1. Insertion Performance:
   AVDictionary:  141.084 ms
   AVDictionary2: 4.874 ms (3.5% of original time)

2. Lookup Performance (100% existing keys):
   AVDictionary:  31.234 ms
   AVDictionary2: 0.653 ms (2.1% of original time)

3. Lookup Performance (50% existing keys):
   AVDictionary:  77.258 ms
   AVDictionary2: 0.809 ms (1.0% of original time)

4. Iteration Performance:
   AVDictionary:  0.094 ms
   AVDictionary2: 0.222 ms (236.2% of original time)

Benchmark completed successfully

admin@it UCRT64 /v/ffbuild/source/ffmpeg
$ ./dict2_benchmark 100000
Benchmarking AVDictionary vs AVDictionary2 with 100000 entries

1. Insertion Performance:
   AVDictionary:  16893.151 ms
   AVDictionary2: 80.074 ms (0.5% of original time)

2. Lookup Performance (100% existing keys):
   AVDictionary:  31.368 ms
   AVDictionary2: 0.580 ms (1.8% of original time)

3. Lookup Performance (50% existing keys):
   AVDictionary:  919.646 ms
   AVDictionary2: 0.688 ms (0.1% of original time)

4. Iteration Performance:
   AVDictionary:  0.773 ms
   AVDictionary2: 2.021 ms (261.4% of original time)

Benchmark completed successfully


---


> The dictionary implementation is not clever

No - but faster than the usual dictionary implementation approaches for small numbers of items.
In the context of FFprobe and when used with -show_entries for example, this is operating right within a range where linear is better.

And 3.8 / 4.4 are quite some factors:

2. Lookup Performance (100% existing keys):
   AVDictionary:  0.076 ms
   AVDictionary2: 0.292 ms (384.2% of original time)

3. Lookup Performance (50% existing keys):
   AVDictionary:  0.074 ms
   AVDictionary2: 0.320 ms (432.4% of original time)


I just had thought that it would have been done like this by intention..

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

  parent reply	other threads:[~2025-04-12 11:03 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-08 10:19 Michael Niedermayer
2025-04-08 16:10 ` Romain Beauxis
2025-04-08 20:29   ` Michael Niedermayer
2025-04-08 22:18     ` Gerion Entrup
2025-04-08 22:35       ` Michael Niedermayer
2025-04-08 22:37       ` softworkz .
2025-04-08 16:56 ` softworkz .
2025-04-08 18:16   ` Michael Niedermayer
2025-04-08 18:36     ` softworkz .
2025-04-08 19:45       ` Michael Niedermayer
2025-04-08 21:30         ` softworkz .
2025-04-11 19:06           ` Michael Niedermayer
2025-04-12  1:41             ` softworkz .
2025-04-12 11:02             ` softworkz . [this message]
2025-04-09  0:00 ` Leo Izen
2025-04-09 16:56   ` Michael Niedermayer
2025-04-10  8:40 ` Nicolas George
2025-04-10 18:31   ` softworkz .
2025-04-11 20:50 ` 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=DM8P223MB0365F528D03EF414AAEE1390BAB12@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM \
    --to=softworkz-at-hotmail.com@ffmpeg.org \
    --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