2012-03-02 51 views
2

任何人都知道如何并行执行二项系数计算?对于多核或CUDA的任何资源都会有所帮助,谢谢。并行计算二项式系数

+0

你知道'nCp = n! /(p!*(n - p)!)',对吗?那么为什么你需要并行? – tom 2012-03-02 12:54:30

+1

我认为这个问题是一个好的开始点:http://stackoverflow.com/questions/4256188/binomial-coefficient – 2012-03-02 13:09:44

+0

@tom只是想快速的方式来计算这些系数,说n或p是非常位? – Ang 2012-03-02 13:26:33

回答

1

我会从下面开始。

  • 创建一个大小为(n + 1)的数组,然后用1,1,2,3,... n填充它。
  • 使用产品操作对此阵列执行包容性扫描。在 这一点你会有数组[n] = n !.即数组[0] = 0!,数组1 = 1!数组[100] = 100!等等。
  • 现在你有从0的每个因子!到n !,你可以很容易地执行(n!/ p!*(n - p)!)。

第一次和最后一次操作可能需要定制内核。第二个操作可以使用推力和inclusive_scan操作完成。

编辑

至于缺点,如上面的评论中提到,将有精密度的问题,即使在合理的大尺寸n个64个整数。但这是您需要使用的基本算法。