我在C中编写一个会生成随机数的小脚本。 当我运行它60秒时,它只生成了1700万个数字,在我的PC任务管理器中,我发现它几乎占用了0%的资源。
有人可以,给我一段代码或链接,让我可以使用我的电脑的全部资源在几秒钟内生成数万亿随机数?也许是多线程的?
注意:如果您知道使用Nvidia GPU而不是CPU的简单方法(没有繁重的CUDA SDK),它也会很好!
修改
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char getRandLetter(void);
int main()
{
int i,num=0,p=0;
char randhash[12];
time_t start,stop;
start = time(NULL);
while(1) {
for(i=0; i<12; i++){
randhash[i]=getRandLetter();
}
num++;
stop = time(NULL);
double diff = difftime(stop, start);
if (diff >= 60) {
printf("60 seconds passed... NUM=%d", num);
start = time(NULL);
break;
}
}
return 0;
}
char getRandLetter() {
static int range = 'Z'-'A'+1;
return rand()%range + 'A';
}
注意:我拥有一台拥有i7和杀手级别的杀手级电脑:p所以我只需要利用这些资源。
答案 0 :(得分:1)
生成随机数不应受CPU限制。生成随机数的函数通常会调用系统内核,后者从物理熵源(网络,键盘,鼠标等)中获取随机数。你可以用计算做的最好的是伪随机数。
实际上,应该有一些方法可以使用更多的CPU来更快地生成“随机”数字,但这些随机数不会像从物理熵源中获取的数量那么高(并且使用这些来源不会如果有的话,可以灵活地调整CPU)因为CPU往往具有相当的确定性(因为它们应该是这样)。
其他一些信息: http://en.wikipedia.org/wiki/Random_number_generation