【发布时间】:2013-04-28 22:05:59
【问题描述】:
DWORD WINAPI MyThreadFunction(LPVOID lpParam) {
volatile auto x = 1;
for (auto i = 0; i < 800000000 / MAX_THREADS; ++i) {
x += i / 3;
}
return 0;
}
这个函数在 MAX_THREADS 线程中运行。
我已经在 Intel Core 2 Duo、Windows 7、MS Visual Studio 上运行了测试2012 使用 Concurrency Visualizer 和 MAX_THREADS=4 和 MAX_THREADS=50。test1(4 个线程)在 7.1 秒内完成,但 test2(50 个线程)在
strong>5.8 秒,而 test1 的上下文切换比 test2 多。
我在 Intel Core i5、Mac OS 10.7.5 上运行了相同的测试并得到了相同的结果。
【问题讨论】:
-
你试过 4 到 50 个线程之间的任何东西吗?您使用了哪些编译器选项?
-
你的处理器有多少个实际内核(我已经有一段时间没有查看不同型号的英特尔处理器了 - 我是一个 AMD 人,大约 20 年前,还没有我自己的电脑当时有英特尔处理器)?你如何测量时间?
-
您能否描述一下您是如何设置测试的以及您在哪个阶段开始计时的?我希望您创建了所有暂停的线程,然后启动您的计时器并立即恢复所有线程。然后,您应该在所有线程都发出信号表明它们已完成后停止计时器。运行程序比几秒钟更长时间以获得真正的测量值是值得的。和/或多次重复实验。
-
我只是使用默认选项创建控制台应用程序项目。但在 Mac OS 中,我使用带有 -O3 的 GCC。
-
@paddy 我在程序启动时启动计时器并在完成前停止。但在 MSVC 中,我使用并发可视化工具而不是计时器。我试过很多次了。
标签: c++ multithreading cpu intel