gpt4 book ai didi

c# - AMD Opteron CPU 上的 .net 代码速度较慢

转载 作者:太空狗 更新时间:2023-10-29 23:08:11 25 4
gpt4 key购买 nike

遇到过这样一种情况,即简单的 .net 斐波那契代码在一组特定的服务器上速度较慢,唯一明显不同的是 CPU。AMD Opteron 处理器 6276 - 11 秒英特尔至强 XPU E7 - 4850 - 7 秒

代码符合 x86 并使用 .NET Framework 4.0。-两者之间的时钟速度相似,事实上 PassMark 基准测试为 AMD 提供了更高的分数。- 在农场的其他 AMD 服务器上尝试过这个,时间更慢。- 即使是我的本地 I7 机器也能更快地运行代码。

斐波那契代码:

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;
}

}

对可能发生的事情有什么想法吗?

最佳答案

正如我们在评论中所确定的那样,您可以通过将进程固定到 AMD Opteron 机器上的特定处理器来解决此性能问题。

被这个不切实际的问题所激发,我决定看看单核固定会产生如此大差异的可能情况(从 11 秒到 7 秒似乎有点极端)。

最合理的答案并不那么具有革命性:

AMD Opteron 系列采用 HyperTransport在所谓的 NUMA 架构中,而不是像 Intel 的 SMP CPU(包括 Xeon 4850)上那样的传统 FSB

我的猜测是,这种症状源于这样一个事实,即 NUMA 架构中的各个节点具有单独的缓存,而不是共享处理器缓存的 Intel CPU。

换句话说,当连续计算在 Opteron 上的节点之间转移时,缓存会被刷新,而在 Xeon 4850 等 SMP 架构中的处理器之间的平衡没有这种影响,因为缓存是共享的。

在 .NET 中设置关联性非常简单,只需选择一个处理器(为简单起见,我们只选择第一个):

static void Main(string[] args)
{
Console.WriteLine(Environment.ProcessorCount);
Console.Read();

//An AffinityMask of 0x0001 will make sure the process is always pinned to processer 0
Process thisProcess = Process.GetCurrentProcess();
thisProcess.ProcessorAffinity = (IntPtr)0x0001;

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();
}

虽然我很确定这在 NUMA 环境中不是很聪明。

Windows 2008 R2 有 some cool native NUMA functionality ,我还找到了一个有前途的 codeplex 项目,其中包含一个 .NET 包装器:http://multiproc.codeplex.com/

我没有资格教您如何使用这项技术,但这应该为您指明了正确的方向。

关于c# - AMD Opteron CPU 上的 .net 代码速度较慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18992140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com