假设性问题。
我编写了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)
答案 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
}