Wed, 01/18/2017 – 5:30pm – 6:30pm
Introduction to the Julia language
Julia (http://julialang.org) is a high-level, high-performance dynamic programming language for numerical computing and data science. It provides a sophisticated just-in-time compiler, distributed parallel execution, numerical accuracy, and an extensive mathematical function library. Julia’s Base library, largely written in Julia itself, also integrates mature, best-of-breed open source C and Fortran libraries for linear algebra, random number generation, signal processing, and string processing, to name a few. In addition, the Julia developer community is contributing a number of external packages through Julia’s built-in package manager – there are over 1200 packages today (http://pkg.julialang.org). In this talk, the audience will get a feel for Julia, its syntax and language features, and why they are a good fit for data science and technical computing. We will discuss the motivation and history of creating a new programming language, and several applications where the combination of productivity, expressiveness, and performance make Julia a compelling choice even as it is being very actively developed and improved. We will go through some examples that illustrate how Julia is able to achieve performance comparable to statically compiled languages and productivity comparable to the dynamic languages most commonly used for technical computing.
Computational scientists often prototype software using productivity languages that offer high-level programming abstractions. When higher performance is needed, they are obliged to rewrite their code in a lower-level efficiency language. Different solutions have been proposed to address this tradeoff between productivity and efficiency. One promising approach is to create embedded domain-specific languages that sacrifice generality for productivity and performance, but practical experience with DSLs points to some road blocks preventing widespread adoption.
This talk will introduce ParallelAccelerator.jl, a library and compiler for high-level, high-performance scientific computing in Julia. It offers a non-invasive domain-specific language that makes as few visible changes to the host programming model as possible, and is aligned with existing Julia programming idioms. The compiler exposes the implicit parallelism in high-level array-style programs and compiles them to fast, parallel native code. Programs can also run in “library-only” mode, letting users benefit from the full Julia environment and libraries. Our results show encouraging performance improvements with very few changes to source code required. In particular, few to no additional type annotations are necessary.
Tony Kelman is a core contributor to the Julia programming language, and Software Engineer at Julia Computing Inc. He completed a PhD in Mechanical Engineering at Berkeley in 2015, conducting research on optimization-based control theory.
Lindsey Kuper (http://www.cs.indiana.edu/~lkuper, http://composition.al) is a Research Scientist in the Parallel Computing Lab at Intel Labs. She holds a Ph.D. in computer science from Indiana University and a BA in computer science and music from Grinnell College.