2012-03-02 4 views
2

Кто-нибудь знает, как параллельно выполнять вычисление биномиального коэффициента? Любой ресурс для многоядерных процессоров или CUDA был бы полезен, спасибо.Параллельное вычисление биномиального коэффициента

+0

Вы знаете, что 'nCp = n!/(p! * (n - p)!) ', правильно? Так зачем вам распараллеливать? – tom

+1

Я думаю, что этот вопрос является хорошей отправной точкой: http://stackoverflow.com/questions/4256188/binomial-coefficient –

+0

@tom просто хочет быстрый способ вычисления этих коэффициентов, скажем, n или p очень бит? – Ang

ответ

1

Я хотел бы начать с следующего.

  • Создайте массив размера (n + 1) и заполните его 1, 1, 2, 3, .... n.
  • Выполняйте инклюзивное сканирование этого массива с помощью операции с продуктом. На этот момент у вас будет массив [n] = n !. т. е. массив [0] = 0 !, массив 1 = 1! array [100] = 100! и так далее.
  • Теперь, когда у вас есть все факториалы от 0! к n !, вы можете выполнить (n!/p! * (n - p)!) очень легко.

Для первой и последней операций могут потребоваться специальные ядра. Вторая операция может быть выполнена с использованием тяги и операции inclusive_scan.

РЕДАКТИРОВАТЬ

Что касается недостатков, как упоминался выше в комментариях, будет Precison проблемы даже с 64-битными целыми числами по разумным большим размерам п. Но это основной алгоритм, который вам нужно будет использовать.

Смежные вопросы