Review Request: Implemented multithreading in KFileItemModelSortAlgorithm

Emmanuel Pescosta emmanuelpescosta099 at gmail.com
Thu Oct 25 12:13:38 BST 2012



> On Oct. 25, 2012, 5:37 a.m., Frank Reininghaus wrote:
> > Thanks for working on this!
> > 
> > How many CPU cores do you have? I have only 2, so I can't really test the ">2 cores" case. However, I have an idea what could be the reason for the performance drop that you see when trying to use more than 2 threads: you actually try to create more threads than QtConcurrent lets you.
> > 
> > Example: Suppose you have 4 cores. Your parallelSort() function will:
> > 
> > * sort the first half using QtConcurrent::run(), which creates a thread 1,
> > * sort the second half using QtConcurrent::run(), which creates a thread 2.
> > 
> > Thread 1 will now split the first half into two quarters and:
> > 
> > * create a thread 3 for the first quarter,
> > * create a thread 4 for the second quarter.
> > 
> > At the same time, thread 2 tries to sort the third and fourth quarters concurrently, but Qt:Concurrent doesn't let it because the number of parallel threads is already equal to the number of cores -> it has to wait until the first half is finished. But note that threads 1 and 2 are actually idle in this scenario!
> > 
> > Suggested solution: in parallelSort(), only sort the first half using QtConcurrent::run(), and sort the second one synchronously using a plain recursive call of parallelSort(). Could you try if that works?
> >

> How many CPU cores do you have?
I have 4 cores. (Every core runs with 100% while sorting)

> you actually try to create more threads than QtConcurrent lets you
Nope, I already thought about that ;) I implemented it without recursive function calls.

> Suggested solution: in parallelSort(), only sort the first half using QtConcurrent::run(), and sort the second one synchronously using a plain recursive call of 
> parallelSort(). Could you try if that works?
Hmm ... 97 seconds for 500.000 files (With recursive parallelSort and with your suggestions)

I will upload my other patch, which uses as many threads as possible (according to idealThreadCount())


- Emmanuel


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/107025/#review20832
-----------------------------------------------------------


On Oct. 24, 2012, 5:20 p.m., Emmanuel Pescosta wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://git.reviewboard.kde.org/r/107025/
> -----------------------------------------------------------
> 
> (Updated Oct. 24, 2012, 5:20 p.m.)
> 
> 
> Review request for Dolphin and Frank Reininghaus.
> 
> 
> Description
> -------
> 
> Implemented multithreading in KFileItemModelSortAlgorithm.
> 
> If more than 100 items to sort and ideal thread count is greater than 1 -> sort them with parallelSort (2 Threads)
> 
> Use maximal 2 Threads, because more than 2 Threads are "slower" (more overhead than speed up). (I also have a patch which uses n Threads for sorting, if you want test it ;)
> 
> 
> Diffs
> -----
> 
>   dolphin/src/kitemviews/private/kfileitemmodelsortalgorithm.h 3a596df 
>   dolphin/src/kitemviews/private/kfileitemmodelsortalgorithm.cpp e0aac13 
> 
> Diff: http://git.reviewboard.kde.org/r/107025/diff/
> 
> 
> Testing
> -------
> 
> About 2 seconds faster with sorting 500.000 files.
> About 5 seconds faster with sorting 1.000.000 files.
> 
> 
> Thanks,
> 
> Emmanuel Pescosta
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.kde.org/mailman/private/kfm-devel/attachments/20121025/cb98783c/attachment.htm>


More information about the kfm-devel mailing list