【发布时间】:2015-04-10 03:59:23
【问题描述】:
我想在 CUDA 中编写一个内核,该内核将并行生成 the Halton sequence,每个线程生成并存储 1 个值。
查看序列,似乎生成序列中的每个后续值都涉及在生成前一个值时所做的工作。从头开始生成每个值将涉及冗余工作并导致线程执行时间之间存在很大差距。
有什么方法可以通过改进串行算法的并行内核来做到这一点?我对并行编程真的很陌生,所以如果答案是一些众所周知的模式,请原谅这个问题。
注意:我确实在教科书中找到了this link(它使用它但没有描述它是如何工作的)但是那里的文件链接已经失效。
【问题讨论】:
-
您可能希望查看 CURAND 中的 Sobol 准随机生成器作为替代方案。如果 Halton 序列的递归可表示为变换矩阵和状态向量之间的矩阵向量乘法,则可以通过让线程 i 在 O(log(n)) 时间内计算 M**i 来并行化它,然后执行矩阵-向量乘法生成第 i 个状态向量。您还可以预先计算 M 的幂以减少冗余计算。
标签: c++ cuda parallel-processing montecarlo