起因是要跑一个matlab代码(每个循环主要时间花在稀疏矩阵构建和eigs进行稀疏矩阵特征值计算,循环间无依赖,可并行)。
整个升级过程错综复杂,看不下去可直接转标题结论:)。
一开始是12700跑,后来12400也一起跑,发现前者竟不如后者(早前跑过tensorflow已经发现过了,不过那时候整个耗时都可接受范围)。后来发现应该是小核参与的原因(超线程好像也有点关系),关掉超线程,设置相关性到大核后,效果基本满意了。
再后来一台silver4110双路共16核(linux)加入,效果明显提升不少。因为发现12700和12400性能提升非常非线性(前者8核并行后3.x倍,后者6核并行后3倍左右),所以这段时间写了个最佳核数测试代码,发现silver4110双路的线性性明显要好于两台12代。
以为是服务器CPU的优势,于是这个时候萌生了整套洋垃圾的想法,先搞了个2680v4单路,毕竟也有14核(几十块钱,单核性价比很高),但是效果不尽如人意。当时猜测是不是因为双路可以更好控制负载,于是立马退掉换成双路。结果效果几乎无任何变化,且10核以后的提升基本平了,甚至后面还有倒退的,整体28核完全不如silver4110双路的16核。考虑到eigs计算内存消耗大,作为测试只先搞了16Gx2内存,于是再加16Gx2。还是不行。看在intel官网关于silver4110和2680v4的价格及发行时间,觉得不至于有那么大差距,目前唯一的差别应该就是针脚数和OS了。打算先从OS下手,今天装上了ubuntu server,效果立现!!!小开20核测试了下,换算单核也比silver4110双路的单核性能提升10%左右。目前瓶颈在内存容量了,20核在跑实例的时候因为总内存超了,崩掉了一个worker。
记了一些折腾流水账,结论就是对于并行计算,洋垃圾+linux server还是很香的。
btw,手头的12700瞬间就没那么香了(在这种特定计算领域)。
--
FROM 124.90.178.*