看我的代码,在这个帖子:多线程简单基准测试中的PC性能和稳定性问题。如何使每个线程在单独的核心上运行?
https://stackoverflow.com/questions/16594768/how-to-write-simple-speed-test-app-with-cuda
这次我不看好CUDA,但应用程序的代码,在后。我想要面对的问题是,应用程序在返回总分的情况下相当不稳定。在我第一次编译它之后,它返回的值在12.2 - 12.5 mld之间,测试时间等于10 secons,但是在PC关闭之后,它一直返回值大约。 15个测试时间相同的mld。我想了一会儿,我的电脑发生了一些事情,但在其他专业测试中,它更稳定 - 例如。 mdcrackGUI基准总是返回给我约。每次运行它时,第一个值为1.32亿。聪明的思维片刻后不过我有撂荒问题:
我有8个逻辑CPU内核,但我不知道每个计算线程仅使用一个相同的逻辑核心,而测试运行。如果可能,如何修改代码以确保这一点?
有8个计算线程,但我有4个而不是8个物理核心CPU(由于HT技术)。我猜这意味着所有8个线程都不会真正并行运行。如果第一个问题有肯定的答案,那么如果我仅使用4个计算线程(每个计算线程在不同的物理内核上),这个应用程序是否会更稳定?
获得基准测试结果一致重现是一种黑色艺术,主要基于公然的谎言。影响代码性能的因素很多,其中包括您的机器上运行的其他奇数千线程也需要一部分处理器。即使是环境因素,如温度。只是不要打扰。 –
使用线程关联将线程绑定到核心。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms686247(v=vs.85).aspx –
我完全同意@Hans。另外,尝试超越操作系统调度程序并将线程绑定到特定内核几乎总是毫无意义的。调度人员的工作比你做得更好,同时考虑到所有其他过程,而不仅仅是你自己的过程。 – syam