我希望使用并行gnu扩展来加速数组的混乱,然后将混洗数组用作涉及排序的实验的工作负载。我的两个目标是产生工作量的速度,以及实验结果的可重复性。提供了这些gnu扩展的说明here。我最后对界面感到困惑:
从我读到的,要么我通过自己的RNG,就像标准库允许的那样, 但后来我想我需要担心线程安全问题。这里的文档(std::random_shuffle in cppreference)没有说明关于生成器的线程安全要求,上面的gnu链接也没有。所以,我假设最坏的情况。
或者,如果我没有通过我自己的RNG,那么我假设图书馆会处理它。我假设他们确实在实现中考虑了RNG的多线程问题(尽管我找不到证实这一点的文档)。但是这让我遇到了问题:我想控制种子,以确保我正在进行的实验是可重复的。我没有找到关于控制默认生成器种子的文档。
这两种方法都有明显的缺点。
第三种选择是传入线程安全生成器,例如,使用锁定。考虑到我正在尝试并行化它,这看起来很愚蠢。它可能仍然比纯顺序洗牌更好。我没试过。
另一种选择是基于线程本地状态的选项,但是我开始厌倦了如何使用这个库函数。
注意:提前生成工作负载并记住它不是一个选项,因为我想生成多GB的数据。
你会做什么?你知道我错过了一些其他的文件吗?