From pixels to pipelines.
Real-time rendering, software rasterisation and GPU compute. I work across the CPU–GPU boundary, optimising frame time, memory traffic and synchronisation.
Explore rendering projectsI'm Jonathan Liu. I build rendering engines, GPU kernels and concurrent C++ infrastructure. My work centres on data locality, explicit synchronisation, resource lifetime and measuring the critical path.
Interested in graphics, GPU computing and low-latency C++ roles , including trading infrastructure.
Real-time rendering, software rasterisation and GPU compute. I work across the CPU–GPU boundary, optimising frame time, memory traffic and synchronisation.
Explore rendering projectsConcurrent queues, cache-aware CPU kernels and asynchronous network services. My work focuses on throughput, tail latency, memory efficiency and correctness in performance-critical C++ systems.
Explore systems projectsVulkan 1.3, SPIR-V, Compute Shaders, OpenGL, CUDA Kernel Optimisation, Real-time & Offline Rendering
C++17 (primary), C, Python, GLSL, Slang, CUDA C/C++, ARM Assembly
SIMDe / SSE / AVX2, oneTBB, OpenMP, std::atomic, CAS, Reference Counting, Warp Intrinsics, Boost.Asio
Nsight Systems/Compute/Graphics, RenderDoc, perf, ASan / TSan / UBSan, GDB/LLDB, Linux, Docker, CMake
A C++17 Vulkan 1.3 renderer with separate graphics, compute and transfer execution paths. I redesigned blocking resource uploads with explicit residency, asynchronous transfer submission and deferred reclamation, using Nsight Graphics to profile the critical path.
4.66ms
Worst-case frame time after upload-path redesign
RTX 3080 Ti Laptop GPU · Windows / MSVC Release · validation disabled during timing · historical same-scene worst-case frame-time comparison.
A C++17 CPU renderer with 32 × 32 triangle-to-tile binning, scalar and portable SIMDe raster paths, and a BVH-based Monte Carlo path tracer. Tile ownership keeps framebuffer writes local. SIMD accelerates depth interpolation and perspective-correct weights through shared coverage and shading logic.
Recorded 9 October 2026 · Apple M5 Pro · macOS arm64 · AppleClang 21 · Release. Serial task scheduling with TBB disabled; portable SIMDe execution on ARM.
Static Spot mesh · 5,856 input triangles · Phong shading · one point light · 100 warm-up frames per path per run. The 1024² percentiles combine three runs. Pixel coverage: 13.9% at 1024².
Timing scope:
draw(), including clear,
preparation, binning, depth, interpolation,
shading and in-draw allocations.
Loading, display, image encoding and file
output occur outside the timed region.
Metric: draw latency.
7.790ms
SIMDe path · 1024 × 1024 · Apple M5 Pro
Release · serial scheduling · portable ARM SIMD · vectorised depth and interpolation · shared coverage and fragment shading.
My C++17 performance-engineering library, formerly libHPC. CoreForge combines CPU memory-access optimisation, a CUDA radix-sort pipeline, sparse storage and concurrent-container implementations. Development integrates profiling, numerical validation and concurrency debugging across defined workloads.
| Workload | Baseline → optimised | Ratio |
|---|---|---|
| 1024² FP32 matrix | 97.93 → 11.58 ms | 8.46× |
| 8192² transpose | 63.28 → 19.58 ms | 3.23× |
| Horizontal 17-tap blur | 15.72 → 3.46 ms | 4.55× |
| Xyx vertical-blur family | 25.74 → 15.91 ms | 1.62× |
| 1024² / 16²-kernel convolution | 111.08 → 42.55 ms | 2.61× |
| 1 GiB loop fusion | 16.40 → 8.04 ms | 2.04× |
| 512 MiB container lifecycle | 21.33 → 2.41 ms | 8.86× |
Recorded 7 October 2026 · ten repetitions with random interleaving · 15 OpenMP threads · unpinned execution. The single-threaded convolution uses 16 × 16 output tiles and four independent reduction chains.
Xyx combines SIMD, prefetching and interleaved accumulators, achieving 1.62× against the x-tiled baseline. A y-major tiled implementation measured 12.34 ms. Container lifecycle measures construction, zero-initialisation and destruction.
Numerical validation passed across 19 matrix, blur, transpose and convolution variants on the benchmark inputs. Sanitizer testing accompanies the concurrent-container regression suite.
Apple M5 Pro · Release · unpinned execution. Throughput measured across ten 100M-item runs. Bounded-ring medians: 14.4M / 10.9M / 4.80M handoffs/s for 1P1C / 2P2C / 4P4C. Reference baseline: CoreForge's allocating reference-counted linked queue.
Separate 4P4C latency test at 1M aggregate handoffs/s offered load: ring / linked p99 = 667 ns / 3.63 µs; p99.9 = 64.83 / 439.50 µs. 100M handoffs, 999K samples.
Open-loop latency is measured from scheduled push time to consumer completion, including scheduling delay and backpressure. The benchmark captures end-to-end queue handoff latency.
SPSC handoff p99: 209 / 709 ns (ring / linked). Validation includes count, sum, XOR, sample count and unique-value regression checks. An eight-consumer Release stress run completed 8.59B pop attempts with zero recurrences of previously identified failures.
Queue benchmark source8.46×
97.93 → 11.58 ms · 1024 × 1024 matrices
Apple M5 Pro · macOS Release · 10-run median · original strided FP32 implementation as baseline.
1.39B keys/s
500M uint32 keys · four-pass radix sort · 360 ms aggregate kernel time · RTX 3080 Ti Laptop GPU. Historical GPU-kernel measurement; allocations and transfers measured separately from the kernel scope.
A C++17 microservice messaging platform built around persistent Boost.Asio TCP connections, gRPC inter-service communication and a custom TLV binary protocol with compile-time type constraints. The TCP connection layer includes dedicated throughput and tail-latency benchmarks.
5.44ms
p99 round-trip time · loopback test
Isolated TCP connection layer · 50K loopback connections · 17.9M request-response exchanges · round-trip latency and completed-exchange throughput.
Bare-metal bring-up on Cortex-A72 (Raspberry Pi 4B): assembly boot, MMU configuration, interrupt subsystem and cooperative scheduling, debugged through JTAG, GDB and UART tracing.
Kernel → user-space transition
Cortex-A72 · Raspberry Pi 4B
Seeking graphics, GPU-compute and C++ performance/systems roles, including low-latency trading infrastructure. Open to opportunities in Shanghai and across the APAC region.