0

假设性问题。

我写了1个多线程代码,用来组成8个线程,在不同的线程上处理数据,完成这个过程。我也在代码中使用信号量。但它给了我在不同机器上不同的执行时间。这是显而易见的!

相同代码的执行时间:

在 Intel(R) Core(TM) i3 CPU 机器上:36 秒

在 AMD FX(tm)-8350 八核处理器机器上:32 秒

在 Intel(R) Core(TM) i5-2400 CPU 机器上:16.5 秒

所以,我的问题是,

是否有任何我缺少的设置/变量/命令/开关可以在更高的机器上启用但在更低的机器上没有启用,这使得更高的机器执行时间更快?或者,它只是处理器,因此存在时间差。

任何类型的帮助/建议/评论都会有所帮助。

操作系统:Linux (Centos5)

4

2 回答 2

1

多线程基准测试应该通过大量的统计抽样来执行(例如:每台机器大约 50 个实验)。此外,程序运行的“环境”也很重要(例如:firefox 是否同时运行)。

此外,根据资源消耗,运行时间可能会有所不同。换句话说,如果没有更完整地描述您的实验条件,就不可能回答您的问题。

我从个人实验中得出的一些观察结果:

  • 巨大的内存消耗会根据机器上的交换设置改变结果。

  • 在相同条件下安装相同操作系统的两台“相同”机器可能会显示不同的结果。

  • 当总吞吐量小于 5 分钟时,结果显得非常随机。

  • 等等

于 2013-10-09T13:28:25.060 回答
0

我曾经有一个关于时间测量的问题。我的问题是多线程的时间比单线程的大。最后我发现问题在于不是测量每个线程中的时间并将它们相加,而是测量所有线程。例如:

错误的措施:

int main(void)
{
   //create_thread();
   //join_thread();
   //sum the time
}

void thread(void *)
{
   //measure time in thread
}

正确的措施:

int main(void)
{
   //record start time

   //create_thread();
   //join_thread();

   //record end time

   //calculate the diff
}

void thread(void *)
{
   //measure time in thread
}
于 2013-10-09T10:37:56.080 回答