Project Panama Status Update

Total Page:16

File Type:pdf, Size:1020Kb

Project Panama Status Update Project Panama Status Update Vladimir Ivanov JVM Compiler team, JPG Oracle JVM Compiler team Offsite, January, 22, 2017 Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Safe Harbor Statement The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 2 Project Panama: What’s in there? http://hg.openjdk.java.net/panama/dev $ hg branches vectorIntrinsics 47814:8eafa3e1dd22 vectorSnippets 47748:8f8232cadaff nicl 47744:8499209102d4 linkToNative 47740:8b90565dcbfe array2 47726:1fd0974b1d4b … Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 3 Project Panama: What’s in there? http://hg.openjdk.java.net/panama/dev $ hg branches vectorIntrinsics 47814:8eafa3e1dd22 Vector API vectorSnippets 47748:8f8232cadaff nicl 47744:8499209102d4 JNI 2.0 linkToNative 47740:8b90565dcbfe array2 47726:1fd0974b1d4b Arrays 2.0 … Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 4 Project Panama: Recent Activity http://hg.openjdk.java.net/panama/dev $ hg branches vectorIntrinsics 47814:8eafa3e1dd22 Vector API vectorSnippets 47748:8f8232cadaff nicl 47744:8499209102d4 JNI 2.0 linkToNative 47740:8b90565dcbfe array2 47726:1fd0974b1d4b Arrays 2.0 … Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 5 Better JNI “Codes like Java, works like native” $ hg branches vectorIntrinsics 47814:8eafa3e1dd22 Vector API vectorSnippets 47748:8f8232cadaff nicl 47744:8499209102d4 JNI 2.0 linkToNative 47740:8b90565dcbfe array2 47726:1fd0974b1d4b Arrays 2.0 Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 6 What’s in there? • nicl – jextract, libclang bindings (Henry, 2014-2016; Maurizio, Sundar, 2017-2018) – Universal adapter (Mikael, 2015-2016) – Binder, vectors, etc. (Mikael Vidstedt, 2015-2016) – MemoryRegion, Scope, Pointer (Henry, Mikael, 2016) • linkToNative – MethodHandle-based native invoker (Vladimir Ivanov, 2015) Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 7 JNI JNR NICL User-defined Interfaces produced User-defined Interfaces by jextract generated generated bindings on-the-fly bindings on-the-fly Java JNR Java j.l.i Native libffi Native JVM stubs Library Target Target Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 8 Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 9 jextract - Header file -> Java interface unistd.class package mypackage; unistd.h #ifndef _UNISTD_H @Header(path=”unistd.h”) #define _UNISTD_H public interface unistd { @C(file=”unistd.h”, line=3, column=1, USR=”c:@F@getpid”) pid_t getpid(void); @NativeType(ctype=”pid_t (void)”, size=1) @CallingConvention(1) #endif // _UNISTD_H public int getpid(); } Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 10 Example: getpid() // Load native library Library lib = NativeLibrary.load(“c”); // Weave a class for the unistd interface, // and return an instance unistd unistd = NativeLibrary.create(lib, unistd.class) // Call the system getpid() function int pid = unistd.getpid(); Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 11 Native Method Handles MethodType mt = MethodType.methodType(int.class); MethodHandle mh = NativeLookup.findNative(“getpid", mt); int pid = mh.invokeExact(); Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 12 Native Method Handles Java Native Construction Lookup.findVirtual() et al Lookup.findNative() Reference DirectMethodHandle NativeMethodHandle (typed) Reference MemberName NativeEntryPoint (direct) Linker MH.linkToVirtual() et al MH.linkToNative() Invocation indy, MH.invoke(), MH.invokeExact() “Making native calls from the JVM” by John Rose http://cr.openjdk.java.net/~jrose/panama/native-call-primitive.html Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 13 // int pid = mh.invokeExact(); @ 8 LambdaForm$MH::invokeExact_MT (29 bytes) force inline by annotation @ 11 Invokers::checkExactType (17 bytes) force inline by annotation @ 1 MethodHandle::type (5 bytes) accessor @ 15 Invokers::checkCustomized (23 bytes) force inline by annotation @ 1 MethodHandleImpl::isCompileConstant (2 bytes) (intrinsic) @ 25 LambdaForm$NMH::invokeNative_I (27 bytes) force inline by … @ 7 NativeMethodHandle::internalNativeEntryPoint (8 bytes) force inline … @ 23 MethodHandle::linkToNative(L)I (0 bytes) direct native call Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 14 Native Method Handles callq 0x1057b2eb0 ; native method entry getpid JNI 13.7 ± 0.5 ns Direct call 3.4 ± 0.2 ns Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 15 Calling Convention Java vs C hotspot/src/cpu/x86/vm/sharedRuntime_x86_64.cpp: “The Java calling convention is a "shifted" version of the C ABI. By skipping the first C ABI register we can call non-static jni methods with small numbers of arguments without having to shuffle the arguments at all. Since we control the java ABI we ought to at least get some advantage out of it.“ System V AMD64 ABI arg 1st 2nd 3rd 4th 5th 6th … C RDI RSI RDX RCX R8 R9 stack Java RSI RDX RCX R8 R9 RDI stack Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 16 “Universal Adapter” • jdk.internal.nicl.NativeInvoker – static native void invokeNative(long[] args, long[] rets, long[] recipe, long addr); – alternative to MH.linkToNative() • Very powerful mechanism – fully programmable calling conventions through “recipe” • Rich functionality support – varargs – struct-by-value argument + return – callbacks (function pointers) • Hard to optimize by JITs Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 17 Optimize checks void run() { nativeFunc1(); // checks & state trans. nativeFunc2(); // checks & state trans. nativeFunc3(); // checks & state trans. } Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 18 Java Heap Thread State Thread Java Native VM Native Memory Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 19 Optimize checks void run() { if (!performChecks()) jump failed; transJavaToNative(); call nativeFunc1(); call nativeFunc2(); call nativeFunc3(); transNativeToJava(); } Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 20 Java Heap Thread State Thread Java Native VM Native Memory Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 21 Better JNI Easier, Safer, Faster • Native access between the JVM and native APIs – Native code via FFIs – Native data via safely-wrapped access functions – Tooling for header file API extraction and API metadata storage • Wrapper interposition mechanisms, based on JVM interfaces – add (or delete) wrappers for specialized safety invariants • Basic bindings for selected native APIs Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 22 Contributors • John Rose • Henry Jen • Mikael Vidstedt • Maurizio Cimadamore • Sundararajan Athijegannathan • Tobi Ajila (IBM) Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 23 Vector API $ hg branches vectorIntrinsics 47814:8eafa3e1dd22 Vector API vectorSnippets 47748:8f8232cadaff nicl 47744:8499209102d4 JNI 2.0 linkToNative 47740:8b90565dcbfe array2 47726:1fd0974b1d4b Arrays 2.0 Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 24 Motivation Expose data-parallel operations through a cross-platform API Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 25 Motivation Int8Vector x = ..., y = ...; // packed vectors of 8 ints Int8Vector z = x.add(y); // element-wise addition vpaddd %ymm1,%ymm0,%ymm0 Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 26 Goals 1. Maximally expressive and portable API – “principle of least astonishment” – uniform coverage operations and data types – type-safe 2. Performant – predictable performance – high quality of generated code – competitive with existing facilities for auto-vectorization 3. Graceful performance degradation – fallback for "holes" in native architectures Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 27 Draft API (by John Rose, c. 2015) interface Vector<E,S extends Shape<Vector<?,S>>> { Vector<E,S> add(Vector<E,S> v2); } Vector<Integer,S256Bit> x = ..., y = ...; // vectors of 8 ints Vector<Integer,S256Bit> z = x.add(y); // element-wise addition vpaddd %ymm1,%ymm0,%ymm0 Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 28 Implementation Challenges 1. How to represent vector operations on JVM level? 2. Optimize away vector boxes – required for mapping Vector instances to vector registers in generated code – Vector<Integer,S256Bits> => ymm regs on x86/AVX 3. Primitive specialization – Vector<Integer,S256Bits> vs Vector<int,S256Bits> 4. Vectorize higher-order operations – Vector<E,S> map(UnaryOperator<E> op); – “You can fit a universe in a lambda” Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 29 Vector API: Ultimate Goal Vector<int,?>.map(arr, i -> i + 1) (with value types, generic specialization, and crackable lambdas) Copyright © 2017, Oracle and/or its affiliates.
Recommended publications
  • Incrementalized Pointer and Escape Analysis Frédéric Vivien, Martin Rinard
    Incrementalized Pointer and Escape Analysis Frédéric Vivien, Martin Rinard To cite this version: Frédéric Vivien, Martin Rinard. Incrementalized Pointer and Escape Analysis. PLDI ’01 Proceedings of the ACM SIGPLAN 2001 conference on Programming language design and implementation, Jun 2001, Snowbird, United States. pp.35–46, 10.1145/381694.378804. hal-00808284 HAL Id: hal-00808284 https://hal.inria.fr/hal-00808284 Submitted on 14 Oct 2018 HAL is a multi-disciplinary open access L’archive ouverte pluridisciplinaire HAL, est archive for the deposit and dissemination of sci- destinée au dépôt et à la diffusion de documents entific research documents, whether they are pub- scientifiques de niveau recherche, publiés ou non, lished or not. The documents may come from émanant des établissements d’enseignement et de teaching and research institutions in France or recherche français ou étrangers, des laboratoires abroad, or from public or private research centers. publics ou privés. Incrementalized Pointer and Escape Analysis∗ Fred´ eric´ Vivien Martin Rinard ICPS/LSIIT Laboratory for Computer Science Universite´ Louis Pasteur Massachusetts Institute of Technology Strasbourg, France Cambridge, MA 02139 [email protected]­strasbg.fr [email protected] ABSTRACT to those parts of the program that offer the most attrac- We present a new pointer and escape analysis. Instead of tive return (in terms of optimization opportunities) on the analyzing the whole program, the algorithm incrementally invested resources. Our experimental results indicate that analyzes only those parts of the program that may deliver this approach usually delivers almost all of the benefit of the useful results. An analysis policy monitors the analysis re- whole-program analysis, but at a fraction of the cost.
    [Show full text]
  • Generalized Escape Analysis and Lightweight Continuations
    Generalized Escape Analysis and Lightweight Continuations Abstract Might and Shivers have published two distinct analyses for rea- ∆CFA and ΓCFA are two analysis techniques for higher-order soning about programs written in higher-order languages that pro- functional languages (Might and Shivers 2006b,a). The former uses vide first-class continuations, ∆CFA and ΓCFA (Might and Shivers an enrichment of Harrison’s procedure strings (Harrison 1989) to 2006a,b). ∆CFA is an abstract interpretation based on a variation reason about control-, environment- and data-flow in a program of procedure strings as developed by Sharir and Pnueli (Sharir and represented in CPS form; the latter tracks the degree of approxi- Pnueli 1981), and, most proximately, Harrison (Harrison 1989). mation inflicted by a flow analysis on environment structure, per- Might and Shivers have applied ∆CFA to problems that require mitting the analysis to exploit extra precision implicit in the flow reasoning about the environment structure relating two code points lattice, which improves not only the precision of the analysis, but in a program. ΓCFA is a general tool for “sharpening” the precision often its run-time as well. of an abstract interpretation by tracking the amount of abstraction In this paper, we integrate these two mechanisms, showing how the analysis has introduced for the specific abstract interpretation ΓCFA’s abstract counting and collection yields extra precision in being performed. This permits the analysis to opportunistically ex- ∆CFA’s frame-string model, exploiting the group-theoretic struc- ploit cases where the abstraction has introduced no true approxi- ture of frame strings. mation.
    [Show full text]
  • Escape from Escape Analysis of Golang
    Escape from Escape Analysis of Golang Cong Wang Mingrui Zhang Yu Jiang∗ KLISS, BNRist, School of Software, KLISS, BNRist, School of Software, KLISS, BNRist, School of Software, Tsinghua University Tsinghua University Tsinghua University Beijing, China Beijing, China Beijing, China Huafeng Zhang Zhenchang Xing Ming Gu Compiler and Programming College of Engineering and Computer KLISS, BNRist, School of Software, Language Lab, Huawei Technologies Science, ANU Tsinghua University Hangzhou, China Canberra, Australia Beijing, China ABSTRACT KEYWORDS Escape analysis is widely used to determine the scope of variables, escape analysis, memory optimization, code generation, go pro- and is an effective way to optimize memory usage. However, the gramming language escape analysis algorithm can hardly reach 100% accurate, mistakes ACM Reference Format: of which can lead to a waste of heap memory. It is challenging to Cong Wang, Mingrui Zhang, Yu Jiang, Huafeng Zhang, Zhenchang Xing, ensure the correctness of programs for memory optimization. and Ming Gu. 2020. Escape from Escape Analysis of Golang. In Software In this paper, we propose an escape analysis optimization ap- Engineering in Practice (ICSE-SEIP ’20), May 23–29, 2020, Seoul, Republic of proach for Go programming language (Golang), aiming to save Korea. ACM, New York, NY, USA, 10 pages. https://doi.org/10.1145/3377813. heap memory usage of programs. First, we compile the source code 3381368 to capture information of escaped variables. Then, we change the code so that some of these variables can bypass Golang’s escape 1 INTRODUCTION analysis mechanism, thereby saving heap memory usage and reduc- Memory management is very important for software engineering.
    [Show full text]
  • Escape Analysis for Java
    Escape Analysis for Java Jong-Deok Choi Manish Gupta Mauricio Serrano Vugranam C. Sreedhar Sam Midkiff IBM T. J. Watson Research Center P. O. Box 218, Yorktown Heights, NY 10598 jdchoi, mgupta, mserrano, vugranam, smidkiff ¡ @us.ibm.com ¢¤£¦¥¨§ © ¦ § § © § This paper presents a simple and efficient data flow algorithm Java continues to gain importance as a language for general- for escape analysis of objects in Java programs to determine purpose computing and for server applications. Performance (i) if an object can be allocated on the stack; (ii) if an object is an important issue in these application environments. In is accessed only by a single thread during its lifetime, so that Java, each object is allocated on the heap and can be deallo- synchronization operations on that object can be removed. We cated only by garbage collection. Each object has a lock asso- introduce a new program abstraction for escape analysis, the ciated with it, which is used to ensure mutual exclusion when connection graph, that is used to establish reachability rela- a synchronized method or statement is invoked on the object. tionships between objects and object references. We show that Both heap allocation and synchronization on locks incur per- the connection graph can be summarized for each method such formance overhead. In this paper, we present escape analy- that the same summary information may be used effectively in sis in the context of Java for determining whether an object (1) different calling contexts. We present an interprocedural al- may escape the method (i.e., is not local to the method) that gorithm that uses the above property to efficiently compute created the object, and (2) may escape the thread that created the connection graph and identify the non-escaping objects for the object (i.e., other threads may access the object).
    [Show full text]
  • Making Collection Operations Optimal with Aggressive JIT Compilation
    Making Collection Operations Optimal with Aggressive JIT Compilation Aleksandar Prokopec David Leopoldseder Oracle Labs Johannes Kepler University, Linz Switzerland Austria [email protected] [email protected] Gilles Duboscq Thomas Würthinger Oracle Labs Oracle Labs Switzerland Switzerland [email protected] [email protected] Abstract 1 Introduction Functional collection combinators are a neat and widely ac- Compilers for most high-level languages, such as Scala, trans- cepted data processing abstraction. However, their generic form the source program into an intermediate representa- nature results in high abstraction overheads – Scala collec- tion. This intermediate program representation is executed tions are known to be notoriously slow for typical tasks. We by the runtime system. Typically, the runtime contains a show that proper optimizations in a JIT compiler can widely just-in-time (JIT) compiler, which compiles the intermediate eliminate overheads imposed by these abstractions. Using representation into machine code. Although JIT compilers the open-source Graal JIT compiler, we achieve speedups of focus on optimizations, there are generally no guarantees up to 20× on collection workloads compared to the standard about the program patterns that result in fast machine code HotSpot C2 compiler. Consequently, a sufficiently aggressive – most optimizations emerge organically, as a response to JIT compiler allows the language compiler, such as Scalac, a particular programming paradigm in the high-level lan- to focus on other concerns. guage. Scala’s functional-style collection combinators are a In this paper, we show how optimizations, such as inlin- paradigm that the JVM runtime was unprepared for. ing, polymorphic inlining, and partial escape analysis, are Historically, Scala collections [Odersky and Moors 2009; combined in Graal to produce collections code that is optimal Prokopec et al.
    [Show full text]
  • Escape Analysis on Lists∗
    Escape Analysis on Lists∗ Young Gil Parkyand Benjamin Goldberg Department of Computer Science Courant Institute of Mathematical Sciences New York Universityz Abstract overhead, and other optimizations that are possible when the lifetimes of objects can be computed stati- Higher order functional programs constantly allocate cally. objects dynamically. These objects are typically cons Our approach is to define a high-level non-standard cells, closures, and records and are generally allocated semantics that, in many ways, is similar to the stan- in the heap and reclaimed later by some garbage col- dard semantics and captures the escape behavior caused lection process. This paper describes a compile time by the constructs in a functional language. The ad- analysis, called escape analysis, for determining the vantage of our analysis lies in its conceptual simplicity lifetime of dynamically created objects in higher or- and portability (i.e. no assumption is made about an der functional programs, and describes optimizations underlying abstract machine). that can be performed, based on the analysis, to im- prove storage allocation and reclamation of such ob- jects. In particular, our analysis can be applied to 1 Introduction programs manipulating lists, in which case optimiza- tions can be performed to allow whole cons cells in Higher order functional programs constantly allocate spines of lists to be either reclaimed at once or reused objects dynamically. These objects are typically cons without incurring any garbage collection overhead. In cells, closures, and records and are generally allocated a previous paper on escape analysis [10], we had left in the heap and reclaimed later by some garbage col- open the problem of performing escape analysis on lection process.
    [Show full text]
  • Partial Escape Analysis and Scalar Replacement for Java
    Partial Escape Analysis and Scalar Replacement for Java Lukas Stadler Thomas Würthinger Hanspeter Mössenböck Johannes Kepler University Oracle Labs Johannes Kepler University Linz, Austria thomas.wuerthinger Linz, Austria [email protected] @oracle.com [email protected] ABSTRACT 1. INTRODUCTION Escape Analysis allows a compiler to determine whether an State-of-the-art Virtual Machines employ techniques such object is accessible outside the allocating method or thread. as advanced garbage collection, alias analysis and biased This information is used to perform optimizations such as locking to make working with dynamically allocated objects Scalar Replacement, Stack Allocation and Lock Elision, al- as efficient as possible. But even if allocation is cheap, it lowing modern dynamic compilers to remove some of the still incurs some overhead. Even if alias analysis can remove abstractions introduced by advanced programming models. most object accesses, some of them cannot be removed. And The all-or-nothing approach taken by most Escape Anal- although acquiring a biased lock is simple, it is still more ysis algorithms prevents all these optimizations as soon as complex than not acquiring a lock at all. there is one branch where the object escapes, no matter how Escape Analysis can be used to determine whether an ob- unlikely this branch is at runtime. ject needs to be allocated at all, and whether its lock can This paper presents a new, practical algorithm that per- ever be contended. This can help the compiler to get rid of forms control flow sensitive Partial Escape Analysis in a dy- the object's allocation, using Scalar Replacement to replace namic Java compiler.
    [Show full text]
  • Compiling Haskell by Program Transformation
    Compiling Haskell by program transformation a rep ort from the trenches Simon L Peyton Jones Department of Computing Science University of Glasgow G QQ Email simonpjdcsglaacuk WWW httpwwwdcsglaacuksimonpj January Abstract Many compilers do some of their work by means of correctnesspre se rving and hop e fully p erformanceimproving program transformations The Glasgow Haskell Compiler GHC takes this idea of compilation by transformation as its warcry trying to express as much as p ossible of the compilation pro cess in the form of program transformations This pap er rep orts on our practical exp erience of the transformational approach to compilation in the context of a substantial compiler The paper appears in the Proceedings of the European Symposium on Programming Linkoping April Introduction Using correctnesspreserving transformations as a compiler optimisation is a wellestablished technique Aho Sethi Ullman Bacon Graham Sharp In the functional programming area esp ecially the idea of compilation by transformation has received quite a bit of attention App el Fradet Metayer Kelsey Kelsey Hudak Kranz Steele A transformational approach to compiler construction is attractive for two reasons Each transformation can b e implemented veried and tested separately This leads to a more mo dular compiler design in contrast to compilers that consist of a few huge passes each of which accomplishes a great deal In any framework transformational or otherwise each optimisation often exp oses new opp ortunities for other optimisations
    [Show full text]
  • Current State of EA and Its Uses in The
    Jfokus 2020 Current state of EA and Charlie Gracie Java Engineering Group at Microsoft its uses in the JVM Overview • Escape Analysis and Consuming Optimizations • Current State of Escape Analysis in JVM JITs • Escape Analysis and Allocation Elimination in Practice • Stack allocation 2 Escape Analysis and Consuming Optimizations 3 What is Escape Analysis? • Escape Analysis is a method for determining the dynamic scope of objects -- where in the program an object can be accessed. • Escape Analysis determines all the places where an object can be stored and whether the lifetime of the object can be proven to be restricted only to the current method and/or thread. 4 https://en.wikipedia.org/wiki/Escape_analysis Partial Escape Analysis • A variant of Escape Analysis which tracks object lifetime along different control flow paths of a method. • An object can be marked as not escaping along one path even though it escapes along a different path. 5 https://en.wikipedia.org/wiki/Escape_analysis EA Consuming Optimizations 1. Monitor elision • If an object does not escape the current method or thread, then operations can be performed on this object without synchronization 2. Stack allocation • If an object does not escape the current method, it may be allocated in stack memory instead of heap memory 3. Scalar replacement • Improvement to (2) by breaking an object up into its scalar parts which are just stored as locals 6 Current State of Escape Analysis in JVM JITs 7 HotSpot C2 EA and optimizations • Flow-insensitive1 implementation based on the
    [Show full text]
  • Evaluating the Impact of Thread Escape Analysis on a Memory Consistency Model-Aware Compiler
    Evaluating the Impact of Thread Escape Analysis on a Memory Consistency Model-aware Compiler Chi-Leung Wong1 Zehra Sura2 Xing Fang3 Kyungwoo Lee3 Samuel P. Midki®3 Jaejin Lee4 David Padua1 Dept. of Computer Science, University of Illinois at Urbana-Champaign, USA fcwong1,[email protected] IBM Thomas J. Watson Research Center, Yorktown Heights, NY, USA [email protected] Purdue University, West Lafayette, IN, USA fxfang,kwlee,[email protected] Seoul National University, Seoul, Korea [email protected] Abstract. The widespread popularity of languages allowing explicitly parallel, multi-threaded programming, e.g. Java and C#, have focused attention on the issue of memory model design. The Pensieve Project is building a compiler that will enable both language designers to pro- totype di®erent memory models, and optimizing compilers to adapt to di®erent memory models. Among the key analyses required to implement this system are thread escape analysis, i.e. detecting when a referenced object is accessible by more than one thread, delay set analysis, and synchronization analysis. In this paper, we evaluate the impact of di®erent escape analysis algo- rithms on the e®ectiveness of the Pensieve system when both delay set analysis and synchronization analysis are used. Since both analyses make use of results of escape analyses, their precison and cost is dependent on the precision of the escape analysis algorithm. It is the goal of this paper to provide a quantitative evalution of this impact. 1 Introduction In shared memory parallel programs, di®erent threads of the program commu- nicate with each other by reading from and writing to shared memory locations.
    [Show full text]
  • Hotspot VM Graal VM
    Polyglot on the JVM with Graal Thomas Wuerthinger Senior Research Director, Oracle Labs @thomaswue Java User Group Zurich, 15 of December 2016 Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | Safe Harbor Statement The following is intended to provide some insight into a line of research in Oracle Labs. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described in connection with any Oracle product or service remains at the sole discretion of Oracle. Any views expressed in this presentation are my own and do not necessarily reflect the views of Oracle. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 3 One language to rule them all? Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | One Language to Rule Them All? Let’s ask Stack Overflow… Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | The World Is Polyglot better is Lower 3 Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 6 Graal Overview A new compiler for HotSpot written in Java and with a focus on speculative optimiZations. JVMCI and Graal includedin JDK9, modified version of JDK8 available via OTN. HotSpot VM Graal VM Client Server Client Graal Compiler Compiler Interface JVMCI Java Interface HotSpot HotSpot C++ Copyright © 2016, Oracle
    [Show full text]
  • Pointer Analysis for Source-To-Source Transformations
    Pointer Analysis for Source-to-Source Transformations Marcio Buss∗ Stephen A. Edwards† Bin Yao Daniel Waddington Department of Computer Science Network Platforms Research Group Columbia University Bell Laboratories, Lucent Technologies New York, NY 10027 Holmdel, NJ 07733 {marcio,sedwards}@cs.columbia.edu {byao,dwaddington}@lucent.com Abstract p=&x; p=&y; q=&z; p=q; x=&a; y=&b; z=&c; We present a pointer analysis algorithm designed for Andersen [1] Steensgaard [15] Das [5] Heintze [8] source-to-source transformations. Existing techniques for p q p q p q p q pointer analysis apply a collection of inference rules to a dismantled intermediate form of the source program, mak- x y z x,y,z x,y z x y z ing them difficult to apply to source-to-source tools that generally work on abstract syntax trees to preserve details a b c a,b,c a,b,c a b c of the source program. Our pointer analysis algorithm operates directly on the Figure 1. Results of various flow-insensitive abstract syntax tree of a C program and uses a form of stan- pointer analysis algorithms. dard dataflow analysis to compute the desired points-to in- formation. We have implemented our algorithm in a source- to-source translation framework and experimental results dismantling the program into increasingly lower-level rep- show that it is practical on real-world examples. resentations that deliberately discard most of the original structure of the source code to simplify its analysis. 1 Introduction By contrast, source-to-source techniques strive to pre- serve everything about the structure of the original source The role of pointer analysis in understanding C programs so that only minimal, necessary changes are made.
    [Show full text]