83 research outputs found

    Analysis of pivot sampling in dual-pivot Quicksort: A holistic analysis of Yaroslavskiy's partitioning scheme

    Get PDF
    The final publication is available at Springer via http://dx.doi.org/10.1007/s00453-015-0041-7The new dual-pivot Quicksort by Vladimir Yaroslavskiy-used in Oracle's Java runtime library since version 7-features intriguing asymmetries. They make a basic variant of this algorithm use less comparisons than classic single-pivot Quicksort. In this paper, we extend the analysis to the case where the two pivots are chosen as fixed order statistics of a random sample. Surprisingly, dual-pivot Quicksort then needs more comparisons than a corresponding version of classic Quicksort, so it is clear that counting comparisons is not sufficient to explain the running time advantages observed for Yaroslavskiy's algorithm in practice. Consequently, we take a more holistic approach and give also the precise leading term of the average number of swaps, the number of executed Java Bytecode instructions and the number of scanned elements, a new simple cost measure that approximates I/O costs in the memory hierarchy. We determine optimal order statistics for each of the cost measures. It turns out that the asymmetries in Yaroslavskiy's algorithm render pivots with a systematic skew more efficient than the symmetric choice. Moreover, we finally have a convincing explanation for the success of Yaroslavskiy's algorithm in practice: compared with corresponding versions of classic single-pivot Quicksort, dual-pivot Quicksort needs significantly less I/Os, both with and without pivot sampling.Peer ReviewedPostprint (author's final draft

    Structural Analysis: Shape Information via Points-To Computation

    Full text link
    This paper introduces a new hybrid memory analysis, Structural Analysis, which combines an expressive shape analysis style abstract domain with efficient and simple points-to style transfer functions. Using data from empirical studies on the runtime heap structures and the programmatic idioms used in modern object-oriented languages we construct a heap analysis with the following characteristics: (1) it can express a rich set of structural, shape, and sharing properties which are not provided by a classic points-to analysis and that are useful for optimization and error detection applications (2) it uses efficient, weakly-updating, set-based transfer functions which enable the analysis to be more robust and scalable than a shape analysis and (3) it can be used as the basis for a scalable interprocedural analysis that produces precise results in practice. The analysis has been implemented for .Net bytecode and using this implementation we evaluate both the runtime cost and the precision of the results on a number of well known benchmarks and real world programs. Our experimental evaluations show that the domain defined in this paper is capable of precisely expressing the majority of the connectivity, shape, and sharing properties that occur in practice and, despite the use of weak updates, the static analysis is able to precisely approximate the ideal results. The analysis is capable of analyzing large real-world programs (over 30K bytecodes) in less than 65 seconds and using less than 130MB of memory. In summary this work presents a new type of memory analysis that advances the state of the art with respect to expressive power, precision, and scalability and represents a new area of study on the relationships between and combination of concepts from shape and points-to analyses

    Safety-Critical Java for Embedded Systems

    Get PDF

    Increasing the Performance and Predictability of the Code Execution on an Embedded Java Platform

    Get PDF
    This thesis explores the execution of object-oriented code on an embedded Java platform. It presents established and derives new approaches for the implementation of high-level object-oriented functionality and commonly expected system services. The goal of the developed techniques is the provision of the architectural base for an efficient and predictable code execution. The research vehicle of this thesis is the Java-programmed SHAP platform. It consists of its platform tool chain and the highly-customizable SHAP bytecode processor. SHAP offers a fully operational embedded CLDC environment, in which the proposed techniques have been implemented, verified, and evaluated. Two strands are followed to achieve the goal of this thesis. First of all, the sequential execution of bytecode is optimized through a joint effort of an optimizing offline linker and an on-chip application loader. Additionally, SHAP pioneers a reference coloring mechanism, which enables a constant-time interface method dispatch that need not be backed a large sparse dispatch table. Secondly, this thesis explores the implementation of essential system services within designated concurrent hardware modules. This effort is necessary to decouple the computational progress of the user application from the interference induced by time-sharing software implementations of these services. The concrete contributions comprise a spill-free, on-chip stack; a predictable method cache; and a concurrent garbage collection. Each approached means is described and evaluated after the relevant state of the art has been reviewed. This review is not limited to preceding small embedded approaches but also includes techniques that have proven successful on larger-scale platforms. The other way around, the chances that these platforms may benefit from the techniques developed for SHAP are discussed

    Program Transformations for Light-Weight CPU Accounting and Control in the Java Virtual Machine - A Systematic Review

    Get PDF
    This article constitutes a thorough presentation of an original scheme for portable CPU accounting and control in Java, which is based on program transformation techniques at the bytecode level and can be used with every standard Java Virtual Machine. In our approach applications, middleware, and even the standard Java runtime libraries (i.e., the Java Development Kit) are modified in a fully portable way, in order to expose details regarding the execution of threads. These transformations however incur a certain overhead at runtime. Further contributions of this article are the systematic review of the origin of such overheads and the description of a new static path prediction scheme targeted at reducing them

    Java for Cost Effective Embedded Real-Time Software

    Get PDF

    Application of the internet technology and client/server paradigm for the implementation of REPI

    Get PDF
    There are many problems associated with Requirements Engineering such as defining the system scope, developing understanding among the communities involved in the system to be built, volatility of requirements etc. These problems may lead to poor requirements and therefore cancellation of the system development, or else the development of a system that is unsatisfactory, has high maintenance cost or is unacceptable. By improving Requirements Elicitation, the Requirements Engineering can be improved, leading to a better requirements specification and eventually a better product. Requirements Elicitation requires effective communication among the team members, as communication is the key factor. Easing communications between stakeholders and developers makes the process of Requirements Elicitation easier. REPI guides team members through the elicitation phase using the SEI\u27s framework. REPI forces stakeholders to explicitly describe the requirements resulting in reduced chances of misunderstood requirements, leading to better requirements specification

    iTrading

    Get PDF
    Mestrado em Engenharia de Computadores e TelemáticaA Internet permitiu revolucionar várias áreas económicas graças à facilidade com que é possível distribuir informação e comunicar entre entidades. Existem ainda áreas onde a Internet não só revolucionou os mercados financeiros, como levou à criação de novos mercados, permitindo o acesso desses mercados a novas entidades. Neste contexto, o aparecimento de mercados de negociação de bens e serviços em tempo-real é paradigmático. As bolsas de valores, mercados primários, correctores de apostas, entre outros, viram o seu modelo de funcionamento alterado pela Internet. Estes mercados passaram a negociar em permanência, pelo que, o número de ordens financeiras subiu tão exponencialmente que é actualmente necessário recorrer a complexas plataformas de transações. Hoje em dia existem inúmeras aplicações de negociação em tempo-real para os diversos mercados, umas nativas (domínio de plataformas Microsoft) e outras Web (limitações ao nível de tempo de resposta e das capacidades gráficas). Um aspecto comum a todas elas é o facto de se centrarem na negociação electrónica de ordens emitidas de forma explícita por humanos e ter apenas automatismos para situações de controlo de prejuízo (via triggers). Esta dissertação pretende, por isso, estudar o desenvolvimento de uma nova geração de aplicações de trading que incluam um ambiente de programação embutido na própria aplicação, automação de negociação e backtesting. De forma a colmatar a inexistência deste tipo de aplicações em ambientes não Windows, pretende-se que a mesma seja desenvolvida para ambientes Linux, OSX e Windows.The Internet brought a revolution to several economic areas because it facilitated the distribution of information and communication between entities. In this context, the emergence of online trading markets of goods and services is paradigmatic. Markets started to negotiate continuously and the number of financial orders rose exponentially as it is currently necessary to employ complex transactions platforms. Today, there are numerous applications of online trading, some are native (limited to platforms such as Microsoft OS), others are Web-based (latency issues). This dissertation presents the development of a new generation of trading applications that includes an embedded programming environment in the application itself, trading automation and backtesting. It was developed as a multi platform application for Linux, OSX and Windows platforms
    corecore