Demonstration venue · read-only. Every page can be browsed; the buttons that would change it are switched off. Create an account to run TaxoReview on your own data.

Vlad Ureche

dblp:93/9447 · DBLP profile ↗
← Back
7ranked-venue papers
4as first author
0since 2021 · last 2016
—ORCID · none

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

Software engineering, systems software and programming languages · 6 · 4 first-authorSystems, architecture and hardware · 1

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
5 papers
Programming languages and type systems · 30% Compilers and program optimization · 30% Program analysis · 24%
Computer architecture, parallel and distributed computing, and storage systems
1 paper
High-performance computing · 100%

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

TopicWeightPapersLastEvidence papers
Compilers and program optimization › memory optimization
data layout transformation
0.422015
Automating ad hoc data representation transformations · OOPSLA 2015
Late data layout: unifying data representation transformations · OOPSLA 2014
Programming languages and type systems
type systems
0.422015
Automating ad hoc data representation transformations · OOPSLA 2015
Late data layout: unifying data representation transformations · OOPSLA 2014
Program analysis › static analysis
call graph construction
0.212016
Call graphs for languages with parametric polymorphism · OOPSLA 2016
Programming languages and type systems › type systems › polymorphism
parametric polymorphism
0.222016
Miniboxing: improving the speed to code size tradeoff in parametric polymorphism translations · OOPSLA 2013
Call graphs for languages with parametric polymorphism · OOPSLA 2016
Runtime systems and virtual machines › binary translation
bytecode translation
0.212013
Miniboxing: improving the speed to code size tradeoff in parametric polymorphism translations · OOPSLA 2013
Runtime systems and virtual machines › virtual machine implementation
java virtual machine
0.212013
Miniboxing: improving the speed to code size tradeoff in parametric polymorphism translations · OOPSLA 2013
Compilers and program optimization
specialization
0.212013
Miniboxing: improving the speed to code size tradeoff in parametric polymorphism translations · OOPSLA 2013
Program analysis › symbolic execution
parallel symbolic execution
0.112011
Parallel symbolic execution for automated real-world software testing · EuroSys 2011
Program analysis
symbolic execution
0.112011
Parallel symbolic execution for automated real-world software testing · EuroSys 2011
Compilers and program optimization › compiler optimization › type-based optimization
devirtualization
0.112016
Call graphs for languages with parametric polymorphism · OOPSLA 2016
High-performance computing
cluster computing
0.012011
Parallel symbolic execution for automated real-world software testing · EuroSys 2011

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

symbolic execution · 0.2POSIX environment modeling · 0.2
YearPublicationVenuePosition
2016 Call graphs for languages with parametric polymorphism
abstract
The performance of contemporary object oriented languages depends on optimizations such as devirtualization, inlining, and specialization, and these in turn depend on precise call graph analysis. Existing call graph analyses do not take advantage of the information provided by the rich type systems of contemporary languages, in particular generic type arguments. Many existing approaches analyze Java bytecode, in which generic types have been erased. This paper shows that this discarded information is actually very useful as the context in a context-sensitive analysis, where it significantly improves precision and keeps the running time small. Specifically, we propose and evaluate call graph construction algorithms in which the contexts of a method are (i) the type arguments passed to its type parameters, and (ii) the static types of the arguments passed to its term parameters. The use of static types from the caller as context is effective because it allows more precise dispatch of call sites inside the callee.
Dmitry Petrashko, Vlad Ureche, Ondrej Lhoták, Martin Odersky
OOPSLA2
2015 RRB vector: a practical general purpose immutable sequence
abstract
State-of-the-art immutable collections have wildly differing performance characteristics across their operations, often forcing programmers to choose different collection implementations for each task. Thus, changes to the program can invalidate the choice of collections, making code evolution costly. It would be desirable to have a collection that performs well for a broad range of operations. To this end, we present the RRB-Vector, an immutable sequence collection that offers good performance across a large number of sequential and parallel operations. The underlying innovations are: (1) the Relaxed-Radix-Balanced (RRB) tree structure, which allows efficient structural reorganization, and (2) an optimization that exploits spatio-temporal locality on the RRB data structure in order to offset the cost of traversing the tree. In our benchmarks, the RRB-Vector speedup for parallel operations is lower bounded by 7x when executing on 4 CPUs of 8 cores each. The performance for discrete operations, such as appending on either end, or updating and removing elements, is consistently good and compares favorably to the most important immutable sequence collections in the literature and in use today. The memory footprint of RRB-Vector is on par with arrays and an order of magnitude less than competing collections.
Nicolas Stucki, Tiark Rompf, Vlad Ureche, Phil Bagwell
ICFP3
2015 Automating ad hoc data representation transformations
abstract
To maximize run-time performance, programmers often specialize their code by hand, replacing library collections and containers by custom objects in which data is restructured for efficient access. However, changing the data representation is a tedious and error-prone process that makes it hard to test, maintain and evolve the source code. We present an automated and composable mechanism that allows programmers to safely change the data representation in delimited scopes containing anything from expressions to entire class definitions. To achieve this, programmers define a transformation and our mechanism automatically and transparently applies it during compilation, eliminating the need to manually change the source code. Our technique leverages the type system in order to offer correctness guarantees on the transformation and its interaction with object-oriented language features, such as dynamic dispatch, inheritance and generics. We have embedded this technique in a Scala compiler plugin and used it in four very different transformations, ranging from improving the data layout and encoding, to retrofitting specialization and value class status, and all the way to collection deforestation. On our benchmarks, the technique obtained speedups between 1.8x and 24.5x.
Vlad Ureche, Aggelos Biboudis, Yannis Smaragdakis, Martin Odersky
OOPSLA1
2014 Late data layout: unifying data representation transformations
abstract
Values need to be represented differently when interacting with certain language features. For example, an integer has to take an object-based representation when interacting with erased generics, although, for performance reasons, the stack-based value representation is better. To abstract over these implementation details, some programming languages choose to expose a unified high-level concept (the integer) and let the compiler choose its exact representation and insert coercions where necessary.
Vlad Ureche, Eugene Burmako, Martin Odersky
OOPSLA1
2013 Miniboxing: improving the speed to code size tradeoff in parametric polymorphism translations
abstract
Parametric polymorphism enables code reuse and type safety. Underneath the uniform interface exposed to programmers, however, its low level implementation has to cope with inherently non-uniform data: value types of different sizes and semantics (bytes, integers, floating point numbers) and reference types (pointers to heap objects). On the Java Virtual Machine, parametric polymorphism is currently translated to bytecode using two competing approaches: homogeneous and heterogeneous. Homogeneous translation requires boxing, and thus introduces indirect access delays. Heterogeneous translation duplicates and adapts code for each value type individually, producing more bytecode. Therefore bytecode speed and size are at odds with each other. This paper proposes a novel translation that significantly reduces the bytecode size without affecting the execution speed. The key insight is that larger value types (such as integers) can hold smaller ones (such as bytes) thus reducing the duplication necessary in heterogeneous translations. In our implementation, on the Scala compiler, we encode all primitive value types in long integers. The resulting bytecode approaches the performance of monomorphic code, matches the performance of the heterogeneous translation and obtains speedups of up to 22x over the homogeneous translation, all with modest increases in size.
Vlad Ureche, Cristian Talau, Martin Odersky
OOPSLA1
2012 StagedSAC: a case study in performance-oriented DSL development
abstract
Domain-specific languages (DSLs) can bridge the gap between high-level programming and efficient execution. However, implementing compiler tool-chains for performance oriented DSLs requires significant effort. Recent research has produced methodologies and frameworks that promise to reduce this development effort by enabling quick transition from library-only, purely embedded DSLs to optimizing compilation. In this case study we report on our experience implementing a compiler for StagedSAC. StagedSAC is a DSL for arithmetic processing with multidimensional arrays modeled after the stand-alone language SAC (Single Assignment C). The main language feature of both SAC and StagedSAC is a loop construction that enables high-level and concise implementations of array algorithms. At the same time, the functional semantics of the two languages allow for advanced compiler optimizations and parallel code generation.
Vlad Ureche, Tiark Rompf, Arvind K. Sujeeth, Hassan Chafi, Martin Odersky
PEPM1
2011 Parallel symbolic execution for automated real-world software testing
abstract
This paper introduces Cloud9, a platform for automated testing of real-world software. Our main contribution is the scalable parallelization of symbolic execution on clusters of commodity hardware, to help cope with path explosion. Cloud9 provides a systematic interface for writing "symbolic tests" that concisely specify entire families of inputs and behaviors to be tested, thus improving testing productivity. Cloud9 can handle not only single-threaded programs but also multi-threaded and distributed systems. It includes a new symbolic environment model that is the first to support all major aspects of the POSIX interface, such as processes, threads, synchronization, networking, IPC, and file I/O. We show that Cloud9 can automatically test real systems, like memcached, Apache httpd, lighttpd, the Python interpreter, rsync, and curl. We show how Cloud9 can use existing test suites to generate new test cases that capture untested corner cases (e.g., network stream fragmentation). Cloud9 can also diagnose incomplete bug fixes by analyzing the difference between buggy paths before and after a patch.
Stefan Bucur, Vlad Ureche, Cristian Zamfir, George Candea
EuroSys2