> > > - What is the main reason that you started using Julia? > > To more quickly develop code for HPCs. I do stochastic numerical methods in developmental biology. When I am making methods, I want to show that it works, get a relatively fast prototype, and move on (I'll let "library builders" build C libraries from this, too much time for me). When I am using the method to study biology, I just want it to work, get a result, and move on. Other languages required that I use C/Fortran to do this (I need the codes fast). Julia lets me do it fast and all in one language.
Another big plus is that I love its type system. It allows for "data-oriented" programming which works really well for big data, and is fast. Objects in R/Python tend to be slow, and basically non-existent in MATLAB and so it's nice to be able to use data structures in the intuitive CS way. Also its package system via Github is really easy to use and since you know the code is all Julia code you can change packages around to fit your needs. I can keep going if you want lol. > > - Have you used Julia’s parallel computing aspects? > > All the time. I documented some of it. Here's a tutorial I wrote for using Julia on XSEDE's Comet. http://www.stochasticlifestyle.com/multi-node-parallelism-in-julia-on-an-hpc/ . I have used it on UC Irvine's cluster and some other XSEDE computers as well. I have also used Julia with a Xeon Phi (on my blog) and also with GPUs (also on my blog). Its super easy to get it working. > > - What did you use for parallel programming before using Julia and how > do they compare? What made you switch? If applicable. > > MATLAB has licensing problems everywhere you go: you want to use it on an HPC, but you have to jump through hoops to do so. The end result isn't even good because the language is so slow that you're basically throwing computers at a slow code to hope it's fast enough. Python annoyed me with Global Interpreter Lock and having generally slow language features as well. In order to use it "correctly" for big data projects you have to use a bunch of packages to do it all in C, and write your own C code to compensate for things it can't do (and when writing your own stochastic numerical code is all about loop performance, this means the code is basically C). R had the same problem (but I liked that the statistical packages covered everything). I also used C with OpenMP and MPI but development times were slow... Julia did all of that together and I haven't wanted to go back since. > > - Would you say Julia’s approach to parallel computing is special or > unique in any way? Could you elaborate? > > To me it feels and operates like it's "OpenMP with MPI capabilities". Honestly I tend to setup my code to just @parallel or pmap and let the backend take care of it all. But doing that allows it to use multiple nodes on an HPC, so literally adding @parallel makes a program completely parallel in some of my cases (like Monte Carlo simulations). I don't think it really teaches one the "how" of the parallel/HPC computing like learning MPI does, but it gets the job done soooo much faster. > > - Lastly do you believe Julia is a suitable language to teach students > about parallel programming? Could you elaborate? > > I am on the fence for pedagogy via Julia. There are lots of in depth things about Julia. There's the LLVM, macros (generated functions), package system (understanding it's full use means you have to learn Git/Github, and in Julia's state that's pretty necessary since you need to change branches for many packages), type system (if someone's never done Object-oriented programming before, i find it confuses them but is really present and not hidden in the documentation), multiple dispatch, etc. For experienced programming, all of this stuff is right there to pick up and is easy to use. For beginners you have to tell them to ignore a lot of features when they want to learn how to loop (1:5 isn't an array, but it's like an array, and will index the loop just fine, trust me!). So honestly, there are easier languages like MATLAB for teaching at a beginner level, but with Julia you can go really deep. Hope this post helps. My blog has a bunch of tutorials for doing HPC/parallel things in Julia. I may post some slides I'll be using to teach a Julia workshop as well.
