【发布时间】:2012-09-21 03:56:22
【问题描述】:
我可以使用哪些并行算法从给定集合中生成随机排列? 特别是适合 CUDA 的提案或论文链接会很有帮助。
Fisher-Yates shuffle 的顺序版本。
例子:
令 S={1, 2, ..., 7} 为源索引集。 目标是并行生成 n 个随机排列。 n 个排列中的每一个都只包含每个源索引一次, 例如{7, 6, ..., 1}。
【问题讨论】:
-
制作 X 个线程局部随机生成器并在每个生成器上运行 Fisher-Yates...?
-
这肯定行得通,但由于 SIMD 执行模型,这对于使用 CUDA 的实现来说也是最坏的情况。
-
你能解释一下最坏的情况吗?您的意思是不同的种子会使所有线程遵循不同的控制路径吗?你为什么这么认为? F-Y shuffle 是一个简单的循环
-
使用
thrust::permutation_iterator怎么样?但是,它确实需要您编写自己的重新索引方案。 -
this 可能感兴趣