Basically, this is the repo for holding materials of the JuliaCon 2024 short talk, SyslabCC: An AOT Compiler for Type-stable Julia Programs.
UPDATE: This proposal was accepted but failed at participating in the JuliaCon 2024 due to the developer's personal schedule issue.
You might also open issues about the use of SyslabCC.
# file: amazing-ad.jl
using Zygote
f(x) = cos(x^2 + 2x - 1) + sin(x^2 - 2x + 1)
function main(argv)
length(argv) != 1 && error("Usage: amazing-ad <number>")
x = parse(Float64, argv[1])
println("x = $x, f'(x) = $(f'(x))")
end
@isdefined(SyslabCC) || main(ARGS) # compat julia entrypoint
The above program compiles and runs with SyslabCC.
> time julia amazing-ad.jl 1.2
x = 1.2, f'(x) = -0.9073019030856714
real 0m1.905s
user 0m0.000s
sys 0m0.000s
> scc amazing-ad.jl -o amazing-ad --no-blas
[...]
> time ./amazing-ad.exe 1.2
x = 1.2, f'(x) = -0.9073019030856714
real 0m0.031s
user 0m0.000s
sys 0m0.000s
See amazing-ad.jl
and test-amazing-ad.sh
for details.
The generated binaries are standalone and do not require Julia to be installed on the target machine. Above example only links to libdl
, libm
, libpthread
, libc
and libbdwgc
on Linux.
libbdwgc
refers to the Boehm GC and is built from the source of your generated C++ project. SyslabCC always produces a C++ project, the default output location is $PWD/.syslab-cache/<project-name>
. The code should be portable, you may compile it on any platform with a proper C++ compiler.
This repo also holds killer features that SyslabCC provides.
You might check the following directories:
-
features/c-interops
: This example shows full C interoperability. It demonstrates how to call shared libraries and create C callbacks from Julia. -
features/compile-time
: This example trains models using Flux.jl & CUDA.jl at compile time, exporting an inference model to C++ code/shared libraries using SyslabCC. The exported C++ code/shared libraries run without requiring a Julia installation, and it is even possible to compile the source again for embedded systems (you may need to provide corresponding artifacts for target platforms). -
features/try-catch-finally
: This examples shows an extreme case of usingtry
-catch
-finally
constructs in both Julia and SyslabCC, evidencing that SyslabCC handles these constructs properly.
SyslabCC is designed to be fast. No latency, and as fast as the vanilla Julia code.
You might check the following directories:
benchmarks/nbody
benchmarks/binarytree
benchmarks/fasta
benchmarks/mandelbrot
benchmarks/nqueen
Each directory contains a bench.sh
which directly runs under Linux or Windows MinGW64 environments, provided you have SyslabCC installed. The benchmarks are derived from the The Computer Language Benchmarks Game. We have slightly modified them by adding entrypoint/main functions.
Although SyslabCC is currently a proprietary Julia AOT compiler, you might access it through the following approaches:
- Contact us to establish a commercial collaboration, if you need to use SyslabCC for commercial products. (Email: support@tongyuan.cc)
- Applying for a non-commercial license to obtain MWORKS.Syslab. SyslabCC is already bundled in the community edition.