这是一个非常有趣的问题,所以让我来设定场景.我在国家计算机博物馆工作,我们刚刚设法让一台克雷Y-MP EL超级计算机从1992年开始运行,我们真的想看看它能跑多快!
我们决定最好的方法是编写一个简单的C程序来计算素数,并显示这样做需要多长时间,然后在一台快速的现代台式电脑上运行该程序并比较结果.
我们很快想出了计算素数的代码:
#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)上运行得很好,CPU使用率达到100%,大约需要10分钟左右.当我回到家后,我决定在我的祸不单行核心的现代游戏电脑上试一试,这就是我们得到第一期的地方.
我第一次修改代码,使其在Windows上运行,因为游戏PC使用的是Windows,但我很难过地发现,这个过程只消耗了CPU约15%的电量.我想那一定是Windows即Windows,所以我启动了一张Ubuntu的Live CD,以为Ubuntu会让这个过程像之前在我的笔记本电脑上做的那样,充分发挥其潜力.
然而,我只有5%的使用率!所以我的问题是,我如何调整程序,使其在Windows 7或live Linux中的游戏机上以100%的CPU利用率运行?另一件很好但不必要的事情是,如果最终产品可以是这样的话.可以轻松分发并在Windows计算机上运行的exe.
谢谢!
附注:当然,这个程序并不能真正与CRAYS8专业处理器一起工作,这完全是另一回事了……如果你知道任何关于优化代码以在90年代的Cray超级计算机上工作的知识,也请给我们一个惊喜!