我正在对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:
工作站CPU:
答案 0 :(得分:3)
服务器CPU时钟显示1177 MHz,而工作站有3691 MHz时钟。这可以解释其中的差异。
看起来你的服务器有一个CPU,如果没有压力就会减慢速度,节省能源,或者BIOS中的乘数设置得非常低。