我有两台服务器,一台运行一个 E3-1220 处理器,另一台运行两个 E5-2640 处理器。 http://ark.intel.com/compare/52269,64591
问题是,价格贵 5 倍的两个处理器服务器执行我的程序的速度慢 2 倍,请参阅我在 stackoverflow 上的问题 Threadpool program runs much slower on much faster server )
我写了这个简单的程序来比较 E3-1220 和 E5-2640 它没有做任何事情,这只是我在现实世界中做的事情:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
namespace TestSpeed
{
class Program
{
private static double a;
private static double b;
private static double c = 0.34;
private static double d = 0.15;
private static double e = 0.25;
private static double f = 0.03;
private static double g = 8;
static void Main(string[] args)
{
Stopwatch sw = Stopwatch.StartNew();
for (int i = 0; i < 1000000000; i++)
{
double e = a;
a = 1;
double f = b;
b = 1;
if (true)
{
double h = 1.83;
double j = Math.Ceiling(h/d);
if (j <= c)
{
c = Math.Ceiling(h/d + e);
}
else if (j > c)
{
c = Math.Ceiling(h/d - e);
}
if (c <= -0.5)
{
a = a - f*c;
}
double k = Math.Floor(h/d);
if (k <= g)
{
g = Math.Floor(h/d + e);
}
else if (k > g)
{
g = Math.Floor(h/d - e);
}
if (g > 0.5)
{
b = b + f*g;
}
}
bool result = (Math.Abs(e - a) > 0) ||
(Math.Abs(f - b) > 0);
}
long time = sw.ElapsedTicks / (Stopwatch.Frequency / (1000L * 1000L));
Console.WriteLine(time);
}
}
}
E5-2640 是新的英特尔处理器,我想它至少应该比之前的 E3-1220 好一点,后者便宜了近 5 倍。
但结果是:Xeon E5-2640 为 31182(约 31 秒),Xeon E3-1220 为 26650(约 26 秒)。 所以比率是 31182/26650 = 1.17 时钟比为 3/2.5 = 1.2
所以Xeon E3和Xeon E5之间绝对没有区别。 E3 的时钟比率提高了 20%,因此运行速度提高了 20%。我能做什么,也许我可以使用一些特殊的 Xeon E5 指令?
非常烦人的是,在实际应用中,Xeon E5 比 Xeon E3 慢 2 倍(!!)...(请参阅我的链接问题)
所以问题是 - 我可以做什么来使用 2 * Xeon E5 配置的能力?我应该使用什么技术或者如何在 C# 上进行编程以利用多处理器配置的强大功能?
我只是很失望,我花了 10 000 美元购买了执行程序的服务器,它的执行速度比我仅花费 1 500 美元购买的现有服务器慢了 2 倍
最佳答案
根据我的一点经验,任务并行库在创建正确数量的线程以最大化 CPU 方面做得非常出色。查看http://msdn.microsoft.com/en-us/library/dd537609.aspx
关于c# - 如何使用2*Xeon E5的电源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11105745/