Preview image

Unity's Mono problem: Why your C# code runs slower than it should

Execution of C# code in Unity's Mono runtime is slow by today's standards, much slower than you might expect! Our game runs 2-3x faster on modern .NET compared to Unity's Mono, and in a few small benchmarks I measured speedups of up to 15x. I've spent some time investigating what's going on and in this article I will present my findings and why everyone should want Unity's .NET modernization to become production-ready as soon as possible.

Preview image

Internship at NVIDIA 2014

I spent summer of 2014 as an intern at the NVIDIA. That was quite different experience than the last year in the Google. This article describes all the aspects of being an intern in the Silicon Valley including tips how to prepare for such adventure. A big part of the summer was a road trip from Indiana to California and back and I will talk about it as well. After I returned everybody keep asking me: What is better, NVIDIA or Google? You can find out my personal opinion in the post!

Preview image

Conway's Game of Life on GPU using CUDA

This project compares performance of CPU and GPU in evaluation of famous Conway's Game of Life. The performance was tested on three different implementations. The most sophisticated version of the algorithm on GPU stores data in one bit-per-cell array and leads to speed-up of 480x compared to serial CPU algorithm. The best implementation for CPU turned out to be lookup-table approach leading to 60x speedups over serial CPU. The report contains detailed explanation of used algorithms, measurements, and code of whole project for download.

Preview image

Maraytr - Marek's Ray-tracer

Maraytr is a ray-tracer written with high focus on algorithms and data structures rather than on performance. I decided to make it to get deeper understanding of theory and math behind ray-tracing. Also, ray-tracing is fun! The core was written in four days in C# without any third-party libraries. The scene is represented as Constructive Solid Geometry (CSG) and supported primitives are sphere, cube, and plane. It is possible to do basic boolean operations like union, intersection, subtraction, or xor.

Preview image

L-systems in Haskell

This project is relatively advanced L-system library written in Haskell. Out of the box it supports symbols with parameters, conditional rewriting, and it can evaluate expressions with binary and unary operators. There are two available L-system interpreters: text and SVG vector graphics. The code is well commented and written with extensibility in mind. It is easy to add new operators, new interpreters, or even extend the grammar. This project was my final program of Non-procedural programming class.

Preview image

Wandering

Wandering is a generic maze generator, solver, and game playable in a console. It supports hexagonal and rectangular mazes and two types of maze generators. Cool thing is that the maze type is independent of the solver. Every solver can solve every type of maze. It is possible to define new maze types, generators, and solvers. Another cool feature is the UI system in a console including menus, text boxes, windows, and screen manager. This was my first larger program written in C++.

© Marek Fiser. Content license: CC BY 4.0

Built with a home-grown static site generator.