Cosmin Radoi

dblp:89/7473 · DBLP profile ↗
← Back
6ranked-venue papers
4as first author
0since 2021 · last 2015
—ORCID · none

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 5 · 3 first-authorSystems, architecture and hardware · 1 · 1 first-author

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
6 papers
Concurrent programming · 30% Program analysis · 28% Software maintenance and evolution · 18%
Computer architecture, parallel and distributed computing, and storage systems
2 papers
Parallel and multicore computing · 79% Cloud and datacenter computing · 21%

Topics — the 13 heaviest of 14, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Program analysis
static analysis
0.432015
Effective Techniques for Static Race Detection in Java Parallel Loops · ACM Trans. Softw. Eng. Methodol. 2015
Practical static race detection for Java parallel loops · ISSTA 2013
CARAMEL: Detecting and Fixing Performance Problems That Have Non-Intrusive Fixes · ICSE (1) 2015
Parallel and multicore computing
parallel programming models
0.422015
Are web applications ready for parallelism? · PPoPP 2015
Translating imperative code to MapReduce · OOPSLA 2014
Concurrent programming › concurrency bug detection
data race detection
0.422015
Effective Techniques for Static Race Detection in Java Parallel Loops · ACM Trans. Softw. Eng. Methodol. 2015
Practical static race detection for Java parallel loops · ISSTA 2013
Concurrent programming
concurrency bugs
0.322015
Effective Techniques for Static Race Detection in Java Parallel Loops · ACM Trans. Softw. Eng. Methodol. 2015
Retrofitting concurrency for Android applications through refactoring · SIGSOFT FSE 2014
Parallel and multicore computing
data parallelism
0.212015
Are web applications ready for parallelism? · PPoPP 2015
Cloud and datacenter computing › datacenter services › online service systems › internet services
web applications
0.212015
Are web applications ready for parallelism? · PPoPP 2015
Software maintenance and evolution › refactoring
concurrency refactoring
0.212014
Retrofitting concurrency for Android applications through refactoring · SIGSOFT FSE 2014
Compilers and program optimization
program transformation
0.212014
Translating imperative code to MapReduce · OOPSLA 2014
Software maintenance and evolution
refactoring
0.212014
Retrofitting concurrency for Android applications through refactoring · SIGSOFT FSE 2014
Parallel and multicore computing › data-parallel programming
mapreduce
0.212014
Translating imperative code to MapReduce · OOPSLA 2014
Program analysis › concurrent program analysis
static race detection
0.212013
Practical static race detection for Java parallel loops · ISSTA 2013
Empirical software engineering
developer studies
0.112015
Are web applications ready for parallelism? · PPoPP 2015
Programming languages and type systems › concurrent programming languages
parallel language constructs
0.012013
Practical static race detection for Java parallel loops · ISSTA 2013

Methods — techniques the papers use, named apart from their topics

static analysis · 0.6survey · 0.4performance characterization · 0.4rewrite rules · 0.4group-by operations · 0.4fold operations · 0.4data flow analysis · 0.2points-to static analysis · 0.2
YearPublicationVenuePosition
2015 CARAMEL: Detecting and Fixing Performance Problems That Have Non-Intrusive Fixes
abstract
Performance bugs are programming errors that slow down program execution. While existing techniques can detect various types of performance bugs, a crucial and practical aspect of performance bugs has not received the attention it deserves: how likely are developers to fix a performance bug? In practice, fixing a performance bug can have both benefits and drawbacks, and developers fix a performance bug only when the benefits outweigh the drawbacks. Unfortunately, for many performance bugs, the benefits and drawbacks are difficult to assess accurately. This paper presents CARAMEL, a novel static technique that detects and fixes performance bugs that have non-intrusive fixes likely to be adopted by developers. Each performance bug detected by CARAMEL is associated with a loop and a condition. When the condition becomes true during the loop execution, all the remaining computation performed by the loop is wasted. Developers typically fix such performance bugs because these bugs waste computation in loops and have non-intrusive fixes: when some condition becomes true dynamically, just break out of the loop. Given a program, CARAMEL detects such bugs statically and gives developers a potential source-level fix for each bug. We evaluate CARAMEL on real-world applications, including 11 popular Java applications (e.g., Groovy, Log4J, Lucene, Struts, Tomcat, etc) and 4 widely used C/C++ applications (Chromium, GCC, Mozilla, and My SQL). CARAMEL finds 61 new performance bugs in the Java applications and 89 new performance bugs in the C/C++ applications. Based on our bug reports, developers so far have fixed 51 and 65 performance bugs in the Java and C/C++ applications, respectively. Most of the remaining bugs are still under consideration by developers.
Adrian Nistor, Po-Chun Chang, Cosmin Radoi, Shan Lu 0001
ICSE (1)3
2015 Are web applications ready for parallelism?
abstract
In recent years, web applications have become pervasive. Their backbone is JavaScript, the only programming language supported by all major web browsers. Most browsers run on desktop or mobile devices with parallel hardware. However, JavaScript is by design sequential, and current web applications make little use of hardware parallelism. Are web applications ready to exploit parallel hardware? We answer the question in two steps: First, we survey 174 web developers about the potential and challenges of using parallelism. Then, we study the performance and computation shape of a set of web applications that are representative for the emerging web. Our findings indicate that emerging web applications do have latent data parallelism, and JavaScript developers' programming style is not a significant impediment to exploiting this parallelism.
Cosmin Radoi, Stephan Herhut, Jaswanth Sreeram, Danny Dig
PPoPP1
2015 Effective Techniques for Static Race Detection in Java Parallel Loops
abstract
Despite significant progress in recent years, the important problem of static race detection remains open. Previous techniques took a general approach and looked for races by analyzing the effects induced by low-level concurrency constructs (e.g., java.lang.Thread). But constructs and libraries for expressing parallelism at a higher level (e.g., fork-join, futures, parallel loops) are becoming available in all major programming languages. We claim that specializing an analysis to take advantage of the extra semantic information provided by the use of these constructs and libraries improves precision and scalability. We present I te R ace , a set of techniques that are specialized to use the intrinsic thread, safety, and dataflow structure of collections and of the new loop parallelism mechanism introduced in Java 8. Our evaluation shows that I te R ace is fast and precise enough to be practical. It scales to programs of hundreds of thousands of lines of code and reports very few race warnings, thus avoiding a common pitfall of static analyses. In five out of the seven case studies, I te R ace reported no false warnings. Also, it revealed six bugs in real-world applications. We reported four of them: one had already been fixed, and three were new and the developers confirmed and fixed them. Furthermore, we evaluate the effect of each specialization technique on the running time and precision of the analysis. For each application, we run the analysis under 32 different configurations. This allows to analyze each technique's effect both alone and in all possible combinations with other techniques.
Cosmin Radoi, Danny Dig
ACM Trans. Softw. Eng. Methodol.1
2014 Translating imperative code to MapReduce
abstract
We present an approach for automatic translation of sequential, imperative code into a parallel MapReduce framework. Automating such a translation is challenging: imperative updates must be translated into a functional MapReduce form in a manner that both preserves semantics and enables parallelism. Our approach works by first translating the input code into a functional representation, with loops succinctly represented by fold operations. Then, guided by rewrite rules, our system searches a space of equivalent programs for an effective MapReduce implementation. The rules include a novel technique for handling irregular loop-carried dependencies using group-by operations to enable greater parallelism. We have implemented our technique in a tool called Mold. It translates sequential Java code into code targeting the Apache Spark runtime. We evaluated Mold on several real-world kernels and found that in most cases Mold generated the desired MapReduce program, even for codes with complex indirect updates.
Cosmin Radoi, Stephen J. Fink, Rodric M. Rabbah, Manu Sridharan
OOPSLA1
2014 Retrofitting concurrency for Android applications through refactoring
abstract
Running compute-intensive or blocking I/O operations in the UI event thread of smartphone apps can severely degrade responsiveness. Despite the fact that Android supports writing concurrent code via AsyncTask, we know little about how developers use AsyncTask to improve responsiveness. To understand how AsyncTask is used/underused/misused in practice, we rst conduct a formative study using a corpus of top 104 most popular open-source Android apps comprising 1.34M SLOC. Our study shows that even though half of the apps use AsyncTask, there are hundreds of places where they missed opportunities to encapsulate long-running operations in AsyncTask. Second, 46% of the usages are manually refactored. However, the refactored code contains concurrency bugs (such as data races) and performance bugs (concurrent code still executes sequentially). Inspired by these ndings, we designed, developed, and evaluated Asynchronizer, an automated refactoring tool that enables developers to extract long-running operations into AsyncTask. Asynchronizer uses a points-to static analysis to determine the safety of the transformation. Our empirical evaluation shows that Asynchronizer is (i) highly applicable, (ii) accurate, (iii) safer than manual refactoring (iv) it saves development eort, (v) its results have been accepted by the open-source developers. This shows that Asynchronizer is useful.
Cosmin Radoi, Danny Dig
SIGSOFT FSE2
2013 Practical static race detection for Java parallel loops
abstract
Despite significant progress in recent years, the important problem of static race detection remains open. Previous techniques took a general approach and looked for races by analyzing the effects induced by low-level concurrency constructs (e.g., java.lang.Thread). But constructs and libraries for expressing parallelism at a higher level (e.g., fork-join, futures, parallel loops) are becoming available in all major programming languages.
Cosmin Radoi, Danny Dig
ISSTA1