過去数か月間、私は C# で記述した Zeros6 というプロセッサ集約型プログラムを実行してきました。
これまでのおおよその経過時間は 157 日で、合計プロセッサー時間は 1,217 日です。[コンピュータの詳細: Intel Core i7 2600 / 3.4 GHz / 4 コア + ハイパースレッディング -> 8 プロセッサ]
Visual Studio Express 2010 とバージョン 4 の .NET Framework を使用してプログラムを作成しました (と思います)。
とにかく、今日は Visual Studio Express 2012 をインストールすることにしました。インストーラーはバージョン 4.5 の .NET Framework をインストールし、インストールを続行するために再起動を要求しました。Zeros6 プログラムを停止し、再起動を OK しました。再起動後、通常どおり Zeros6 が自動的に再起動し、Visual Studio のインストールが続行され、すぐに終了しました。その後、Zeros6 が通常よりもはるかに高速に実行されていることを発見してショックを受けました。通常は 5.5 (1 桁あたりのピコ秒) でかなり安定している速度インジケーターが 2.0 に低下しました。その後、プログラムの停止と開始を数回繰り返し、コンピューターを再起動しましたが、速度の向上は持続しています。古い速度を 100% とすると、新しい速度は 275% です!!
何が起こっているのか知りたいです。
いくつかの宣言...
uint[] digits;
uint startI;
uint stopI;
public static readonly int bigPowerIncrement = 34;
public static readonly uint myBase = 1000000000;
8 つのプロセッサすべてが、ほとんどの時間をこれに費やしています...
{
ulong carry = 0;
unchecked
{
for (uint i = startI; i < stopI; i++)
{
ulong m = ((ulong)digits[i] << bigPowerIncrement) | carry;
carry = m/myBase;
if ((digits[i] = (uint)(m - myBase*carry)) < 1000000)
{ // do this about one time in 1000...
h.specials[h.specialCount++] = i;
}
} // i loop
} // unchecked
h.carry = carry;
}