用同一台电脑(4核8线程),MAC系统下,分别用Stata 12和Stata 13运行相同的程序(用statsby估算约7万个回归方程系数)。Stata 12 MP 4-core,Stata 13 MP 8-core, Stata 13 MP 64-core分别用时400秒,527秒和544秒(Stata中timer计时)。用Stata 12 MP 4-core进行计算时,CPU占用率约50%,用Stata 13 MP 8-core和64-core进行计算时,CPU占用率接近100%。
不知道有没有坛友做过类似的测试,想问的问题是,为什么Stata 13 更多核的情况下运行速度比Stata 12慢,莫非是CPU占用率过高导致的速度下降?
后来在坛友提示下用set processors命令设置软件使用CPU核心数目,经测试发现Stata 13在set processors 4的情况下,跑上述程序耗时403秒(只比Stata 12 MP 4-core稍慢,但是后来测试中发现Stata 12 MP 4-core最快一次耗时386秒)。set processors 5 和 6的情况下分别耗时424秒和446秒。set processor 6的情况下,CPU占用率75%左右。以上测试说明,Stata 13的运行速度和Stata 12基本想当,更准确说速度稍慢。对速度影响大的是对虚拟线程的使用,具体来说,在完全使用物理真核数目的情况下(4核8线程CPU,set processors 4)运行速度最快,在使用虚拟核心后,表面上发挥更多CPU能力,但实际上运行速度下降明显,在CPU满载情况下(使用所有8线程 - 物理真核4核外加4虚拟核心),速度严重降低(比CPU 50%占用率即完全使用物理真核时耗时增加约36%)。综上所述,Stata运行速度最佳的条件是设置使用核心数目等于CPU物理核心数目(举例:4核8线程CPU,设置set processor 4速度最快)。
截止到上一步,本以为问题得到了解决。但是我还好奇利用多核进行并行运算能比单核运算快多少。于是set processor为1和2,但是测试结果有点出乎意料,在使用单核和双核的情况下,运行上述程序均用时378秒。换句话说,单核运行速度超过了4核。单核和双核运行速度持平,这个结果是否说明我执行的命令不支持并行处理呢?我测试时的主要命令是:
statsby _b, by(Group) clear: reg y x1 x2 x3 x4 x5
如果statsby这个命令不支持多核并行运算,那么单核运行速度和双核运行速度持平是可以理解的,但问题是为什么速度要快于4核速度呢?另外,对于这个问题不知道MAC和Windows系统下运行是否有差异。由于我手头上只有MAC的机器是4核8线程,Windows的机器没那么多核心,因此我没有在Windows系统下做测试。对这个问题很好奇,不知道哪位坛友有兴趣做类似的测试。



雷达卡





京公网安备 11010802022788号







