Advanced computing hardware and systems require advanced compilers. Reservoir Labs has experience developing compilers for advanced computing hardware. With our work spanning decades, we have addressed instruction-level parallelism, multicore, accelerators, streaming, network processors, special purpose architectures, SIMD/vector machines, massive multithreading, dataflow machines, exascale/extreme scale, and more.
We have also developed custom compilers for advanced application domains, such as network processing cyber security, spectral hypergraph analysis, and dynamic object code translation.
Our team has developed foundational technology in some of the most advanced compilers, commercial and open source, in use today. There is no other independent team available for consulting in the field of compilers that can match our breadth, depth, experience, and track record.
We specialize in providing quality results that solve our clients’ most difficult compiler problems.
Reservoir Labs’ advanced compiler development services include:
- Porting, re-targeting, optimizing, testing, validating, and supporting existing compilers and virtual machines, including our own, third-party proprietary, and open-source
- LLVM – service, support, and advanced development, such as domain-specific IR generators, development of new back-end code generators, development of new optimizations, and application to verification. We have particular expertise in applying LLVM to new architectures for computing
- GCC – we have very deep expertise enhancing gcc for ultimate performance on a domain specific processor, involving the needed changes to the intermediate representation and working that through all of the associated optimizations and code generation. This improvement has been ported through several gcc releases.
- OpenJDK – New optimizations, tuning, advanced algorithms for synchronization and garbage collection
- Developing custom compilers for new application domains, new hardware and new systems
- Applying compiler technology in novel ways, such as solving problems in security, simulation, and validation
- Performing research in compiler technology
- Developing new compiler algorithms
- Developing and advancing compiler front ends, including C++
- Developing languages and compilers for application domains
- Supplementing support for critical technologies
We are particularly experienced working with or producing the following compiler technologies:
- Power optimizations: Energy-Proportional Scheduling, automatic generation of clock and voltage controls, Near-Threshold Voltage (NTV) support
- Automatic generation of communication-avoiding schedules
- Automatic generation of Event-Driven-Task (EDT) schedules, including support for automatic generation of Open Community Runtime (OCR) programs.
- Automatic parallelization and generation of GPU accelerated programs
- Automatic parallelization and generation of OpenMP programs
- Automatic parallelization and generation of heterogeneous programs (e.g., mixed OpenMP/MPI/CUDA)
- Joint formulation of parallelism, locality, contiguity, vectorization, data-layout, placement, and energy objectives in optimization.
- Polyhedral model: scheduling, code generation, and other optimizations
- Just-in-time (JIT): Dynamic, profile-driven, global, speculative, and/or object-oriented optimizations
- Compile time production of contingent response or dynamic undoing for program semantics that change at run time (as in OpenJDK)
- Code generation: VLIW, RISC, x86, static or dynamic instruction issue, customizable and application-specific processors
- Streaming languages, optimization, and scheduling for high-end DSP
- Packet processing and network analytic languages
- Object code translation: dynamic and static
- Software pipelining, modulo scheduling, and trace scheduling
- Optimizations for parallel computers
- Memory and cache optimizations
- Dynamic compilation on low-resource embedded systems