【问题标题】:Time difference for same code of multithreading on different processors?不同处理器上相同多线程代码的时间差?
【发布时间】:2013-10-09 10:12:04
【问题描述】:

假设性问题。

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

相同代码的执行时间:

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

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

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

所以,我的问题是,

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

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

操作系统:Linux (Centos5)

【问题讨论】:

  • 很明显,它困扰你很多。
  • 是的。有点儿。 @LihO,实际上我很久以前就读过一些关于某种线程启用或设置或操作系统中的某些东西的内容。我只是想确保我没有遗漏任何东西。
  • 如何衡量执行时间?
  • 使用 gettimeofday sys/time.h @MYMNeo
  • @Vishwadeep:别把我的评论看得太认真。这本来是一个关于你强调“明显”这个词的方式的笑话:)

标签: c multithreading semaphore


【解决方案1】:

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

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

我个人实验的一些观察结果:

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

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

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

【讨论】:

  • 谢谢。我将交叉检查所有提到的要点。并且会尝试找出某些场景。
【解决方案2】:

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

测量错误:

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
}

【讨论】:

  • 我明白你的意思。但是,最后应该有一个整体时差的正当理由。
  • @Vishwadeep,我的时间测量使用了cpu时间,所以它有问题。有一个关于那个的问题,它是stackoverflow.com/questions/2962785/…
猜你喜欢
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多