E3-1220 プロセッサを 1 つ実行するサーバーと、E5-2640 プロセッサを 2 つ実行するサーバーが 2 つあります。http://ark.intel.com/compare/52269,64591
問題は、5 倍高価な 2 プロセッサ サーバーが私のプログラムを 2 倍遅く実行することです。
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 は新しい Intel プロセッサであり、以前の 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 倍 (!!) 遅いことです... (私のリンクされた質問を参照してください)
問題は、Xeon E5 構成の 2 倍力を使用するにはどうすればよいかということです。マルチプロセッサ構成の機能を使用するために C# でプログラミングする方法について、おそらくどのような手法を使用する必要がありますか?
私はちょうど $1500 で購入した既存のサーバーよりも私のプログラムを 2 倍遅く実行するサーバーを購入するために $10,000 を費やしたことにがっかりしました