This is a personal site dedicated to my open-source activities and services that I offer as an independent software engineer. I'm focusing on writing and designing high performance code in C++ language that can take advantage of CPU specific optimizations, multithreading, and JIT compilation. My main goal is making software faster. I have started several projects in this area that are successful and that should demonstrate my experience and engineering skills.

Services

Please check out a Services page if you are interested in hiring me for either a short-term or long-term contract.

Open Source

I'm an open-source enthusiast and founder of the following open-source projects:

AsmJit

AsmJit is a lightweight library suitable for low-latency machine code generation written in C++. It can generate machine code for X86, X86_64, and AArch64 architectures. It has a type-safe API that allows C++ compiler to do semantic checks at compile-time even before the assembled code is generated or executed. It also provides an optional register allocator that makes it easy to start generating machine code without a significant development effort.

AsmJit has been used extensively in research and both open-source and commercial projects.

AsmJit in Research

AsmJit in Open Source

  • Blend2D - A high performance 2D vector graphics engine written in C++ (git)
  • Cinder - Instagram's performance oriented Python fork that uses AsmJit in its JIT backend
  • CULT - A tool that can be used to measure instruction latencies in user-space
  • Erlang OTP - Erlang OTP uses AsmJit in its BEAM JIT compiler (git, blog)
  • FBGEMM - Facebook's matrix multiplication library
  • GZDoom - Doom engine, which uses AsmJit for JIT compilation of ZScript code (git)
  • MathPresso - Mathematical expression parser and JIT compiler (example of using AsmJit)
  • QuestDB - Fast SQL for time series (git, blog)
  • X64dbg - An open-source x64/x32 debugger for Windows (git)
  • (this is not a complete list, there are many other projects using AsmJit)

Blend2D

Blend2D is a high performance 2D vector graphics engine written in C++ and released under the Zlib license. The engine utilizes a built-in JIT compiler to generate optimized pipelines at runtime and is capable of using multiple threads to boost the performance beyond the possibilities of single-threaded rendering. Additionally, the engine features a new rasterizer that has been written from scratch. It delivers superior performance while quality is comparable to rasterizers used by AGG and FreeType. The performance has been optimized by using an innovative approach to index data that is built during rasterization and scanned during composition. The rasterizer is robust and excels in rendering complex vector art and text.

Other Projects

Here is a list of smaller projects published on GitHub:

  • AsmTK - Assembler toolkit based on AsmJit. A sister project that provides more functionality usually not required by JIT compilers. It provides assembler parser compatible with Intel syntax. AsmTK focuses more on non-JIT use cases and its future goal is to provide a foundation for creating libraries and executables.
  • Build Actions - A tool designed to simplify running builds on continuous integration (CI) servers designed to minimize the dependency on vendor specific features. Things on CI change frequently so I wanted a shared place where I would fix things instead of maintaining this per project. There is a blog post about build-actions that describes how the tool is used with GitHub Actions.
  • CULT - a tool that runs series of tests to estimate how many cycles an X86 processor (either in 32-bit or 64-bit mode) takes to execute each supported instruction. The tool output is designed to be processed by additional tools.
  • MathPresso - A C++ library designed to parse mathematical expressions and compile them into machine code. It's much faster than traditional AST or byte-code based evaluators, because there is basically no overhead in the expression's execution. The JIT compiler is based on asmjit and works on X86 and X64 architectures.

Open-source projects I have worked on as part of my career:

Sneller

Sneller is SQL query engine written in Golang designed for querying unstructured data with SQL expressions. The execution engine (called VM in the source code) is written completely in x86_64 assembly with the use of AVX-512 extensions to make it possible to process gigabytes of data per second per core. The engine works with JSON, but JSON is converted to Amazon ION binary format and then compressed by Iguana, which is a new compression algorithm that was designed to take advantage of SIMD instructions (AVX2 and AVX-512) and was also developed by Sneller. The query engine supports advanced features such as joins, advanced filtering, regular expressions, math operations, and vector search.

Connect