首页 > 其他分享 >Stanford CS149 -- Assignment 1: Performance Analysis on a Quad-Core CPU

Stanford CS149 -- Assignment 1: Performance Analysis on a Quad-Core CPU

时间:2024-10-14 21:01:20浏览次数:1  
标签:Core CS149 -- 程序 WIDTH 任务 VECTOR 线程 加速

作业描述及代码参加:CS149-asst1

程序 1

生成 view 1 时加速比与线程数的关系如下:

线程数 加速比
2 2.04
3 1.69
4 2.54
5 2.57
6 3.26
7 3.55
8 4.11

生成 view 2 时加速比与线程数的关系如下:

线程数 加速比
2 1.75
3 2.25
4 2.67
5 3.14
6 3.53
7 4.03
8 4.39

可以看到,生成 view 1 时加速比随线程数的增加并非在线性增长,在线程数由 2 增加到 3 时,甚至出现了下降。而生成 view 2 时,并未出现这种情况,加速比基本上随线程数的增加线性增长。猜测其原因在于各线程工作量分配不均

通过在 workerThreadStart() 的开头和结尾插入计时代码来测量每个线程完成其工作的时间,得到如下结果:

每个线程完成其工作的时间

可以看到线程 1 计算所花费的时间远高于线程 0 和线程 2。证实了之前的猜测。联系题目描述:图像中的每个像素对应于复平面中的一个值,每个像素的亮度与确定该值是否包含在 Mandelbrot 中的计算成本成正比,观察生成的图片可以发现,中间部分较亮,计算成本高,而线程 1 恰好分配到中间这部分,所以耗时较多。

改进线程的工作分配:不再为线程连续分配工作,而是一行一行依次循环分配给各线程。

更改工作分配方式后每个线程完成其工作的时间

最终的 8 线程加速比为 7.44。

使用 16 个线程运行改进代码,加速比为 6.90。加速比不如 8 线程,这是因为程序所能达到的最大加速比收到程序中串行代码所占比例的限制:\(最大加速比=\frac{1}{1-P},其中 P 为并行部分所占比例\)。当加速比趋于极限时,继续增大线程数反而会因为线程管理开销增大而导致性能下降。

程序 2

./myexp -s 3 结果如下:

myexp -s 3

./myexp -s 10000,且更改 VECTOR_WIDTH 的结果如下:

2 & myexp -s 10000
VECTOR_WIDTH = 2
4 & myexp -s 10000
VECTOR_WIDTH = 4
8 & myexp -s 10000
VECTOR_WIDTH = 8
16 & myexp -s 10000
VECTOR_WIDTH = 16

可以看到随着VECTOR_WIDTH的增大,向量利用率(Vector Utilization)在减小。VECTOR_WIDTH增大时,一条指令运行时会含有空操作的可能性也会增大。

arraySumSerial的时间复杂度为 \(O(N)\),向量化后的实现arraySumVector时间复杂度为 \(O((N / VECTOR\_WIDTH + log2(VECTOR\_WIDTH)))\)。

程序 3

第 1 部分

期望的最大加速比是 8(因为 ISPC 编译器当前配置为发出 8 宽度的 AVX2 向量指令),实际加速比为 5.15。可能是 8 个通道间计算量不均衡导致了性能降低。

ISPC

第 2 部分

启动 2 个 ISPC 任务后的加速比为 10.11,大约是未启动任务前的两倍。

ISPC with tasks

我的电脑 CPU 型号为Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz 2.30 GHz,有 4 个核,支持 8 个超线程,通过实验发现,任务数为 16 时,性能最高,加速比超过了 32。

ISPC with 16 tasks

个人理解:线程抽象和 ISPC 任务抽象的区别类似命令式和声明式。启动 10000 个线程,会实际创建这 10000 个线程运行,而启动 10000 个任务,编译器会根据硬件情况等创建合适数量的线程,这 10000 个任务组成任务池,每个线程从任务池中取出任务完成。(参考了 Slide View : Parallel Computer Architecture and Programming 中的回答)

程序 4

sqrt

ISPC 无任务时加速比为 4.33,有任务时加速比为 32.68。SIMD 并行化带来的加速比是 4.33,多核心并行化带来的加速比为 7.54,接近 8。

values的值均设为2.999999f时,加速比最大,无任务时加速比为 6.98,有任务时加速比为 55.21,提高了 SIMD 加速比,也提高了多核加速比(更加接近 8)。将 values的值均设为2.999999f会使得各通道及各任务的工作量都很均衡,同时计算量较大(增大了并行部分占比),因此增大了加速比。

sqrt max speedup

values的按照每 8 个元素中有一个为2.999999f,其余为1.f时,加速比最小,无任务时加速比为 0.92,有任务时加速比为 7.11。因为编译时使用--target=avx2选项来生成 8 宽度的 SIMD 指令,这样设置 values可以使得 SIMD 8 个通道工作量不均衡,向量化版本和串行版本都主要在计算values[i] = 2.999999f时的结果,所以加速比小。

sqrt min speedup

仅考虑N能被 8 整除的情况,使用 AVX2 内置函数实现sqrt(内置函数可以直接计算sqrt),类似程序 2,结果如下:

AVX2

程序 5

saxpy

有任务的 ISPC 的加速比为 1.42,性能提升较少。saxpy属于I/O密集型程序,相对于计算,其用于读写内存的时间要更多,性能瓶颈在于内存带宽的限制,无法通过重写代码大幅改进性能。

main.cpp中计算消耗的总内存带宽为 TOTAL_BYTES = 4 * N * sizeof(float);,乘以 4 是因为存在缓存,要更改result的值,需要先将其读入缓存,更改之后再写回内存,涉及到两次 I/O。

程序 6

根据main.cpp注释中的代码可以生成data.dat

可以发现,kMeansThread中主要使用三个函数:computeAssignmentscomputeCentroidscomputeCost。分别对其计时,可以发现computeAssignments耗时最长,应将其并行化以提高性能。

computeAssignments的功能是将数据点划分到距离最近的聚类中,数据点之间没有依赖,可以并行化。进行数据划分时,应该将计算每个点所属聚类作为最小任务单元(对应循环for (int m = 0; m < args->M; m++)),这样比按照聚类中心划分工作要更加均衡。

加速前,代码运行时间为:

K-Means

加速后,代码运行时间为:

Multithreading K-Means

加速比为:\(18716.043 / 7125.182=2.63\)

标签:Core,CS149,--,程序,WIDTH,任务,VECTOR,线程,加速
From: https://www.cnblogs.com/bienboy/p/18466123

相关文章

  • 软考14——数据结构
    ◆无向图:图的结点之间连接线是没有箭头的,不分方向。◆有向图:图的结点之间连接线是箭头,区分A到B,和B到A是两条线。◆完全图:无向完全图中,节点两两之间都有连线,n个结点的连线数为(n·1)+(n-2)+.+1=n*(n-1)/2;有向完全图中,节点两两之间都有互通的两个箭头,n个节点的连线数为n*(n-1)◆度......
  • Mybatis的Mapper映射文件中常用标签及作用
    mapper标签作用:根标签,用于定义一个Mapper文件。属性:namespace,指定Mapper接口的全限定名。select标签作用:定义一个查询语句。属性:id:语句的唯一标识符,对应Mapper接口中的方法名。parameterType:输入参数的类型。resultType:返回结果的类型。resultMap:返回结果......
  • 10.14
    请根据课堂讲解,列举出口算题卡软件的功能列表描述,包括但不限于重复题目的检测、题目数字范围设置、加减乘除算式的参数化等扩展功能,鼓励参考其他成熟软件的功能进行设计,力求功能使用,可推广。直接在文本框提交文字即可,不要上传文档附件。我的答案: 基础功能:1.随机生成题目能......
  • Mybatis的Mapper映射文件中常用标签
    增删改查标签增:<insertid=""parameterType=""useGeneratedKeys="true"keyProperty="id">id接口名,parameterType传参类型,useGeneratedKeys是否使用数据库生成的主键,keyProperty将主键映射到哪个属性删:<deleteid=""></delete>改......
  • 机器学习和神经网络的研究与传统物理学的关系
    将2024年诺贝尔物理学奖授予机器学习与神经网络领域的研究者,这一决定无疑具有里程碑式的意义,它不仅标志着物理学界对交叉学科研究的认可,也体现了科学技术发展趋势的深刻变革。以下是我对这一评奖结果的几点看法:科学边界的拓展:传统上,诺贝尔物理学奖聚焦于对自然界基本规律的理......
  • Product1M 深度理解 PPT
    系列论文研读目录文章目录系列论文研读目录模态内检索:是指在同一模态(例如,图像、文本或音频)中进行的检索任务。它通常涉及在同一类型的数据中查找相关项。比如下面图像只能查询图像,文本只能查询文本,视频只能查询视频跨模态检索:是指在不同模态之间进行的检索任务,即......
  • 2023年图灵奖揭晓,你怎么看?
    2023年图灵奖揭晓,你怎么看?2023年图灵奖,最近刚刚颁给普林斯顿数学教授AviWigderson!作为理论计算机科学领域的领军人物,他对于理解计算中的随机性和伪随机性的作用,作出了开创性贡献。方向一:AviWigderson在计算复杂性理论方面的贡献及其对现代计算的影响提示:AviWigderson教......
  • Connection to tcp://192.168.112.137:1935?tcp_nodelay=0 failed: Connection timed
    记录一下自己的报错和解决步骤输入catnginx.conf 查看Nginx的配置文件nginx.conf修改nginx核心配置文件nginx,添加rtmp模块rtmp{                                          ......
  • 光平面标定代码
            本篇文章主要给出光平面标定代码,鉴于自身水平所限,如有错误,欢迎批评指正。(欢迎进Q群交流:874653199)        数据分为棋盘格数据和激光条数据,激光条数据为在第22个位姿至第26个位姿下打在棋盘格标定板上采集的图像。clc;clear;%%相机标定image_fil......
  • Linux文件目录权限与特殊权限
    18.文件与目录权限文件访问者分类(朋友圈)文件拥有者文件所属组文件的other文件类型d:目录文件-:普通文件(文本,源代码,可执行程序,第三方动静态库)l:软链接(类似Windows的快捷方式)b:块设备文件(例如硬盘、光驱等)p:管道文件c:字符设备文件(例如屏幕等串口设备)s:套接口文件......