这是一个非常有趣的问题,所以让我开始讨论。我在国家计算机博物馆工作,我们刚刚设法让一台Cray Y-MP EL超级计算机从1992年开始运行,我们真的很想知道它能走多快!
我们认为最好的方法是编写一个简单的C程序,该程序将计算质数并显示执行此操作需要多长时间,然后在快速的现代台式PC上运行该程序并比较结果。
我们很快想出了以下代码来计算质数:
#include <stdio.h>
#include <time.h>
void main() {
clock_t start, end;
double runTime;
start = clock();
int i, num = 1, primes = 0;
while (num <= 1000) {
i = 2;
while (i <= num) {
if(num % i == 0)
break;
i++;
}
if (i == num)
primes++;
system("clear");
printf("%d prime numbers calculated\n",primes);
num++;
}
end = clock();
runTime = (end - start) / (double) CLOCKS_PER_SEC;
printf("This machine calculated all %d prime numbers under 1000 in %g seconds\n", primes, runTime);
}
在运行Ubuntu(Cray运行UNICOS)的双核笔记本电脑上,它运行良好,获得100%的CPU使用率,耗时约10分钟。当我回到家时,我决定在我的六核现代游戏PC上进行尝试,这是我们收到的第一个问题。
我首先将代码修改为可以在Windows上运行,因为那是游戏PC所使用的,但是很遗憾地发现该过程仅获得CPU功率的15%。我认为Windows一定是Windows,因此我启动了Ubuntu的Live CD,以为Ubuntu可以像以前在笔记本电脑上那样充分发挥潜力,使该进程得以充分运行。
但是我只有5%的使用率!所以我的问题是,如何使该程序适应Windows 7或实时Linux上的游戏机上100%的CPU使用率?另一个很棒但不是必须的事情是,如果最终产品可以是一个可以轻松分发并在Windows计算机上运行的.exe。
非常感谢!
PS当然,该程序实际上无法与Crays 8专业处理器配合使用,这是另一个问题……如果您了解有关优化代码以在90年代的Cray超级计算机上工作的任何知识,我们也将大声疾呼!