英特尔CPU之间的性能差异令人困惑

时间:2014-07-10 11:25:44

标签: c# performance intel cpu-architecture cpu-speed

我正在对CPU和GPU实施不同的算法。令我感到奇怪的是,一个非常原始的例子(顺序 - 也就是1个线程 - 创建一个具有100 * 1024 * 1024元素的数组的直方图)在服务器CPU上花费200% - 300%的长度(这无疑是略低的时钟)比工作站CPU上的更老一代。两台机器都使用DDR3内存,工作站上的16GB双通道(FSB:DRAM 1:6)和服务器上的512GB四通道(FSB:DRAM 1:12),均以800Mhz的DRAM时钟速率运行。

在我的工作站上,直方图计算需要< 100ms (平均90ms),而在服务器上平均需要 300ms ,而在零星的情况下,它只需要的 150ms的

我在两台机器上使用相同的构建(任何CPU,更喜欢32位,发布版本)。

另一个问题是,为什么纯粹的64位版本在这两台机器上的速度至少降低了25%?

public static void Main(string[] args) {
    // the array size. say its 100 * 1024 ^ 2, aka 100 Megapixels
    const int Size = 100 * 1024 * 1024;

    // define a buffer to hold the random data
    var buffer = new byte[Size];

    // fill the buffer with random bytes
    var rndXorshift = new RndXorshift();
    rndXorshift.NextBytes(buffer);

    // start a stopwatch to time the histogram creation
    var stopWatch = new Stopwatch();
    stopWatch.Start();

    // declare a variable for the histogram
    var histo = new uint[256];

    // for every element of the array ...
    for (int i = 0; i < Size; i++) {
        // increment the histogram at the position
        // of the current array value
        histo[buffer[i]]++;
    }

    // get the histogram count. must be equal
    // to the total elements of the array
    long histoCount = 0;

    for (int i = 0; i < 256; i++) {
        histoCount += histo[i];
    }

    // stop the stopwatch
    stopWatch.Stop();
    var et1 = stopWatch.ElapsedMilliseconds;

    // output the results
    Console.WriteLine("Histogram Sum: {0}", histoCount);
    Console.WriteLine("Elapsed Time1: {0}ms", et1);
    Console.ReadLine();
}

服务器CPU:Server CPU

工作站CPU:Workstation CPU

1 个答案:

答案 0 :(得分:3)

服务器CPU时钟显示1177 MHz,而工作站有3691 MHz时钟。这可以解释其中的差异。

看起来你的服务器有一个CPU,如果没有压力就会减慢速度,节省能源,或者BIOS中的乘数设置得非常低。