1,121 research outputs found
Inferring Concise Specifications of APIs
Modern software relies on libraries and uses them via application programming
interfaces (APIs). Correct API usage as well as many software engineering tasks
are enabled when APIs have formal specifications. In this work, we analyze the
implementation of each method in an API to infer a formal postcondition.
Conventional wisdom is that, if one has preconditions, then one can use the
strongest postcondition predicate transformer (SP) to infer postconditions.
However, SP yields postconditions that are exponentially large, which makes
them difficult to use, either by humans or by tools. Our key idea is an
algorithm that converts such exponentially large specifications into a form
that is more concise and thus more usable. This is done by leveraging the
structure of the specifications that result from the use of SP. We applied our
technique to infer postconditions for over 2,300 methods in seven popular Java
libraries. Our technique was able to infer specifications for 75.7% of these
methods, each of which was verified using an Extended Static Checker. We also
found that 84.6% of resulting specifications were less than 1/4 page (20 lines)
in length. Our technique was able to reduce the length of SMT proofs needed for
verifying implementations by 76.7% and reduced prover execution time by 26.7%
New Computational Approaches For Multiple Rna Alignment And Rna Search
In this thesis we explore the the theory and history behind RNA alignment. Normal sequence alignments as studied by computer scientists can be completed in O(n2) time in the naive case. The process involves taking two input sequences and finding the list of edits that can transform one sequence into the other. This process is applied to biology in many forms, such as the creation of multiple alignments and the search of genomic sequences. When you take into account the RNA sequence structure the problem becomes even harder. Multiple RNA structure alignment is particularly challenging because covarying mutations make sequence information alone insufficient. Existing tools for multiple RNA alignments first generate pair-wise RNA structure alignments and then build the multiple alignment using only the sequence information. Here we present PMFastR, an algorithm which iteratively uses a sequence-structure alignment procedure to build a multiple RNA structure alignment. PMFastR also has low memory consumption allowing for the alignment of large sequences such as 16S and 23S rRNA. Specifically, we reduce the memory consumption to ∼O(band2 ∗ m) where band is the banding size. Other solutions are ∼ O(n2 ∗ m) where n and m are the lengths of the target and query respectively. The algorithm also provides a method to utilize a multi-core environment. We present results on benchmark data sets from BRAliBase, which shows PMFastR outperforms other state-of-the-art programs. Furthermore, we regenerate 607 Rfam seed alignments and show that our automated process creates similar multiple alignments to the manually-curated Rfam seed alignments. While these methods can also be applied directly to genome sequence search, the abundance of new multiple species genome alignments presents a new area for exploration. Many multiple alignments of whole genomes are available and these alignments keep growing in size. These alignments can provide more information to the searcher than just a single sequence. Using the methodology from sequence-structure alignment we developed AlnAlign, which searches an entire genome alignment using RNA sequence structure. While programs have been readily available to align alignments, this is the first to our knowledge that is specifically designed for RNA sequences. This algorithm is presented only in theory and is yet to be tested
Adaptive Lock-Free Data Structures in Haskell: A General Method for Concurrent Implementation Swapping
A key part of implementing high-level languages is providing built-in and
default data structures. Yet selecting good defaults is hard. A mutable data
structure's workload is not known in advance, and it may shift over its
lifetime - e.g., between read-heavy and write-heavy, or from heavy contention
by multiple threads to single-threaded or low-frequency use. One idea is to
switch implementations adaptively, but it is nontrivial to switch the
implementation of a concurrent data structure at runtime. Performing the
transition requires a concurrent snapshot of data structure contents, which
normally demands special engineering in the data structure's design. However,
in this paper we identify and formalize an relevant property of lock-free
algorithms. Namely, lock-freedom is sufficient to guarantee that freezing
memory locations in an arbitrary order will result in a valid snapshot. Several
functional languages have data structures that freeze and thaw, transitioning
between mutable and immutable, such as Haskell vectors and Clojure transients,
but these enable only single-threaded writers. We generalize this approach to
augment an arbitrary lock-free data structure with the ability to gradually
freeze and optionally transition to a new representation. This augmentation
doesn't require changing the algorithm or code for the data structure, only
replacing its datatype for mutable references with a freezable variant. In this
paper, we present an algorithm for lifting plain to adaptive data and prove
that the resulting hybrid data structure is itself lock-free, linearizable, and
simulates the original. We also perform an empirical case study in the context
of heating up and cooling down concurrent maps.Comment: To be published in ACM SIGPLAN Haskell Symposium 201
Software trace cache
We explore the use of compiler optimizations, which optimize the layout of instructions in memory. The target is to enable the code to make better use of the underlying hardware resources regardless of the specific details of the processor/architecture in order to increase fetch performance. The Software Trace Cache (STC) is a code layout algorithm with a broader target than previous layout optimizations. We target not only an improvement in the instruction cache hit rate, but also an increase in the effective fetch width of the fetch engine. The STC algorithm organizes basic blocks into chains trying to make sequentially executed basic blocks reside in consecutive memory positions, then maps the basic block chains in memory to minimize conflict misses in the important sections of the program. We evaluate and analyze in detail the impact of the STC, and code layout optimizations in general, on the three main aspects of fetch performance; the instruction cache hit rate, the effective fetch width, and the branch prediction accuracy. Our results show that layout optimized, codes have some special characteristics that make them more amenable for high-performance instruction fetch. They have a very high rate of not-taken branches and execute long chains of sequential instructions; also, they make very effective use of instruction cache lines, mapping only useful instructions which will execute close in time, increasing both spatial and temporal locality.Peer ReviewedPostprint (published version
GALENA: tabular DCG parsing for natural languages
[Abstract] We present a definite clause based parsing environment for natural languages, whose operational model is the dynamic interpretation of logical push-down automata. We attempt to briefly explain our design decisions in terms of a set of properties that practical natural language processing systems should incorporate. The aim is to show both the advantages and the drawbacks of our approach.España. Gobierno; HF96-36Xunta de Galcia; XUGA10505B96Xunta de Galcia; XUGA20402B9
가상머신의 메모리 관리 최적화
학위논문 (박사)-- 서울대학교 대학원 : 전기·컴퓨터공학부, 2014. 2. 문수묵.Memory management is one of key components in virtual machine and also affects overall performance of virtual machine itself. Modern programming languages for virtual machine use dynamic memory allocation and objects are allocated dynamically to heap at a higher rate, such as Java. These allocated objects are reclaimed later when objects are not used anymore to secure free room in the heap for future objects allocation. Many virtual machines adopt garbage collection technique to reclaim dead objects in the heap. The heap can be also expanded itself to allocate more objects instead. Therefore overall performance of memory management is determined by object allocation technique, garbage collection and heap management technique. In this paper, three optimizing techniques are proposed to improve overall performance of memory management in virtual machine. First, a lazy-worst-fit object allocator is suggested to allocate small objects with little overhead in virtual machine which has a garbage collector. Then a biased allocator is proposed to improve the performance of garbage collector itself by reducing extra overhead of garbage collector. Finally an ahead-of-time heap expansion technique is suggested to improve user responsiveness as well as overall performance of memory management by suppressing invocation of garbage collection. Proposed optimizations are evaluated in various devices including desktop, embedded and mobile, with different virtual machines including Java virtual machine for Java runtime and Dalvik virtual machine for Android platform. A lazy-worst-fit allocator outperform other allocators including first-fit and lazy-worst-fit allocator and shows good fragmentation as low as rst-t allocator which is known to have the lowest fragmentation. A biased allocator reduces 4.1% of pause time caused by garbage collections in average. Ahead-of-time heap expansion reduces both number of garbage collections and total pause time of garbage collections. Pause time of GC reduced up to 31% in default applications of Android platform.Abstract i
Contents iii
List of Figures vi
List of Tables viii
Chapter 1 Introduction 1
1.1 The need of optimizing memory management . . . . . . . . . . . 2
1.2 Outline of the Dissertation . . . . . . . . . . . . . . . . . . . . . . 3
Chapter 2 Backgrounds 4
2.1 Virtual Machine . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2 Memory management in virtual machine . . . . . . . . . . . . . . 5
Chapter 3 Lazy Worst Fit Allocator 7
3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.2 Allocation with fits . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.3 Lazy fits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.3.1 Lazy worst fit . . . . . . . . . . . . . . . . . . . . . . . . . 13
iii
3.4 Experimental results . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.4.1 LWF implementation in the LaTTe Java virtual machine 14
3.4.2 Experimental environment . . . . . . . . . . . . . . . . . . 16
3.4.3 Performance of LWF . . . . . . . . . . . . . . . . . . . . . 17
3.4.4 Fragmentation of LWF . . . . . . . . . . . . . . . . . . . . 20
3.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Chapter 4 Biased Allocator 24
4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.2 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.3 Biased allocator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.3.1 When to choose an allocator . . . . . . . . . . . . . . . . 28
4.3.2 How to choose an allocator . . . . . . . . . . . . . . . . . 30
4.4 Analyses and implementation . . . . . . . . . . . . . . . . . . . . 32
4.5 Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.5.1 Total pause time of garbage collections . . . . . . . . . . . 36
4.5.2 Eect of each analysis . . . . . . . . . . . . . . . . . . . . 38
4.5.3 Pause time of each garbage collection . . . . . . . . . . . 38
4.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Chapter 5 Ahead-of-time Heap Management 42
5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.2 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.3 Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.3.1 Garbage Collection . . . . . . . . . . . . . . . . . . . . . . 48
5.3.2 Heap expansion heuristic . . . . . . . . . . . . . . . . . . 49
5.4 Ahead-of-time heap expansion . . . . . . . . . . . . . . . . . . . . 51
5.4.1 Spatial heap expansion . . . . . . . . . . . . . . . . . . . . 53
iv
5.4.2 Temporal heap expansion . . . . . . . . . . . . . . . . . . 55
5.4.3 Launch-time heap expansion . . . . . . . . . . . . . . . . 56
5.5 Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.5.1 Spatial heap expansion . . . . . . . . . . . . . . . . . . . . 58
5.5.2 Comparision of spatial heap expansion . . . . . . . . . . . 61
5.5.3 Temporal heap expansion . . . . . . . . . . . . . . . . . . 70
5.5.4 Launch-time heap expansion . . . . . . . . . . . . . . . . 72
5.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Chapter 6 Conculsion 74
Bibliography 75
요약 84
Acknowledgements 86Docto
Analysis, Behavior, Strengthening and repairing of Reinforced Concrete Corbels: Comprehensive Review
In this review, an extensive survey on the theoretical models and approaches that were proposed in literature to study the behavior of RC corbels has been presented. Such approaches included the shear friction approach, strut and tie model, finite element and Neural networks. Moreover, the review has been extended to consider the studies conducted experimentally by researchers and scholars to investigate the response of the RC corbels. Furthermore, various proposals that were suggested regarding strengthening and repairing of RC corbels have been discussed. Different materials have been used to improve the performance of RC corbels, such as steel fibers, FRP composites, NSM steel bars, NSM CFRP bars and composite sections have been considered. The most important findings reported in the relevant literature have been summarized. In addition, several recommendations to extend the studies concerning the RC corbel to improve the knowledge about the behavior of this significant structural member have been presented
Ramasse-miettes générationnel et incémental gérant les cycles et les gros objets en utilisant des frames délimités
Ces dernières années, des recherches ont été menées sur plusieurs techniques reliées à la collection des déchets. Plusieurs découvertes centrales pour le ramassage de miettes par copie ont été réalisées. Cependant, des améliorations sont encore possibles. Dans ce mémoire, nous introduisons des nouvelles techniques et de nouveaux algorithmes pour améliorer le ramassage de miettes. En particulier, nous introduisons une technique utilisant des cadres délimités pour marquer et retracer les pointeurs racines. Cette technique permet un calcul efficace de l'ensemble des racines. Elle réutilise des concepts de deux techniques existantes, card marking et remembered sets, et utilise une configuration bidirectionelle des objets pour améliorer ces concepts en stabilisant le surplus de mémoire utilisée et en réduisant la charge de travail lors du parcours des pointeurs. Nous présentons aussi un algorithme pour marquer récursivement les objets rejoignables sans utiliser de pile (éliminant le gaspillage de mémoire habituel). Nous adaptons cet algorithme pour implémenter un ramasse-miettes copiant en profondeur et améliorer la localité du heap. Nous améliorons l'algorithme de collection des miettes older-first et sa version générationnelle en ajoutant une phase de marquage garantissant la collection de toutes les miettes, incluant les structures cycliques réparties sur plusieurs fenêtres. Finalement, nous introduisons une technique pour gérer les gros objets. Pour tester nos idées, nous avons conçu et implémenté, dans la machine virtuelle libre Java SableVM, un cadre de développement portable et extensible pour la collection des miettes. Dans ce cadre, nous avons implémenté des algorithmes de collection semi-space, older-first et generational. Nos expérimentations montrent que la technique du cadre délimité procure des performances compétitives pour plusieurs benchmarks. Elles montrent aussi que, pour la plupart des benchmarks, notre algorithme de parcours en profondeur améliore la localité et augmente ainsi la performance. Nos mesures de la performance générale montrent que, utilisant nos techniques, un ramasse-miettes peut délivrer une performance compétitive et surpasser celle des ramasses-miettes existants pour plusieurs benchmarks. ______________________________________________________________________________ MOTS-CLÉS DE L’AUTEUR : Ramasse-Miettes, Machine Virtuelle, Java, SableVM
Analysis, Behavior, Strengthening and repairing of Reinforced Concrete Corbels: Comprehensive Review
In this review, an extensive survey on the theoretical models and approaches that were proposed in literature to study the behavior of RC corbels has been presented. Such approaches included the shear friction approach, strut and tie model, finite element and Neural networks. Moreover, the review has been extended to consider the studies conducted experimentally by researchers and scholars to investigate the response of the RC corbels. Furthermore, various proposals that were suggested regarding strengthening and repairing of RC corbels have been discussed. Different materials have been used to improve the performance of RC corbels, such as steel fibers, FRP composites, NSM steel bars, NSM CFRP bars and composite sections have been considered. The most important findings reported in the relevant literature have been summarized. In addition, several recommendations to extend the studies concerning the RC corbel to improve the knowledge about the behavior of this significant structural member have been presented
Garbage Collection of Linked Data Structures: An Example in a Network Oriented Database Management System
A unified view of the numerous existing algorithms for performing garbage collection of linked data structure has been presented. An implementation of a garbage collection tool in a network oriented database management system has been described
- …