Nemanja Grujic, Developer in Niš, Serbia
Nemanja is available for hire
Hire Nemanja

Nemanja Grujic

Verified Expert  in Engineering

Software Engineer and Developer

Location
Niš, Serbia
Toptal Member Since
June 7, 2016

Nemanja is a software engineer with over 11 years of industry experience in C++, CUDA, computer vision, machine learning, performance optimizations, and more. He is passionate about programming professionally and privately and strives to write top quality and top performance code.

Portfolio

MotionDSP
OpenGL, 3D Graphics, GIS, Agile, Video Processing, Image Processing...
MotionDSP
Windows, OpenCL/GPU, Git, Caching, Parallel Programming, Multithreading...
Deutsche Telekom Laboratories
OpenCV, Computer Vision, Linux, C++

Experience

Availability

Part-time

Preferred Environment

C++17, C++, Git, Visual Studio, Windows

The most amazing...

...thing I've made is an autonomous poker program that uses Bayesian inference to estimate the opponent's style after just a few hands and win even against humans.

Work Experience

R&D Lead Engineer

2013 - 2019
MotionDSP
  • Wrote automatic optimizer of data-intensive algorithms in C++. Code automatically generates multi-core and vector optimizations.
  • Worked closely with other researchers on design, implementation, and optimization of computer vision, image processing, video processing, machine learning, AI, and deep learning algorithms.
  • Envisioned an algorithm for creating mosaic images from surveillance footage or sets of aerial images. Guided the team to the successful implementation of the algorithm.
  • Successfully modernized C++ codebase by porting it to C++11, C++14, and C++17. Made code more secure and less prone to errors and memory leaks.
  • Established coding style guidelines and introduced good programming practices to the team, including pair programming, code reviews, and supported teamwork.
  • Led 3D GIS project development - similar to Google Earth with real-time video stream rendering on top of the 3D globe.
  • Managed the R&D division of the company. Monitored all major R&D projects, reported on progress, and provided technical guidance to keep on track.
Technologies: OpenGL, 3D Graphics, GIS, Agile, Video Processing, Image Processing, Deep Learning, Machine Learning, Computer Vision, C++17, C++14, C++11, C++

R&D Engineer - Senior Software Engineer

2008 - 2013
MotionDSP
  • Improved the current multi-frame super-resolution algorithm by making it resilient to ghosting effects present at the time.
  • Ported most of the company's video processing algorithms to CUDA (GPGPU), including super-resolution, de-blurring, contrast enhancement, frame-rate adjustment, and more.
  • Optimized all the above-mentioned algorithms and enabled real-time performance.
  • Created a testing framework for video processing algorithms to ensure successful regression testing under change.
  • Ported an extremely challenging MSER feature detector to CUDA (filed a patent).
  • Created an RAII-based GPU memory management system which hides memory allocation latency and enables even more performance.
Technologies: Windows, OpenCL/GPU, Git, Caching, Parallel Programming, Multithreading, Performance Optimization, Visual Studio, Performance, Optimization, Profiling, Memory Management, Unit Testing, Test-driven Development (TDD), Low Latency, Real-time Systems, Image Processing, Video Processing, Computer Vision, GPGPU, OpenCL, NVIDIA CUDA, C++

Junior Researcher

2007 - 2008
Deutsche Telekom Laboratories
  • Researched the problem of real-time human head poses estimation in the field of computer vision (CV).
  • Implemented a novel approach to this problem. Used OpenCV, C++, and Linux.
  • Published paper on the proposed method in the Automatic Face and Gesture Recognition conference.
Technologies: OpenCV, Computer Vision, Linux, C++

Software Development Intern

2005 - 2005
Faculty of Electronic Enegineering, University of Nis
  • Developed a 3D graphics engine for massive landscape rendering in C++ and OpenGL.
  • The engine was able to render gigabytes of terrain texture data in real time by automatically adjusting level of detail on per frame basis.
  • Optimized engine performance to achieve real-time.
Technologies: Low Latency, Real-time Systems, Performance, Optimization, Visual Studio, 3D Graphics Engines, 3D Graphics, OpenGL, C++

Poker Playing Bot

An autonomous poker-playing program. The program was winning against humans and used Bayesian inference to estimate the opponents' style of play after just a few hands. The program won first place at Annual Computer Poker Competition 2018 in Six-Player No-Limit Texas Hold'em category and second place at Acpc 2017 in Heads-up No-Limit Texas Hold'em category.

Source in C++

A template-based function specification and derivation engine in C++. It is similar to Theano from Python but basic. Users can specify functions in the explicit form:

• Symbol x(0);
• Symbol y(1);
• auto f = (sqrt(sqr(x) * 2.0f + sqr(y)) + 1.0f);

They can also evaluate them, get derivatives, and apply them to a data collection, possibly in parallel.

Languages

C++, C++11, C++17, C++14, C, Embedded C, Python, C#.NET, HTML, SQL, C#

Paradigms

Real-time Systems, Parallel Programming, GPGPU, Unit Testing, Clean Code, Scrum, Test-driven Development (TDD), Agile

Platforms

NVIDIA CUDA, Windows, Linux, Docker, Kubernetes

Other

Low Latency, Computer Science, Performance Optimization, Performance, Multithreading, Optimization, Video Processing, Memory Management, OpenCL/GPU, Algorithms, Machine Learning, Data Structures, Computer Vision, Deep Learning, Computer Graphics, Mathematics, Applied Mathematics, Image Processing, Artificial Intelligence (AI), Embedded Software, Caching, Profiling, 3D Graphics, 3D Graphics Engines, Bayesian Inference & Modeling, Naive Bayes, Poker, Linear Algebra

Tools

Visual Studio, GIS, Microsoft Visual Studio, Git, C#.NET WinForms, Intel IPP, MATLAB

Frameworks

OpenCL

Libraries/APIs

OpenGL, OpenCV

2000 - 2006

M.Sc. Degree in Computer Science

Nis University - Nis

Collaboration That Works

How to Work with Toptal

Toptal matches you directly with global industry experts from our network in hours—not weeks or months.

1

Share your needs

Discuss your requirements and refine your scope in a call with a Toptal domain expert.
2

Choose your talent

Get a short list of expertly matched talent within 24 hours to review, interview, and choose from.
3

Start your risk-free talent trial

Work with your chosen talent on a trial basis for up to two weeks. Pay only if you decide to hire them.

Top talent is in high demand.

Start hiring