- 主题:对于并行计算,洋垃圾+linux server还是很香的
根据阿姆达定律,即使只有5%的通讯成本,加速比最多也只能达到20(现实一般只能到10左右),所以,超过10核以后,增加核心数所带来的提升就越来越小,到了20核之后,就没有提升了。所以,没必要盲目追求增加核心数。
【 在 cum 的大作中提到: 】
: 起因是要跑一个matlab代码(每个循环主要时间花在稀疏矩阵构建和eigs进行稀疏矩阵特征值计算,循环间无依赖,可并行)。
: 整个升级过程错综复杂,看不下去可直接转标题结论:)。
: 一开始是12700跑,后来12400也一起跑,发现前者竟不如后者(早前跑过tensorflow已经发现过了,不过那时候整个耗时都可接受范围)。后来发现应该是小核参与的原因(超线程好像也有点关系),关掉超线程,设置相关性到大核后,效果基本满意了。
: ...................
--
FROM 113.233.213.*
看不明白,1,4,...,20的运行时间不是应该越来越少吗?
【 在 cum 的大作中提到: 】
: 所以针对我目前的程序特地写过一个挑最佳核数的测试程序。
: matlab中eigs本身也是多线程应用的,指定规模后,不开parpool一个迭代需要跑31秒(相当于有多线程)。parpool(1)是47秒,parpool(4)是48~51秒,parpool(20)大概衰减到60-70秒之间。因为每个迭代内存峰值在4G左右,整机目前才配64G,所以parpool(20)的时候一个worker掉线,相当于parpool(19)。
: 虽然折腾,整体非常满意。整套下来才花了1900不到(显卡硬盘用旧的且闲置的),还不到去年一个12700的价格。后面再200块钱加个矿卡去。
--
FROM 113.233.213.*
就是说,1核是 47秒/1 ,4是(48~51秒)/4,19核是 (60-70秒)/19,那你这个加速比还真是令人惊叹!我写过很多多核程序,加速比就没有超过4的,高纳德也说他这辈子没见过几个加速比大于6的算法。所以,我的直觉是,要么你的算法根本就是各个核心之间几乎没有任何关系的(类似于n个工人往30层楼上搬砖之类的)--所以这种问题往往几乎没有任何意义,要么就是程序中有bug。
【 在 cum 的大作中提到: 】
: matlab是每个迭代间并行,统计的是parfor的时候单核上跑一个迭代的时间,等效时间相当于除以核数。
--
FROM 113.233.213.*
其实我想说的是,你这样的并行问题是非常非常有限的,大部分并行问题都不是这样的,所以低频多核的(旧的)服务器在觉大多数情况下完全不如(新的)8核的高频机器来得有效。
【 在 cum 的大作中提到: 】
: 随机扰动,确实并行度高,无依赖。
--
FROM 113.233.213.*