不同处理器上相同多线程代码的时差?

时间:2013-10-09 10:12:04

标签: c multithreading semaphore

假设性问题。

我编写了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)

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

答案 1 :(得分: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
}