多线程 – 二项式系数

‘简单’问题,计算二项式系数的最快方法是什么? – 一些线程算法?

我正在寻找提示:) – 没有实现:)

根据下面的等式(从wikipedia开始),最快的方法是将范围i = 1,k分割为线程数,给每个线程一个范围段,每个线程在锁中更新最终结果. “学术方式”是将范围分成任务,每个任务都要计算(n – k i)/ i,然后无论你有多少线程,它们都会循环运行,要求下一个任务.第一是更快,第二是……学术.

编辑:进一步的解释 – 在这两种方式中我们有一些任意数量的线程.通常,线程数等于处理器核心数,因为添加更多线程没有任何好处.两种方式之间的区别在于这些线程正在做什么.

在第一种方式中,每个线程被赋予N,K,I1和I2,其中I1和I2是范围1..K中的段.然后每个线程都拥有它所有的数据,因此它会计算结果的一部分,并在完成更新后得到最终结果.

在第二种方式中,每个线程被赋予N,K,并访问从1到K计数的某个同步计数器.每个线程然后从该共享计数器获取一个值,计算结果的一部分,更新最终结果,并循环开启这直到计数器通知线程没有更多的项目.如果发生一些处理器内核比其他处理器内核更快,那么第二种方式将使所有内核最大限度地使用.第二种方式的下行是太多的同步,有效地阻止了20%的线程.

https://stackoverflow.com/questions/4256188/binomial-coefficient

转载注明原文:多线程 – 二项式系数