[patch, libstdc++] std::shuffle: Generate two swap positions at a time if possible
Eelis van der Weegen
eelis@eelis.net
Tue May 3 14:42:00 GMT 2016
Ah, thanks, I forgot to re-attach when I sent to include the libstdc++ list.
On 2016-05-03 14:38, Jonathan Wakely wrote:
> ENOPATCH
>
> On 1 May 2016 at 15:21, Eelis <eelis@eelis.net> wrote:
>> Sorry, forgot to include the libstdc++ list.
>>
>> On 2016-05-01 16:18, Eelis wrote:
>>>
>>> Hi,
>>>
>>> The attached patch optimizes std::shuffle for the very common case
>>> where the generator range is large enough that a single invocation
>>> can produce two swap positions.
>>>
>>> This reduces the runtime of the following testcase by 37% on my machine:
>>>
>>> int main()
>>> {
>>> std::mt19937 gen;
>>>
>>> std::vector<int> v;
>>> v.reserve(10000);
>>> for (int i = 0; i != 10000; ++i)
>>> {
>>> v.push_back(i);
>>> std::shuffle(v.begin(), v.end(), gen);
>>> }
>>>
>>> std::cout << v.front() << '\n';
>>> }
>>>
>>> Thoughts?
>>>
>>> Thanks,
>>>
>>> Eelis
>>>
>>
>>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: double-step-shuffle.patch
Type: text/x-patch
Size: 2440 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/libstdc++/attachments/20160503/6189bfbe/attachment.bin>
More information about the Libstdc++
mailing list