Software Development Team
Software Engineering Roles
Software Architect - C++

Requirements in Practice :

• Setting up the Project Framework and breaking down the composition of the SW - scalability, modularity & maintainability.

• Set up a development framework for the distributed development of SW to ensure – Scalability, Modularity and Maintainability.

• Design and set the Coding standards and guidelines along with the review process to assess the Scalability, Modularity and Maintainability of the code across every stage of SW Development Lifecycle

• Identify the platforms, Setup Tool Chains and support APIs needed for every stage of the Development process – Visual Studio IDE setup, Continuous Integration, Debugging for Multi-Threads, Licensing, Cross Language Licensing, Dependency Bundling, etc.

• Set up the C++ project templates for Services Architecture, API structure and state machine.

• Design the development process for Parallel Threaded Coding and debugging.

• Train the team with Debugging skills and nuances of performance improvements with C++.

• Design the Dependency architecture and version management system

• Design the release management system & API/Library Licensing.

• Design Test Frameworks for Integration, distribution, Performance profiling & Safety.

Software Engineer - GPU Performance

Requirements in Practice :

• Experienced with Low-level CUDA API

• Strong with fundamentals of C++/C.

• Adept with Visual Studio developer toolchain.

• Experience in low-level performance analysis and optimization with a strong understanding of the GPU HW architecture and HW-oriented performance optimization.

• Including proficiency using GPU profiling tools such as NVIDIA Visual Profiler, NVIDIA Nsight Compute and Graphics Developer tools for debugging

• Optimizing Time Continuous kernels - not just High-Level Kernel optimizations that are shipped with CUDA.

• Design the framework of Pipelined Image processing

• CUDA core optimization to achieve maximum performance for a pipelined processing between multiple blocks of functions executing simultaneously.

• Dynamic Load balancing between kernels and functions.

• Interleaving processing between CPU and GPU and runtime modification of GPU processing control flow from CPU.

• Practice with NvidiaDirect to access memory directly from Peripheral devices (PCIe), Display and USB, bypassing the CPU

• Practice with constructing Direct Visualization of GPU Memory for Debugging without CPU transfer

• Experienced with designing and optimising foundational neural networks and modelling neurons (basically optimizing mathematical models that involve time-weighted kernels) ground up.

• Exposure to Omniverse is a Plus

Software Engineer - C++

Requirements in Practice :

• Excellent C++ skillset across Windows and Linux Platforms.

• Optimizing processing cycles for large image pipelines and memory handling is a plus. (Camera generates 1 GB of Data every second)

• Experience with State-Machine Architecture is a plus

• Experienced with entire SW development Lifecycle & best practices.

• OOP driven thought process – scalability, modularity, polymorphic coding

• Deep architecture understanding with thorough knowledge of design patterns and adept in designing architectures for parallel threading

• Multi-threaded programming libraries like pThreads, OPENMP, OPENCL

• Experience with API architecture design and development

• Experienced with DLL & Static Library building and distribution.

• Adept with translating and optimizing algorithms, especially DSP (which includes image processing) and/or Neural Net Architectures (at least one of the two is needed)

• Implementing and Optimizing Algorithms

• Adept with building test frameworks for codes.

• Must have a strong inclination for documentation and code readability.