Understanding parallelism-inhibiting dependences in sequential Java programs

A. Rountev, Kevin Van Valkenburgh, Dacong Yan, P. Sadayappan
{"title":"Understanding parallelism-inhibiting dependences in sequential Java programs","authors":"A. Rountev, Kevin Van Valkenburgh, Dacong Yan, P. Sadayappan","doi":"10.1109/ICSM.2010.5609588","DOIUrl":null,"url":null,"abstract":"Many existing sequential components, libraries, and applications will need to be re-engineered for parallelism. This work proposes a dynamic analysis of sequential Java programs that helps a programmer to understand bottlenecks for parallelism. The analysis measures the parallelism available in the program by considering a hypothetical parallel execution in which the code within a method executes sequentially, but each caller will execute in parallel with its callees. A best-case scenario is assumed: every statement executes as early as possible, as long as all dependences from the sequential program are satisfied. The idealized speedup under this model is a measure of the method-level parallelism inherent in the program, independent of hardware and JVMs. The analysis employs bytecode instrumentation and an online algorithm which tracks the reads and writes of relevant memory locations during a run of the sequential program. If the best-case parallelism is low, this likely means that the program cannot be easily re-engineered into a scalable parallel version. In experiments with 26 Java programs, we observed this situation for most programs. This problem is sometimes due to programmer decisions that were perfectly reasonable for a sequential program but would be detrimental to the performance of any parallel version. To pinpoint such decisions, we propose an approach that employs the dynamic analysis to automatically find memory locations whose read and write operations decrease the available parallelism. In three case studies, we demonstrate how these bottlenecks can be identified and eliminated using the proposed approach.","PeriodicalId":101801,"journal":{"name":"2010 IEEE International Conference on Software Maintenance","volume":"99 1","pages":"0"},"PeriodicalIF":0.0000,"publicationDate":"2010-09-12","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":"9","resultStr":null,"platform":"Semanticscholar","paperid":null,"PeriodicalName":"2010 IEEE International Conference on Software Maintenance","FirstCategoryId":"1085","ListUrlMain":"https://doi.org/10.1109/ICSM.2010.5609588","RegionNum":0,"RegionCategory":null,"ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":null,"EPubDate":"","PubModel":"","JCR":"","JCRName":"","Score":null,"Total":0}
引用次数: 9

Abstract

Many existing sequential components, libraries, and applications will need to be re-engineered for parallelism. This work proposes a dynamic analysis of sequential Java programs that helps a programmer to understand bottlenecks for parallelism. The analysis measures the parallelism available in the program by considering a hypothetical parallel execution in which the code within a method executes sequentially, but each caller will execute in parallel with its callees. A best-case scenario is assumed: every statement executes as early as possible, as long as all dependences from the sequential program are satisfied. The idealized speedup under this model is a measure of the method-level parallelism inherent in the program, independent of hardware and JVMs. The analysis employs bytecode instrumentation and an online algorithm which tracks the reads and writes of relevant memory locations during a run of the sequential program. If the best-case parallelism is low, this likely means that the program cannot be easily re-engineered into a scalable parallel version. In experiments with 26 Java programs, we observed this situation for most programs. This problem is sometimes due to programmer decisions that were perfectly reasonable for a sequential program but would be detrimental to the performance of any parallel version. To pinpoint such decisions, we propose an approach that employs the dynamic analysis to automatically find memory locations whose read and write operations decrease the available parallelism. In three case studies, we demonstrate how these bottlenecks can be identified and eliminated using the proposed approach.
理解顺序Java程序中抑制并行性的依赖关系
许多现有的顺序组件、库和应用程序将需要重新设计以实现并行性。这项工作提出了对顺序Java程序的动态分析,帮助程序员理解并行性的瓶颈。该分析通过考虑假设的并行执行来衡量程序中可用的并行性,其中方法中的代码依次执行,但每个调用者将与其被调用者并行执行。假设最好的情况是:只要满足顺序程序的所有依赖项,每个语句都尽可能早地执行。该模型下的理想加速是程序中固有的方法级并行性的度量,独立于硬件和jvm。该分析采用字节码检测和在线算法,该算法跟踪顺序程序运行期间相关内存位置的读写。如果最佳情况下的并行性较低,这可能意味着程序不能轻松地重新设计为可伸缩的并行版本。在26个Java程序的实验中,我们观察到大多数程序都存在这种情况。这个问题有时是由于程序员的决定,这些决定对于顺序程序来说是完全合理的,但对任何并行版本的性能都是有害的。为了确定这样的决策,我们提出了一种方法,该方法使用动态分析来自动查找读取和写入操作减少可用并行性的内存位置。在三个案例研究中,我们演示了如何使用所建议的方法识别和消除这些瓶颈。
本文章由计算机程序翻译,如有差异,请以英文原文为准。
求助全文
约1分钟内获得全文 求助全文
来源期刊
自引率
0.00%
发文量
0
×
引用
GB/T 7714-2015
复制
MLA
复制
APA
复制
导出至
BibTeX EndNote RefMan NoteFirst NoteExpress
×
提示
您的信息不完整,为了账户安全,请先补充。
现在去补充
×
提示
您因"违规操作"
具体请查看互助需知
我知道了
×
提示
确定
请完成安全验证×
copy
已复制链接
快去分享给好友吧!
我知道了
右上角分享
点击右上角分享
0
联系我们:info@booksci.cn Book学术提供免费学术资源搜索服务,方便国内外学者检索中英文文献。致力于提供最便捷和优质的服务体验。 Copyright © 2023 布克学术 All rights reserved.
京ICP备2023020795号-1
ghs 京公网安备 11010802042870号
Book学术文献互助
Book学术文献互助群
群 号:481959085
Book学术官方微信