在过去的几个月里,我一直在运行一个处理器密集型程序,我在C#中编写了一个名为Zeros6的程序.
到目前为止,大约经过的时间为157天,处理器总时间为1,217天.[计算机的一些细节:英特尔酷睿i7 2600/3.4 GHz/4内核+超线程 - > 8个处理器.
我使用Visual Studio Express 2010和.NET Framework的第4版(我认为)编写了程序.
无论如何,今天我决定安装Visual Studio Express 2012.安装程序安装了.NET Framework 4.5版,然后请求重新启动以继续安装.我停止了Zeros6程序并确认重启.重启后,Zeros6像往常一样自动重启,Visual Studio安装继续,很快就完成了.然后我震惊地发现Zeros6的运行速度比通常运行的要快.速度指示器通常相当稳定在5.5(每个皮秒的皮秒数)已下降到2.0 - 我从未见过它低于5.34.然后我停下来并启动了几次程序,然后重新启动计算机,但速度的提高仍在继续.如果我们将旧速度称为100%,则新速度为275%!!
我很想知道发生了什么.
一些声明......
uint[] digits;
uint startI;
uint stopI;
public static readonly int bigPowerIncrement = 34;
public static readonly uint myBase = 1000000000;
Run Code Online (Sandbox Code Playgroud)
所有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;
}
Run Code Online (Sandbox Code Playgroud)
很难确切知道改进了什么,但 .NET 4.5 中有相当多的改进。由于它是对 .NET 4 的就地升级,因此您将从这些改进中受益。
h.specials[h.specialCount++] = i;
例如,如果h.specials是ConcurrentDictionary<T,U>,则仅此一项就可能是改进。该ConcurrentDictionary<T,U>类型在 .NET 4.5 中得到了显着改进。
它也可能只是一项新的或更改的 JIT 优化,现在使您受益匪浅,或者是许多其他事情。
| 归档时间: |
|
| 查看次数: |
1075 次 |
| 最近记录: |