Senior Software Engineer - Cuda Driver

NVIDIA NVIDIA · Semiconductors · Santa Clara, CA

Senior Software Engineer role focused on developing and implementing new features for the CUDA driver, a core component of NVIDIA's GPU computing platform. The role involves system-level expertise, collaboration with hardware architects and other teams, and advancing CUDA architecture across diverse workloads including deep learning. It requires strong C programming, systems software experience, and understanding of OS interfaces and system-level architecture.

What you'd actually do

  1. Evangelize, architect, and implement new CUDA features
  2. Coordinate and drive development efforts across multiple teams
  3. Collaborate with members of hardware architecture teams
  4. Define forward-looking improvements to the CUDA APIs and programming model
  5. Build and maintain performance and precision modeling

Skills

Required

  • Bachelor of Science or Master of Science degree in Computer Science, Electrical Engineering, or related field (or equivalent experience)
  • 5+ years of relevant experience in developing systems software
  • Strong C programming skills
  • Experience designing, debugging, and maintaining complex software stacks
  • Experience with operating system interfaces for threads, process control, and virtual memory
  • Experience with HW/SW co-design, performance modeling using emulation/simulation, and developing SW programming model exposures for HW features
  • Understanding of system-level architecture, such as interconnects, memory hierarchy, interrupts, and memory-mapped IO
  • Strong interpersonal, verbal, and written communication skills with a capability to achieve objectives under tight time constraints

Nice to have

  • Prior experience with parallel computing - preferably writing CUDA programs or libraries that use CUDA
  • Knowledge of memory coherence and consistency models
  • Background with kernel mode development
  • Experience with Linux systems software development as well as experience maintaining and extending programming models or higher-level language support for similar environments
  • Familiarity with distributed system and training/inference patterns (data/model/pipeline parallelism) and deep learning frameworks

What the JD emphasized

  • Strong C programming skills
  • Experience designing, debugging, and maintaining complex software stacks
  • Experience with operating system interfaces for threads, process control, and virtual memory
  • Experience with HW/SW co-design, performance modeling using emulation/simulation, and developing SW programming model exposures for HW features
  • Understanding of system-level architecture, such as interconnects, memory hierarchy, interrupts, and memory-mapped IO