The High Performance Scripting team at Intel Labs is pleased to announce 
the release of version 0.2 of ParallelAccelerator.jl, a package for 
high-performance parallel computing in Julia, primarily oriented around 
arrays and stencils.  In this release, we provide support for Julia 0.5 and 
introduce experimental support for the Julia native threading backend.  
While we still currently support Julia 0.4, such support should be 
considered deprecated and we recommend everyone move to Julia 0.5 as Julia 
0.4 support may be removed in the future.

The goal of ParallelAccelerator is to accelerate the computational kernel 
of an application by the programmer simply annotating the kernel function 
with the @acc (short for "accelerate") macro, provided by the 
ParallelAccelerator package.  In version 0.2, ParallelAccelerator still 
defaults to transforming the kernel to OpenMP C code that is then compiled 
with a system C compiler (ICC or GCC) and transparently handles the 
invocation of the C code from Julia as if the program were running normally.

However, ParallelAccelerator v0.2 also introduces experimental backend 
support for Julia's native threading (which is also experimental).  To 
enable native threading mode, set the environment variable 
PROSPECT_MODE=threads.  In this mode, ParallelAccelerator identifies pieces 
of code that can be run in parallel and then runs that code as if it had 
been annotated with Julia's @threads and goes through the standard Julia 
compiler pipeline with LLVM.  The ParallelAccelerator C backend has the 
limitation that the kernel functions and anything called by those cannot 
include code that is not type-stable to a single type.  In particular, 
variables of type Any are not supported.  In practice, this restriction was 
a significant limitation.  For the native threading backend, no such 
restriction is necessary and thus our backend should handle arbitrary Julia 
code.

Under the hood, ParallelAccelerator is essentially a domain-specific 
compiler written in Julia. It performs additional analysis and optimization 
on top of the Julia compiler. ParallelAccelerator discovers and exploits 
the implicit parallelism in source programs that use parallel programming 
patterns such as map, reduce, comprehension, and stencil. For example, 
Julia array operators such as .+, .-, .*, ./ are translated by 
ParallelAccelerator internally into data-parallel map operations over all 
elements of input arrays. For the most part, these patterns are already 
present in standard Julia, so programmers can use ParallelAccelerator to 
run the same Julia program without (significantly) modifying the source 
code.

Version 0.2 should be considered an alpha release, suitable for early 
adopters and Julia enthusiasts.  Please file bugs at 
https://travis-ci.org/IntelLabs/ParallelAccelerator.jl/issues .

See our GitHub repository at 
https://github.com/IntelLabs/ParallelAccelerator.jl for a complete list of 
prerequisites, supported platforms, example programs, and documentation.

Thanks to our colleagues at Intel and Intel Labs, the Julia team, and the 
broader Julia community for their support of our efforts!

Best regards,
The High Performance Scripting team
(Parallel Computing Lab, Intel Labs)

Reply via email to