cpu密集型计算调优与cpu并行计算方法
任务描述
这个任务是纯cpu任务,两个任务之间没有依赖,单个任务可以分为三层,每一层是有计算先后顺序的,且多一层需要的资源翻8倍。每个任务的大小都不相同,和原始数据大小有关,每一个任务每一层都可以单线程计算或多线程计算。
调优经历
第一次
第一次没多想开个多线程让它跑,
结果资源占用非常低,20%不到,
原因是来回调度和等待消耗时间,很多无效的调度
第二次
使用taskset平均绑定cpu,指定哪几个核心跑一个任务
结果提高有限,而且存在超内存现象
原因是单个任务的第一层任务开始阶段占用少,后面第三层资源又不够了
第三次
三层分开计算,一二层单线程,第三层多线程,
结果,可以提高很大,但是还是存在超内存
原因,部分大任务需求资源不够导致任务失败
第四次
三层完全打散,按照需求分配资源
结果,占用在85~95之间,发现存在空档,且小任务先执行
原因,同样在等待资源,小任务先满足资源需求,等到小的都跑完才能轮到大的,而大的是凑不齐的
第五次
三层完全打散,按照需求分配资源,设置每一层最少执行数目
结果,占用在80~95之间,发现存在空档
原因,假设设置层最少跑三个,那么第三层在等资源时可能会造成浪费
第六次
三层完全打散,按照需求分配资源,设置每一层最少执行数目,设置第一次游走占用
结果,占用在85~95之间,但是存在超内存现象
原因,让第一层计算临时游走占用第三层计算前的空余时间,但是存在剩余资源不满足第一层计算的情况,因为不同任务需要资源不一样。
结论
第五次是比较合适的,即
三层完全打散,按照需求分配资源,设置每一层最少执行数目,如每层最少跑三个,
虽然,那么第三层在等资源时可能会造成浪费,但是不会产生超内存等现象。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Zander's blog!
评论