14,274 research outputs found

    Lock-free Concurrent Data Structures

    Full text link
    Concurrent data structures are the data sharing side of parallel programming. Data structures give the means to the program to store data, but also provide operations to the program to access and manipulate these data. These operations are implemented through algorithms that have to be efficient. In the sequential setting, data structures are crucially important for the performance of the respective computation. In the parallel programming setting, their importance becomes more crucial because of the increased use of data and resource sharing for utilizing parallelism. The first and main goal of this chapter is to provide a sufficient background and intuition to help the interested reader to navigate in the complex research area of lock-free data structures. The second goal is to offer the programmer familiarity to the subject that will allow her to use truly concurrent methods.Comment: To appear in "Programming Multi-core and Many-core Computing Systems", eds. S. Pllana and F. Xhafa, Wiley Series on Parallel and Distributed Computin

    Exploring Subexponential Parameterized Complexity of Completion Problems

    Get PDF
    Let F{\cal F} be a family of graphs. In the F{\cal F}-Completion problem, we are given a graph GG and an integer kk as input, and asked whether at most kk edges can be added to GG so that the resulting graph does not contain a graph from F{\cal F} as an induced subgraph. It appeared recently that special cases of F{\cal F}-Completion, the problem of completing into a chordal graph known as Minimum Fill-in, corresponding to the case of F={C4,C5,C6,}{\cal F}=\{C_4,C_5,C_6,\ldots\}, and the problem of completing into a split graph, i.e., the case of F={C4,2K2,C5}{\cal F}=\{C_4, 2K_2, C_5\}, are solvable in parameterized subexponential time 2O(klogk)nO(1)2^{O(\sqrt{k}\log{k})}n^{O(1)}. The exploration of this phenomenon is the main motivation for our research on F{\cal F}-Completion. In this paper we prove that completions into several well studied classes of graphs without long induced cycles also admit parameterized subexponential time algorithms by showing that: - The problem Trivially Perfect Completion is solvable in parameterized subexponential time 2O(klogk)nO(1)2^{O(\sqrt{k}\log{k})}n^{O(1)}, that is F{\cal F}-Completion for F={C4,P4}{\cal F} =\{C_4, P_4\}, a cycle and a path on four vertices. - The problems known in the literature as Pseudosplit Completion, the case where F={2K2,C4}{\cal F} = \{2K_2, C_4\}, and Threshold Completion, where F={2K2,P4,C4}{\cal F} = \{2K_2, P_4, C_4\}, are also solvable in time 2O(klogk)nO(1)2^{O(\sqrt{k}\log{k})} n^{O(1)}. We complement our algorithms for F{\cal F}-Completion with the following lower bounds: - For F={2K2}{\cal F} = \{2K_2\}, F={C4}{\cal F} = \{C_4\}, F={P4}{\cal F} = \{P_4\}, and F={2K2,P4}{\cal F} = \{2K_2, P_4\}, F{\cal F}-Completion cannot be solved in time 2o(k)nO(1)2^{o(k)} n^{O(1)} unless the Exponential Time Hypothesis (ETH) fails. Our upper and lower bounds provide a complete picture of the subexponential parameterized complexity of F{\cal F}-Completion problems for F{2K2,C4,P4}{\cal F}\subseteq\{2K_2, C_4, P_4\}.Comment: 32 pages, 16 figures, A preliminary version of this paper appeared in the proceedings of STACS'1

    A formally verified compiler back-end

    Get PDF
    This article describes the development and formal verification (proof of semantic preservation) of a compiler back-end from Cminor (a simple imperative intermediate language) to PowerPC assembly code, using the Coq proof assistant both for programming the compiler and for proving its correctness. Such a verified compiler is useful in the context of formal methods applied to the certification of critical software: the verification of the compiler guarantees that the safety properties proved on the source code hold for the executable compiled code as well

    An Algebraic Framework for Compositional Program Analysis

    Full text link
    The purpose of a program analysis is to compute an abstract meaning for a program which approximates its dynamic behaviour. A compositional program analysis accomplishes this task with a divide-and-conquer strategy: the meaning of a program is computed by dividing it into sub-programs, computing their meaning, and then combining the results. Compositional program analyses are desirable because they can yield scalable (and easily parallelizable) program analyses. This paper presents algebraic framework for designing, implementing, and proving the correctness of compositional program analyses. A program analysis in our framework defined by an algebraic structure equipped with sequencing, choice, and iteration operations. From the analysis design perspective, a particularly interesting consequence of this is that the meaning of a loop is computed by applying the iteration operator to the loop body. This style of compositional loop analysis can yield interesting ways of computing loop invariants that cannot be defined iteratively. We identify a class of algorithms, the so-called path-expression algorithms [Tarjan1981,Scholz2007], which can be used to efficiently implement analyses in our framework. Lastly, we develop a theory for proving the correctness of an analysis by establishing an approximation relationship between an algebra defining a concrete semantics and an algebra defining an analysis.Comment: 15 page
    corecore