动态数据竞争检测方法实验分析(二)
2016-06-03 15:30
218 查看
上一篇文章主要分析了各个检测方法在检测能力上的优劣。这篇文章主要分析一下各个检测方法对程序造成的影响以及可扩展性。
我们挑选了比较常用的SPLASH-2测试集程序用来测试这些动态数据竞争检测方法在程序运行过程中需要消耗的执行时间以及内存。
上图展示的是动态数据竞争检测方法在不同的程序上执行需要的平均内存开销。在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在向量时钟和锁集上的操作相比于其他方法都要更多。
到此为止,我们有关动态数据竞争检测相关的方法就要告一段落了,后序将介绍其他的发现数据竞争的方法。
我们挑选了比较常用的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在向量时钟和锁集上的操作相比于其他方法都要更多。
到此为止,我们有关动态数据竞争检测相关的方法就要告一段落了,后序将介绍其他的发现数据竞争的方法。
相关文章推荐
- PHP MJPEG
- Android 6.0中的新技术总结
- Android快速findViewById
- 获取当前屏幕显示的viewcontroller
- TCP中 recv和sendf函数
- 浮点数转换成字符串函数
- 《剑指offer》:[11]旋转数组的最小数字
- 从零开始构建MSBuild C#项目文件
- log4j详细配置
- 读取data/data/ccc.apl(忘了出处)
- jar包更新到远程仓库
- SVN安装
- iOS笔记—NSURLConnection怎么把http改为https
- Python数据类型转换
- 存储过程中日期格式的转换
- 以Yii 2.0风格加载自定义类或命名空间 [配置使用Yii autoloader] [ 2.0 版本 ]
- Hibernate与Ibatis比较
- Intent和IntentFilter详解
- 笔记:Linux 常用命令
- 敏捷开发之Scrum