[patch, libstdc++] std::shuffle: Generate two swap positions at a time if possible

Eelis eelis@eelis.net
Sun May 1 14:25:00 GMT 2016


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
>




More information about the Libstdc++ mailing list