动态数据竞争检测方法实验分析(二)

上一篇文章主要分析了各个检测方法在检测能力上的优劣。这篇文章主要分析一下各个检测方法对程序造成的影响以及可扩展性。

我们挑选了比较常用的SPLASH-2测试集程序用来测试这些动态数据竞争检测方法在程序运行过程中需要消耗的执行时间以及内存。

应用程序

输入参数

描述

同步

Cholesky

-p1/2/4/8/16/32 -b32 -c16384 ./inputs/tk17.O

cholesky decomposition

Lock+Condvar

FFT

-p1/2/4/8/16/32 -m20 -n65536 -l4

fast fourier transformation

Lock+Condvar

LU

-p1/2/4/8/16/32 –n512 -b16

factors a dense matrix into the product of a lower triangular and an upper triangular matrix

Lock+Condvar

Radix

-p1/2/4/8/16/32 –n5262144 -r8 -m524288

radix sort

Lock+Condvar

图例
平均内存开销

上图展示的是动态数据竞争检测方法在不同的程序上执行需要的平均内存开销。在Cholesky中可以明显的发现TS需要的内存开销是其他9种方法的两倍多,其次是ML。这两种由于保留了很多锁集和向量时钟信息,因此占用的内存会很多。FFT中当线程数目大于等于8并且不超过16时,ML需要的内存增长趋势大于其他几个方法,而当线程数目大于16时,HG需要的内存增长趋势大于其他方法,而ML趋于平稳。LU中各个方法总体来看都需要比较类似的内存开销并且增长趋势也保持一致。Radix中当线程数目大于8时,各个方法需要的内存开销都比较接近并且增长趋势趋于平稳。而当线程数目在2~8之间时,有一个明显的峰值并且内存开销增长趋势最快。

图例
平均执行时间

上图展示的是动态数据竞争检测方法在不同的程序上执行需要的平均执行时间。Cholesky中可以明显的发现当线程数目大于4时,TS需要的执行时间比其他方法都要多,其次是ML,然后是HG。而SL+和Loft相对来说执行得较快。FFT中可以明显的发现HG的执行时间比其他方法都要多并且执行时间增长趋势比其他方法都要快,当线程数目大于4时,其他方法需要的时间都趋于平稳。LU中当线程数目大于8时,各个方法需要的执行时间基本相同并且执行时间增长趋势也保持一致。Radix中,当线程数目大于8时,ML需要的执行时间都要大于其他方法并且执行时间增长趋势也更快。

同时我们也可以发现当线程数目在4时,这四个程序执行时间都会到达一个峰值。这点我们暂时还无法解释,期待后序研究中发现其中的问题。

锁集和向量时钟操作分析
锁集和向量时钟操作分析

上表展示的动态数据竞争检测方法在不同程序(16个线程)上执行时锁集操作和向量时钟操作相关的统计。VC OPS ON SYNC OBJS表示就是在同步对象上向量时钟相关的操作,其中JOINS表示向量时钟合并操作,ASSIGNS表示的就是向量时钟拷贝操作,CMPS表示就是向量时钟比较操作。而LOCKSET OPS表示就是锁集相关操作,INTSECS表示锁集交集操作,ASSIGNS表示锁集拷贝操作,ALLOCS表示锁集分配内存空间操作,ADDS表示就是锁集添加锁操作。

从这张表中能够我们发现在FFT程序中,HG在向量时钟的ASSIGNS和CMPS的操作数目远远多于其他方法,这也就不难理解为什么在Cholesky中HG需要的内存开销和执行时间都比较多。整体上来看,HG、TS在向量时钟和锁集上的操作相比于其他方法都要更多。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

任务调度并行算法的Python简单实现

本来自己想先使用Java来写一个版本,然后根据语法转义写成Python版本的,结果发现实际去做的时候有很多不同之处,首先就是Python中没有直接的数组的结构,...

3406
来自专栏大前端_Web

字符集和字符编码(Charset & Encoding)

计算机中储存的信息都是用二进制数表示的;而我们在屏幕上看到的英文、汉字等字符是二进制数转换之后的结果。通俗的说,按照何种规则将字符存储在计算机中,如’a’用什么...

923
来自专栏机器之心

数据科学入门必读:如何使用正则表达式?

选自Dataquest 作者:Alex Yang 机器之心编译 参与:Panda 正则表达式对数据处理而言非常重要。近日,Dataquest 博客发布了一篇针对...

32710
来自专栏Python入门

Python正则表达式的简单应用和示例演示

今天小编给大家分享的是Python正则表达式的简单应用和示例演示,将前面学习的Python正则表达式做一个概括。

652
来自专栏IT可乐

深入理解计算机系统(5.1)------优化程序性能

  你能获得的对程序最大的加速比就是当你第一次让它工作起来的时候。   在讲解如何优化程序性能之前,我们首先要明确写程序最主要的目标就是使它在所有可能的情况下都...

20010
来自专栏梧雨北辰的开发录

Python学习(3):理解计算机中编码三、认识常见的计算机编码

1393
来自专栏人工智能头条

TensorFlow架构与设计:OP本质论

1524
来自专栏互扯程序

计算机编码 - 更易懂的打开方式

写在前面 对于计算机编码,记得当年上学学计算机时候肚子都被搞大了,不对,是脑袋被搞大了,后来勉强学会了吧,工作这么多年,真的是忘得一干二净,由于平时工作基本都...

2987
来自专栏Rovo89

UML类图的学习笔记

833
来自专栏小小挖掘机

数据城堡参赛代码实战篇(二)---使用pandas进行数据去重

小编们最近参加了数据城堡举办的“大学生助学金精准资助预测”比赛,分组第19名的成绩进入了复赛,很激动有木有!在上一篇文章中,小编带你使用pandas并结合官方给...

3328

扫码关注云+社区