Lab Positions:
Software Engineer

General Description

The Brains in Silicon Laboratory of Dr. Kwabena Boahen, located at Stanford University in the Department of Bioengineering, is designing neuromorphic chips to decode neural signals into motor commands for fully implantable neuroprostheses and multichip neuromorphic systems to endow machines with cognitive abilities, together with software infrastructure to test, configure, and interact with these unconventional embedded computing platforms in real-time. These projects are funded by the National Institutes of Health and the Office of Naval Research.

Position Details

We seek to hire an accomplished software engineer with expertise in algorithms, graph theory, and embedded or scientific computing. The focus of this position is to map spiking neural networks, specified in easy-to-understand Python scripts, on to our custom hardware platforms that can emulate millions of neurons in real time. Doing so will require learning and understanding the hardware's features and limitations, developing neural-network to hardware mapping algorithms in C++, and refining the network specification language to make it more intuitive for end users. The candidate will lead a team including two software engineers focusing on real-time interaction and on automated testing. Achieving seamless software-hardware interoperation will require creativity in providing an elegant interface, teamwork in improving the existing system architecture, and smartly deciding when and where performance is critical to perform optimizations.

We desire a person with a powerful desire to build neuromorphic systems for use by others and a strong drive to facilitate their development and deployment. The successful candidate will lead a team of three software engineers (including the candidate) working closely with the PI to refine and realize his vision for this innovative technology.

Primary function of this position is to improve the software infrastructure (written in C++) that maps Python code on to our custom neuromophic hardware, and enhance system functionality to better leverage the features of the hardware. This requires professional software engineering, algorithms, and scientific or embedded computing expertise.

  • Work closely with the PI and other software and hardware engineers to optimize and build on the existing software infrastructure to support existing and future neuromorphic chips.
  • Read documentation and collaborate with lab members where necessary to understand the neuromorphic hardware. This will involve looking at networks that students have made and creating your own.
  • Create network-mapping algorithms that leverage additional features of existing and new hardware in a manner that provides network scalability, bandwidth efficiency and system stability.
  • Profile the code to find performance bottlenecks and refine or revise the software architecture to address them.
  • Convey new ideas, extend or modify specifications, and explain results to faculty and staff, orally and in writing.
  • Supervise a software engineer to implement real-time interaction (i.e., GUI-based visualization and control) to ensure that end-users and developers can visualize and modify the neural network’s organization and any associated neural activity.
  • Supervise another software engineer to implement automated test suits that expose any deficiencies of software infrastructure and rectify as needed.
  • Supervise the production of a clean codebase that is employed by staff and advanced students (without modifications to the core) for lab research.
  • Contribute to deployment, training, dissemination and documentation.

Required Qualifications

BS in Computer Science (or related discipline) and at least two to three years experience as a software engineer is required. A MS in Computer Science (or related discipline) is preferred. Excellent C++ coding skills are required. Experience architecting and writing large software programs and a background in scientific or embedded computing are strong pluses. Excellent oral and written communication skills are essential for this collaborative project.

Desirable Skills

The following areas of expertise are all relevant to developing neuromorphic systems, and experience in any or all of them is considered a strong plus.

  • Strong understanding of software architecture to create sophisticated network mapping heuristics, expand and maintain existing code, and develop strong automated testing to assure modelers of a validated system.
  • Experience using industry-standard tools for software design, testing, and optimization. Experience working in a collaborative software engineering position with contributed code totaling over 10,000 lines.
  • Familiarity with compilers or other graph-based optimization code.
  • Good grasp of basic neurobiology and neural network models.
  • Excellent written and oral communication skills.

To apply

Visit the job posting at Stanford Careers