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:

  • AsmDB - Instructions database and utilities for X86 (X86/X64) and ARM (THUMB/A32/A64) architectures released into the public domain. Although not written in C++ (it's JSON data and JS tooling around it) I use it to generate highly compressed database of all instructions accessible through AsmJit API.
  • 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.
  • 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.

Other Links