Zero-Cost Abstractions in Julia: Indexing Vectors by Name with LabelledArrays


November 12 2018 in Uncategorized | Tags: | Author: Christopher Rackauckas

The ability to build robust array type abstractions without overhead is one of the most fantastic features of Julia. It can be surprising how much one can do with the idea of an array to end up with better code. In this blog post I want to show how you can utilize Julia's interface tools and @generated functions to build these kinds of zero-cost abstractions.

What is a zero-cost abstraction?

First let's define a zero-cost abstraction. A zero-abstraction is a coding tool that has a zero run time cost associated with using it. Essentially what it does is it transforms into the fastest possible code during compilation so that its use has no effect on the run time of your code.

Example: Diagonal Matrices

A quick example is simple type wrappers in Julia. An example of this from the standard library is the Diagonal ... READ MORE

The Nonlinear Effect of Code Speed on Productivity


October 29 2018 in Uncategorized | Tags: | Author: Christopher Rackauckas

I obsess over code performance, probably a little bit too much. But there's a big reason for wanting a code to run in less than an hour instead of slightly more than two hours. The reason is because a code's speed interacts with how we go about our day, and this speed can have a nonlinear effect on our productivity.

Here's a concrete example. When I was a PhD student, I had a project which was solving ensembles of stochastic partial differential equations which were a model of the zebrafish hindbrain. Each run of this ensemble took about two hours and ten minutes to perform. For a good chunk of time, I needed to keep running these ensembles in order to manually check the output to tweak the model until it started to look realistic. Tweaking the model took only a ... READ MORE

Some State of the Art Packages in Julia v1.0


August 27 2018 in Julia, Programming | Tags: | Author: Christopher Rackauckas

In this post I would like to explain some of the state of the art packages in Julia and how they are pushing forward their disciplines. I think the part I would really like to make clear is the ways which Julia gives these packages a competitive advantage and how these features are being utilized to reach their end goals. Maybe this will generate some more ideas!

What are the advantages for Julia in terms of package development?

Using Python/R to use other people's packages is perfectly fine since then your code will just be as fast as the package code if all your time is in package code calls (I purposely leave MATLAB off this list because its interoperability is much more difficult to use). There is one big exception where using an efficient package can still be slow even when ... READ MORE

PuMaS.jl: Pharmaceutical Modeling and Simulation Engine


August 13 2018 in Biology, Julia, Programming | Tags: | Author: Christopher Rackauckas

Here is an introduction to a pharmaceutical modeling project which I will be releasing in the near future. More details to come.

Solving Partial Differential Equations with Julia


Here is a talk from JuliaCon 2018 where I describe how to use the tooling across the Julia ecosystem to solve partial differential equations (PDEs), and how the different areas of the ecosystem are evolving to give top-notch PDE solver support.

Why Numba and Cython are not substitutes for Julia


August 6 2018 in Julia, Programming, Uncategorized | Tags: | Author: Christopher Rackauckas

Sometimes people ask: why does Julia need to be a new language? What about Julia is truly different from tools like Cython and Numba? The purpose of this blog post is to describe how Julia's design gives a very different package development experience than something like Cython, and how that can lead to many more optimizations. What I really want to show is:

  1. Julia's compilation setup is built for specialization of labor which is required for scientific progress
  2. Composition of Julia codes can utilize the compilation process to build new programs which are greater than the sum of the parts

I will also explain some of the engineering tradeoffs which were made to make this happen. There are many state-of-the-art scientific computing and data science packages in Julia and what I want to describe is how these are using the more "hardcore ... READ MORE

DifferentialEquations.jl's Confederated Modular API


I wrote a manuscript describing DifferentialEquations.jl's confederated modular API and its effect on the local scientific computing ecosystem. It's now on Arxiv until we can find the right venue for it.

Simulation and Control of Biological Stochasticity


Yesterday I defended my PhD thesis entitled "Simulation and Control of Biological Stochasticity". Here's the recording:

Intro to solving differential equations in Julia


March 5 2018 in Uncategorized | Tags: | Author: Christopher Rackauckas

I did a livestream tutorial for solving differential equations in Julia and thought I should archive this in my blog. I hope this is interesting.

Using Juno for Interactive Test-Driven Julia Package Development


February 19 2018 in Julia, Programming | Tags: | Author: Christopher Rackauckas

I found myself explaining my development workflow all of the time, so I thought I'd show it in a video. This is some of the stuff I do. You can do it other ways. I like this way.