我正在尝试在计算集群中同时运行一段代码的多个实例(大约 2000 个实例)。它的工作方式是我提交作业,集群将在节点经常打开时运行它们,每个节点有多个作业。这似乎在使用时间种子的随机数生成中为大量实例产生了相同的值。
有没有我可以使用的简单替代方案?可重复性和安全性并不重要,快速生成独特的种子才是。最简单的方法是什么,如果可能的话,跨平台方法会很好。
最佳答案
rdtsc
指令是一个非常可靠(且随机)的种子。
在 Windows 中,它可以通过 __rdtsc()
内部函数访问。
在 GNU C 中,它可以通过以下方式访问:
unsigned long long rdtsc(){
unsigned int lo,hi;
__asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
return ((unsigned long long)hi << 32) | lo;
}
该指令测量自处理器开机以来的总伪周期数。鉴于当今机器的高频率,两个处理器返回相同值的可能性极小,即使它们同时启动并且时钟频率相同也是如此。
关于c - 除了使用时间来生成随机数之外,还有其他选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7617587/