[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: parallel sort at fault? [Re: [PATCH] tests: avoid gross inefficiency
From: |
Jim Meyering |
Subject: |
Re: parallel sort at fault? [Re: [PATCH] tests: avoid gross inefficiency... |
Date: |
Thu, 17 Mar 2011 19:33:05 +0100 |
Pádraig Brady wrote:
> On 16/03/11 15:32, Jim Meyering wrote:
>> Pádraig Brady wrote:
>>>
>>> With SUBTHREAD_LINES_HEURISTIC=128k and -S1M option to sort we get
>>> no threads as
>>> nlines never gets above 12787 (there looks to be around 80 bytes
>>> overhead per line?).
>>> Only when -S >= 12M do we get nlines high enough to create threads.
>>
>> Thanks for pursuing this.
>> Here's a proposed patch to address the other problem.
>> It doesn't have much of an effect (any?) on your
>> issue when using very little memory, but when a sort user
>> specifies -S1M, I think they probably want to avoid the
>> expense (memory) of going multi-threaded.
>>
>> What do you think?
>>
>> -#define INPUT_FILE_SIZE_GUESS (1024 * 1024)
>> +#define INPUT_FILE_SIZE_GUESS (128 * 1024)
>
> This does seem a bit like whack-a-mole
> but at least we're lining them up better.
>
> The above gives reasonable threading by default,
> while reducing the large upfront malloc.
>
> $ for len in 1 79; do
> for i in $(seq 22); do
> lines=$((2<<$i))
> yes "$(printf %${len}s)"| head -n$lines > t.sort
> strace -f -c -e clone ./sort --parallel=16 t.sort -o /dev/null 2>&1 |
> join --nocheck-order -a1 -o1.4,1.5 - /dev/null |
> sed -n "s/\([0-9]*\) clone/$lines\t\1/p"
> done
> done
>
> #lines threads (2 byte lines)
> ------------------------------
> 131072 1
> 262144 3
> 524288 7
> 1048576 15
> 2097152 15
> 4194304 15
> 8388608 15
>
> #lines threads (80 byte lines)
> ------------------------------
> 131072 1
> 262144 3
> 524288 7
> 1048576 15
> 2097152 15
> 4194304 22
> 8388608 60
Thanks for testing and review.
Pushed.