Почему разная скорость вычисления Числа Фибоначчи?
Сразу к проблеме.
Пытаюсь понять причины разного времени выполнения вычисления числа Фибоначчи, которое было выбрано просто для теста.
Тест проводился на 2-х одинаковых серверах с процом xeon E5-2650v2 и системами windows 7 и windows 2012 r2, рабочей станции с i7 3930K с win7 и комп с процом AMD phenom ii (по нему нет инфы) с linux.
Так же программа скомплировалась в .net и в MONO.
Результаты:
xeon win7:: .net=0.043, mono=0.020
xeon sin server:: .net=0.069, mono=0.046
i7 win7:: .net=0.035, mono=0.021
amd linux:: .net=***, mono=0.023
Вопросы:
1. Почему приложение, скомпилированное в mono работает быстрее, чем в .net.
2. Почему на 2-х одинаковых серверах в xeon, windows7 работает почти в 2 раза быстрее чем windows server 2012 r2.
3. Почему i7 и amd работают быстрее, чем xeon.
На 3-й вопрос мне подсказывали, что скорость зависит от частоты каждого ядра, по этому i7 тут выиграл.
using System;
namespace Fibo
{
class MainClass
{
public static void Main (string[] args)
{
int num = int.Parse(args[0]);
long ret = fibo.fib (num);
var sw = System.Diagnostics.Stopwatch.StartNew ();
ret = fibo.fib (num);
sw.Stop ();
Console.WriteLine ("{0} count={1} E:{2}", ret, fibo.count, sw.Elapsed);
}
}
public class fibo
{
public static long count = 0;
public static long fib(int n)
{
count++;
return n < 2 ? 1 : fib (n - 1) + fib (n - 2);
}
}
}
Армянское Радио: Попробую. Только интересно объяснение, почему в этих условиях такая разная производительность. Чем поможет в понимании проблемы LINPACK?