如何在 Visual Studio 中设置让 C++/C 代码只在一个线程中运行以测试运行时间?
Posted
技术标签:
【中文标题】如何在 Visual Studio 中设置让 C++/C 代码只在一个线程中运行以测试运行时间?【英文标题】:How to set in Visual Studio to let C++/C codes run in only one thread to test the running time? 【发布时间】:2016-12-29 09:41:33 【问题描述】:我的目的是公平地测试运行时间(不同算法的 Flops),目前我正在使用 clock() 来记录时间。也许,建议任何更好的时间记录功能?
但我不知道如何让代码只在一个线程中运行?此外,在 Visual Studio 中,我不知道为我的案例选择哪个运行时库(属性-> 配置属性-> C/C++-> 代码生成-> 运行时库)。
【问题讨论】:
请注意,在 MSVC 中,clock()
function 是非标准的,因为它测量的是挂墙时间。
【参考方案1】:
默认情况下,任何可执行文件都在单个线程中运行。仅当您明确使用 std::thread
、std::async
或 std::future
等结构时,您的可执行文件才可能使用多个线程。
【讨论】:
【参考方案2】:看看 C++11 std::chrono
来测量时间,这是一种使用时间/时钟的非常舒适和便携的方式。
如果您使用std::thread
实现线程,无论如何都会创建它们。问题是它们是并行执行还是顺序执行。这取决于您的系统。如果您有多个 CPU 内核,您可以尝试通过调用将您的进程设置为仅使用一个 CPU
start /affinity 1 program.exe
但它可能会被忽略。
【讨论】:
在旧版本的 Visual Studio 中(我认为是 VS2015 之前的版本),std::chrono high_resolution 时钟不是高分辨率,它只是默认的 64hz 代码,timeBeginPeriod 应该将代码加速到 1000hz == 每个周期 1 毫秒。 QueryPerformanceCounter 应该以超过 1 兆赫兹的频率运行。 小心使用 QueryPerformanceCounter,因为 CPU 的频率可能会随着运行时间而变化,这会导致非常小或非常大的结果。 我没有遇到 QueryPerformanceCounter 的问题。在高达 3.9ghz 的 Intel 3770k 3.5 ghz cpu 上,QueryPeformanceCounter 总是返回一个计数器,在 Windows 7 上运行速度略高于 3 MHz,在 Windows XP 上运行速度约为 3.5ghz。以上是关于如何在 Visual Studio 中设置让 C++/C 代码只在一个线程中运行以测试运行时间?的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 2005 C++ 中设置文件版本号
如何在 Visual Studio 2008 或 Visual Studio 2010 中设置 JavaScript 断点
在 Visual Studio 2012 Express 中设置 C++ 调试环境