c - 相同的多线程代码在不同处理器上的时间差异?

标签 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)

最佳答案

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

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

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

  • 巨大的内存消耗可能会改变结果,具体取决于计算机上的交换设置。

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

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

  • 等等

关于c - 相同的多线程代码在不同处理器上的时间差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19269110/

相关文章:

c++ - 这是 C/C++ 中的未定义行为吗

java - ExecutorService 以串行顺序执行runnable

java - gui 中新线程的问题

multithreading - 如何同时在recv()和sem_wait()上等待?

javascript - Node.js 中的异步函数

c - 两个信号量不通信

c - 为什么这个内存引用段错误?

c++ - 想要获取perl在c、cpp或.h的多个文件中定义的函数名称

c - 新手遇到错误: expected ')' before ',' token

.net - 我可以同时运行多少个线程?