2013-10-09 49 views
0

假设性问题。不同处理器上多线程代码的时间差异?

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

执行时间为相同的代码:

在Intel(R)核心(TM)13 CPU机器:36秒

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

在英特尔(R)酷睿(TM)i5-2400 CPU机:16.5秒

所以,我的问题是,

有什么样的设置/变量/命令/开关我缺少哪些可以在较高的机器启用,但在较低的机器启用,这使得更高的机器执行时间更快?或者,它只是处理器,因为时间差异。

任何形式的帮助/建议/意见将有所帮助。

操作系统:Linux(Centos5)

+0

很明显它** BOTHERS **你很多。 – LihO

+0

是的。有点。 @LihO,实际上我已经阅读了一些关于某种线程的启用或设置或操作系统中的某些东西。我只是想确保我不会错过任何事情。 –

+0

你如何衡量执行时间? – MYMNeo

回答

1

多线程基准应显著统计抽样(前进行:每机约50实验)。此外,程序运行的“environement”也很重要(例如:firefox是同时运行还是不运行)。

另外,根据资源消耗情况,运行时可能会有所不同。换句话说,如果没有更完整的实验条件,不可能回答你的问题。

我从我的personnal实验进行了一些意见:

  • 巨大的内存消耗可以改变取决于机器上的交换设置的结果。

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

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

+0

谢谢。我会交叉检查所有提到的要点。并会尝试找出某些场景。 –

0

我曾经有一个关于时间问题measure.My问题是在多线程的时间比在单个线程大。最后我发现问题在于不要测量每个线程中的时间并对它们进行求和,而是要测量出所有线程。例如:

错误措施:

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 
} 
+0

我明白了你的观点。但是,最后,总体上应该有时间差异的正当理由。 –

+0

@Vishwadeep,我的时间测量使用CPU时间,所以它有问题。有一个关于这个问题,它是http://stackoverflow.com/questions/2962785/c-using-clock-to-measure-time-in -ulti-threaded-programs – MYMNeo