я столкнулся с ситуацией, когда простой .net fibonnacci код работает медленнее на определенном наборе серверов, и единственное, что, очевидно, отличается процессор:.Net код медленнее на AMD Opteron CPU, чем Intel Xeon
- AMD Opteron процессор 6276 - 11 сек
- Intel Xeon CPU E7 - 4850 - 7 сек
код скомпилирован для x86 и с использованием .NET Framework 4.0.
- Тактовая частота между ними одинакова, и на самом деле эталонный тест PassMark дает более высокие оценки для AMD.
- Попробовали это на других серверах AMD в ферме, и время было медленнее.
- Даже мои локальные машины I7 быстрее запускают код.
код Fibonnacci:
class Program
{
static void Main(string[] args)
{
const int ITERATIONS = 10000;
const int FIBONACCI = 100000;
var watch = new Stopwatch();
watch.Start();
DoFibonnacci(ITERATIONS, FIBONACCI);
watch.Stop();
Console.WriteLine("Total fibonacci time: {0}ms", watch.ElapsedMilliseconds);
Console.ReadLine();
}
private static void DoFibonnacci(int ITERATIONS, int FIBONACCI)
{
for (int i = 0; i < ITERATIONS; i++)
{
Fibonacci(FIBONACCI);
}
}
private static int Fibonacci(int x)
{
var previousValue = -1;
var currentResult = 1;
for (var i = 0; i <= x; ++i)
{
var sum = currentResult + previousValue;
previousValue = currentResult;
currentResult = sum;
}
return currentResult;
}
}
Любые идеи о том, что происходит?
Вы посмотрели многоядерный счет PassMark? Это часто обманчиво высоко для новых AMD AMD, с их высоким числом ядер, но относительно слабыми ядрами. – harold
Если я установил близость процессора к одному процессору для процесса, я действительно получаю 7 секунд, что интересно. – Rubans
Хорошо, это начинает странно .. – harold