Рассчитать числа Фибоначчи многопроцессным способом? - PullRequest
4 голосов
/ 18 октября 2010

Я пишу калькулятор чисел Фибоначчи с несколькими процессами, у меня есть файл, который отслеживает числа Фибоначчи, сначала открывает файл и записывает первые числа Фибоначчи (0 и 1), затем выполняет fork и его дочерний процесс читает последние два числа складывают их и записывают следующее в файл, закрывают файл и снова разветвляют, этот процесс продолжается таким образом, с разветвлением и дочерним сложением чисел и записью вычисленного числа в файл, с использованием разветвления внутри для не хорошего решения и рекурсивного вызова, Есть ли какие-либо предложения для проблемы ??

Вот ссылка на проблему, которую мы говорить о многопроцессорной части проблема, которая является частью 2

http://cse.yeditepe.edu.tr/~sbaydere/fall2010/cse331/files/assignments/F10A1.pdf

Ответы [ 4 ]

2 голосов
/ 18 октября 2010

Вычисление числа Фибоначчи - это действительно странная идея для многопроцессорности.Действительно, чтобы рассчитать число, вам нужно знать два предыдущих.Несколько процессов не могут вычислить другие числа, кроме следующего и только следующего.Несколько процессов будут все вычислять следующее число Фибоначчи.В любом случае, вы дважды проверьте.

2 голосов
/ 18 октября 2010

Предполагая, что вы рассчитываете их "простым" способом (т.е. без использования хитрой формулы), я не думаю, что это вообще хороший кандидат для параллельной обработки.

Легко придумать решение O (n), но каждый результат зависит от предыдущего, так что распараллеливание сложно. Я не вижу никакой выгоды в вашем текущем параллельном подходе, так как после того, как каждый процесс завершил свою работу и раздвоил ребенка, чтобы получить следующий номер, это в основном сделано ... так что вы могли бы также выполнять работу разветвленного ребенка в существующем процессе.

1 голос
/ 18 октября 2010

Возможно, вы захотите взглянуть на эту статью:

http://cgi.cse.unsw.edu.au/~dons/blog/2007/11/29

Здесь есть еще идеи:

http://www.haskell.org/haskellwiki/The_Fibonacci_sequence

0 голосов
/ 18 октября 2010

, вероятно, это не решает вашу проблему, но вот тривиальный способ вычисления чисел Фибоначчи для данного диапазона

int fibo(int n) { return (n<=2)?n:(fibo(n-1))+(fibo(n-2)); }

...