首页 > 编程语言 >CS149笔记03并行程序性能优化

CS149笔记03并行程序性能优化

时间:2022-11-04 20:14:27浏览次数:43  
标签:spawn 03 code CS149 并行程序 task 线程 执行 assign

Part 1: Work Distribution and Scheduling

为了高性能优化目标:

  • 在所有可执行资源上达到负载均衡
  • 降低communication,避免stalls
  • 减少额外的overhead

负载均衡

在assign1中我们已经深刻体会到了负载不均衡对于程序带来的深刻的影响,执行最慢的进程会拖累整体的执行时间。

image-20221104183059110

Static assignment

就是在code里面就数据进行切分,然后分配给不同线程或者worker,当我们已知执行数据的计算复杂度分布,使用静态assign的方式是可以good way

image-20221104183649439

“Semi-static” assignment

image-20221104183856529

虽然数据的分布可能会变,但是在一段时间内我们可以假设数据分布变化不大,因此可以在一段时间内计算都使用相同的assign方式。但是过了一段时间数据分布可能会变,这时候需要再重新设计assign

Dynamic assignment

在执行过程中,动态确定assign

image-20221104184300397

Increasing task granularity

如果线程一直在进入临界区,就会导致程序执行大部分时间都在等待临界区资源的释放。我们可以让程序执行更多任务后,再进入临界区分配。

image-20221104184343688 image-20221104184359136
  • task size应该比处理器数量多很多
  • task数量越少,对于assign的overhead越小
  • assign的粒度是一个trade-off

Smarter task scheduling

更加合理地进行task分配

image-20221104184947639 image-20221104184958930

distributed queues

image-20221104185319297

当一个线程的执行队列为空后,会从另一个队列中窃取任务

Scheduling fork-join parallelism

cilk_spawn foo(args) 相当于fork出一个线程来执行foo

cilk_sync 相当于c++ Thread中的join操作

image-20221104185650965

quick sort的并行

image-20221104185817200

执行spawn code or follow code

这里教授提了一个问题,我觉得很有意思。一个正在执行的线程,如果遇到cilck_spawn,那么他是继续执行当前线程下面的代码,让新的线程执行执行spawn code,还是自己执行spawn code让新的线程执行follow code?

Run continuation first or Run child first?

image-20221104191612015 image-20221104191627567

这里教授用quick sort举例子,说明了,child first的执行方式是更好的

image-20221104191943845 image-20221104192001045
image-20221104192129977

通过child first,我们的task queue的队列深度可以维持在较小的程度,不至于因为一直cilck_spawn导致爆掉。

Part II: Locality, Communication, and Contention

Shared address space

还是之前提到的例子

image-20221104193935772

这里使用了share mem的方式

image-20221104193726419

教授举了一个降低barrier的例子

image-20221104193818465 image-20221104193829891

相当于把diff这个依赖给去除了

Message passing

不同于share mem来解决问题,这里使用message passing的方式

image-20221104194226777

这里有一个概念,就是communication-to-computation ratio:

\[amount of communication (e.g., bytes)\\ ------------------ \\ amount of computation (e.g., instructions) \]

“Arithmetic intensity” = 1 / communication-to-computation ratio

计算和communication的比值应该是越大越好。

如果是block assign的方式, 计算和交流比 为 N / p

image-20221104194744924

如果是inter leaf的方式,计算和交流比为 1 / 2

image-20221104194941323

如果是方阵形式进行数据切分,计算与交流比为\(\frac{N}{\sqrt{P}}\):

image-20221104195016157

标签:spawn,03,code,CS149,并行程序,task,线程,执行,assign
From: https://www.cnblogs.com/kalicener/p/16858964.html

相关文章

  • CS149笔记02并行抽象
    ParallelProgrammingAbstractionssingleprogram,multipledataSPMD这个定义还是第一次听到,我在Intelispc的官网找到了这一定义:https://ispc.github.io/ispc.htmlT......
  • CS149笔记01现代多核CPU
    AModernMulti-CoreProcessor一个处理器在做什么?FetchDecode:指令流解码,决定下一条执行的指令ALU:执行单元,执行一条指令,决定如何修改寄存器和计算机内存Context一......
  • 记一次Oracle在导出和导入过程中对ORA-01555/ORA-01628/ORA-30036进行故障排除过程
    那是在2021年7月30日的下午,在整理公司服务器中备份文件时发现的问题当时发现备份的数据虽然有文件,但是日志中存在报错,并且备份出来的文件无法进行还原因为没遇到过这个......
  • 深入理解sed模式空间——sed 'n;p'
    在进入正题之前我们先来了解一下sed的模式空间,如下什么是sed的模式空间?答(仅供参考):就是从文件读取一行文本然后存入的缓冲区,然后命令操作模式空间的内容,在初始状态下模式......
  • python 打包后运行提示 ModuleNotFoundError: No module named 'xxx'
    毫无疑问,是打的包有问题。目前见到的原因有三:1.pycharm开发环境的引用的包版本和外面的环境引用的包版本不一致。  处理方式:想办法让两个版本一致。  相关命......
  • 910003 左侧状态栏的按钮说明
    1、坐标显示当前指针坐标的(X,Y,Z)三轴。2、捕捉模式3、栅格显示4、正交模式5、极轴追踪6、对象捕捉7、对象捕捉追踪8、允许/禁止动态UCS9、动态输入10、显示/......
  • P1103 书本整理 (DP)
    书本整理题目描述Frank是一个非常喜爱整洁的人。他有一大堆书和一个书架,想要把书放在书架上。书架可以放下所有的书,所以Frank首先将书按高度顺序排列在书架上。但是Frank......
  • 实例038将汉字转换为拼音
      实例需要定义拼音编码和拼音数组,参考如下usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;u......
  • 《what's the point: semantic segmentation with point supervision 》阅读笔记
    摘要语义分割任务在发展中呈现这样的矛盾,在推理的准确性和标注所花费的时间之间。逐像素的细节标注可以训练更准确的模型,但要花费更多的时间。图片级别的标注是一个容易实......
  • 【FAQ】调用华为云空间文件管理接口出现"errorCode":"21000403"
    ​ 1、问题描述调用华为云空间文件管理接口,总是返回错误,{"error":{"errorDetail":[{"domain":"global","reason":"authError","description":"AccessForbidden","error......