__gnu_parallel :: random_shuffle的种子和线程安全性

时间:2015-02-25 06:55:23

标签: c++ random parallel-processing libstdc++

我希望使用并行gnu扩展来加速数组的混乱,然后将混洗数组用作涉及排序的实验的工作负载。我的两个目标是产生工作量的速度,以及实验结果的可重复性。提供了这些gnu扩展的说明here。我最后对界面感到困惑:

从我读到的,要么我通过自己的RNG,就像标准库允许的那样, 但后来我想我需要担心线程安全问题。这里的文档(std::random_shuffle in cppreference)没有说明关于生成器的线程安全要求,上面的gnu链接也没有。所以,我假设最坏的情况。

或者,如果我没有通过我自己的RNG,那么我假设图书馆会处理它。我假设他们确实在实现中考虑了RNG的多线程问题(尽管我找不到证实这一点的文档)。但是这让我遇到了问题:我想控制种子,以确保我正在进行的实验是可重复的。我没有找到关于控制默认生成器种子的文档。

这两种方法都有明显的缺点。

第三种选择是传入线程安全生成器,例如,使用锁定。考虑到我正在尝试并行化它,这看起来很愚蠢。它可能仍然比纯顺序洗牌更好。我没试过。

另一种选择是基于线程本地状态的选项,但是我开始厌倦了如何使用这个库函数。

注意:提前生成工作负载并记住它不是一个选项,因为我想生成多GB的数据。

你会做什么?你知道我错过了一些其他的文件吗?

0 个答案:

没有答案