81,758 research outputs found

    Fast and Lean Immutable Multi-Maps on the JVM based on Heterogeneous Hash-Array Mapped Tries

    Get PDF
    An immutable multi-map is a many-to-many thread-friendly map data structure with expected fast insert and lookup operations. This data structure is used for applications processing graphs or many-to-many relations as applied in static analysis of object-oriented systems. When processing such big data sets the memory overhead of the data structure encoding itself is a memory usage bottleneck. Motivated by reuse and type-safety, libraries for Java, Scala and Clojure typically implement immutable multi-maps by nesting sets as the values with the keys of a trie map. Like this, based on our measurements the expected byte overhead for a sparse multi-map per stored entry adds up to around 65B, which renders it unfeasible to compute with effectively on the JVM. In this paper we propose a general framework for Hash-Array Mapped Tries on the JVM which can store type-heterogeneous keys and values: a Heterogeneous Hash-Array Mapped Trie (HHAMT). Among other applications, this allows for a highly efficient multi-map encoding by (a) not reserving space for empty value sets and (b) inlining the values of singleton sets while maintaining a (c) type-safe API. We detail the necessary encoding and optimizations to mitigate the overhead of storing and retrieving heterogeneous data in a hash-trie. Furthermore, we evaluate HHAMT specifically for the application to multi-maps, comparing them to state-of-the-art encodings of multi-maps in Java, Scala and Clojure. We isolate key differences using microbenchmarks and validate the resulting conclusions on a real world case in static analysis. The new encoding brings the per key-value storage overhead down to 30B: a 2x improvement. With additional inlining of primitive values it reaches a 4x improvement

    User producer interaction in context: a classification

    Get PDF
    Science, Technology and Innovation Studies show that intensified user producer interaction (UPI) increases chances for successful innovations, especially in the case of emerging technology. It is not always clear, however, what type of interaction is necessary in a particular context. This paper proposes a conceptualization of contexts in terms of three dimensions – the phase of technology development, the flexibility of the technology, and the heterogeneity of user populations – resulting in a classification scheme with eight different contextual situations. The paper identifies and classifies types of interaction, like demand articulation, interactive learning, learning by using and domestication. It appears that each contextual situation demands a different set of UPI types. To illustrate the potential value of the classification scheme, four examples of innovations with varying technological and user characteristics are explored: the refrigerator, clinical anaesthesia, video cassette recording, and the bicycle. For each example the relevant UPI types are discussed and it is shown how these types highlight certain activities and interactions during key events of innovation processes. Finally, some directions for further research are suggested alongside a number of comments on the utility of the classification

    User producer interaction in context: A classification

    Get PDF
    Science, Technology and Innovation Studies show that intensified user producer interaction (UPI) increases chances for successful innovations, especially in the case of emerging technology. It is not always clear, however, what type of interaction is necessary in a particular context. This paper proposes a conceptualization of contexts in terms of three dimensions – the phase of technology development, the flexibility of the technology, and the heterogeneity of user populations – resulting in a classification scheme with eight different contextual situations. The paper identifies and classifies types of interaction, like demand articulation, interactive learning, learning by using and domestication. It appears that each contextual situation demands a different set of UPI types. To illustrate the potential value of the classification scheme, four examples of innovations with varying technological and user characteristics are explored: the refrigerator, clinical anaesthesia, video cassette recording, and the bicycle. For each example the relevant UPI types are discussed and it is shown how these types highlight certain activities and interactions during key events of innovation processes. Finally, some directions for further research are suggested alongside a number of comments on the utility of the classification.Innovation, users, interaction, learning, typology of UPI

    Revisiting Actor Programming in C++

    Full text link
    The actor model of computation has gained significant popularity over the last decade. Its high level of abstraction makes it appealing for concurrent applications in parallel and distributed systems. However, designing a real-world actor framework that subsumes full scalability, strong reliability, and high resource efficiency requires many conceptual and algorithmic additives to the original model. In this paper, we report on designing and building CAF, the "C++ Actor Framework". CAF targets at providing a concurrent and distributed native environment for scaling up to very large, high-performance applications, and equally well down to small constrained systems. We present the key specifications and design concepts---in particular a message-transparent architecture, type-safe message interfaces, and pattern matching facilities---that make native actors a viable approach for many robust, elastic, and highly distributed developments. We demonstrate the feasibility of CAF in three scenarios: first for elastic, upscaling environments, second for including heterogeneous hardware like GPGPUs, and third for distributed runtime systems. Extensive performance evaluations indicate ideal runtime behaviour for up to 64 cores at very low memory footprint, or in the presence of GPUs. In these tests, CAF continuously outperforms the competing actor environments Erlang, Charm++, SalsaLite, Scala, ActorFoundry, and even the OpenMPI.Comment: 33 page
    • …
    corecore