采用基于正域的约简。
数据:Ticdata2000 记录数:5822 条件属性:85
结果:
1、 Core i7 3632QM 4四核八线程 2.2G 动态加速3.2G 0.516s
2、 Core i3 2100 双核四线程 3.1G 0.813s
3、 Pentium 4 530 超线程关闭 3G 5.625s
4、 Core 2 Quad Q9400 四核四线程 2.66G 2.68s
无论数据集大小,Sandy Bridge及以后的CPU都能全速运行。
而对Q9400这类CPU来讲:
1、 对中小数据量(10MB以下), 即便发起64个线程,CPU利用率也只能60%-70%; 线程数低的时候,CPU利用率基本在40%左右。
2、 对于数据量大的测试集,16个线程甚至8个就足以保持开工率平均95%。 所以我的结论是:Q9400配套的内存系统太慢了。
因为存储器慢,所以CPU无事可做,发起更多线程也只能部分缓解这种情况。 对于大数据集来讲,数据有着更强的局部性,弥补了存储器慢的缺点。
想更进一步,就要做更细致的跟踪和代码调整,联想到Bloomfield以来的intel CPU全系列集成内存控制器,那就先这么认为吧。
这个问题也可以利用 Vtune进行进一步跟踪