Performance made simple with Nadya,
our proprietary programming language
Performance made simple with Nadya, our proprietary programming language
Performance made simple with Nadya,
our proprietary programming language
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
10
11
11
12
12
13
13
14
14
Nadya is a programming language developed to enable anyone to develop high-performance computing (HPC) software easily, quickly, and safely. Currently, it is used for implementing internal computations in Optimium and is continuously evolving through ongoing research and development.
Nadya is a programming language developed to enable anyone to develop high-performance computing (HPC) software easily, quickly, and safely. Currently, it is used for implementing internal computations in Optimium and is continuously evolving through ongoing research and development.
Nadya is a programming language developed to enable anyone to develop high-performance computing (HPC) software easily, quickly, and safely. Currently, it is used for implementing internal computations in Optimium and is continuously evolving through ongoing research and development.
1
1
1
Intelligent Compiler Optimizations
Intelligent Compiler Optimizations
Intelligent Compiler Optimizations
Built-in support for hardware intrinsics
No need to be aware of specific intrinsics - Nadya gracefully supports them, maximizing capability of target hardware.
Automatic loop optimizations
Nadya can unroll, parallelize, fuse loops without violating program safety – either automatically or instructed by programmer
Integrated code generation
One of the strongest feature of Nadya is that it can create its own AST(Abstract Syntax Tree) and combine them to build new code.
Built-in support for hardware intrinsics
No need to be aware of specific intrinsics - Nadya gracefully supports them, maximizing capability of target hardware.
Automatic loop optimizations
Nadya can unroll, parallelize, fuse loops without violating program safety – either automatically or instructed by programmer
Integrated code generation
One of the strongest feature of Nadya is that it can create its own AST(Abstract Syntax Tree) and combine them to build new code.
Built-in support for hardware intrinsics
No need to be aware of specific intrinsics - Nadya gracefully supports them, maximizing capability of target hardware.
Automatic loop optimizations
Nadya can unroll, parallelize, fuse loops without violating program safety – either automatically or instructed by programmer
Integrated code generation
One of the strongest feature of Nadya is that it can create its own AST(Abstract Syntax Tree) and combine them to build new code.
2
2
2
Support for functional programming
Support for functional programming
Support for functional programming
Functional programming has many advantages. It is concise, clear, and prevents mistakes effectively. We chose this pattern since supporting functional paradigm from built-in can potentially provide easier modeling for high performance computation models in safe & representative way.
Functional programming has many advantages. It is concise, clear, and prevents mistakes effectively. We chose this pattern since supporting functional paradigm from built-in can potentially provide easier modeling for high performance computation models in safe & representative way.
Closures
Closures are fundamental building block for functional language. It encapsulates environment when it was defined and can be moved around as a value.
Pattern Matching & Discriminated Unions
Discriminated union lets one value of possibly different types to be expressed as single union typed value. This can be used with pattern matching, simplifying the code structure.
Recursive Closures
Recursion is fundamental for writing functional programs without iterations. Nadya supports recursion just like any other functional language does.
Closures
Closures are fundamental building block for functional language. It encapsulates environment when it was defined and can be moved around as a value.
Pattern Matching & Discriminated Unions
Discriminated union lets one value of possibly different types to be expressed as single union typed value. This can be used with pattern matching, simplifying the code structure.
Recursive Closures
Recursion is fundamental for writing functional programs without iterations. Nadya supports recursion just like any other functional language does.
Closures
Closures are fundamental building block for functional language. It encapsulates environment when it was defined and can be moved around as a value.
Pattern Matching & Discriminated Unions
Discriminated union lets one value of possibly different types to be expressed as single union typed value. This can be used with pattern matching, simplifying the code structure.
Recursive Closures
Recursion is fundamental for writing functional programs without iterations. Nadya supports recursion just like any other functional language does.
3
3
3
Native Support for Tensor Types
Native Support for Tensor Types
Native Support for Tensor Types
Nadya has built-in support for tensor arithmetic, with integrated broadcasting semantics Nadya compiler can effectively optimize them to generate fast code automatically for every case.
Nadya has built-in support for tensor arithmetic, with integrated broadcasting semantics Nadya compiler can effectively optimize them to generate fast code automatically for every case.
Arithmetic operation on tensors
Arithmetic operations can be applied directly on tensors, as they were any other numeric types. Shape derivation and broadcasting are automatically handled by compiler, as long as their shapes are compatible.
Straight forward Load & Store semantics
Semantics on tensor indexing has been designed to be similar with famous libraries such as PyTorch, or NumPy, while Nadya compiler still supports internal optimization on tensors under the hood.
Ownership & Borrow semantics
From the binding that owns some data, another let binding can borrow value. This provides safe and intuitive way for managing data throughout the program.
Arithmetic operation on tensors
Arithmetic operations can be applied directly on tensors, as they were any other numeric types. Shape derivation and broadcasting are automatically handled by compiler, as long as their shapes are compatible.
Straight forward Load & Store semantics
Semantics on tensor indexing has been designed to be similar with famous libraries such as PyTorch, or NumPy, while Nadya compiler still supports internal optimization on tensors under the hood.
Ownership & Borrow semantics
From the binding that owns some data, another let binding can borrow value. This provides safe and intuitive way for managing data throughout the program.
Arithmetic operation on tensors
Arithmetic operations can be applied directly on tensors, as they were any other numeric types. Shape derivation and broadcasting are automatically handled by compiler, as long as their shapes are compatible.
Straight forward Load & Store semantics
Semantics on tensor indexing has been designed to be similar with famous libraries such as PyTorch, or NumPy, while Nadya compiler still supports internal optimization on tensors under the hood.
Ownership & Borrow semantics
From the binding that owns some data, another let binding can borrow value. This provides safe and intuitive way for managing data throughout the program.
4
4
4
Memory Safety & Optimizations
Memory Safety & Optimizations
Memory Safety & Optimizations
Nadya is designed to minimize human errors with memory. There is no explicit malloc or free exposed to programmer. Nadya compiler itself looks for suitable location where memory should be freed and takes care of it to prevent memory leaks
Nadya is designed to minimize human errors with memory. There is no explicit malloc or free exposed to programmer. Nadya compiler itself looks for suitable location where memory should be freed and takes care of it to prevent memory leaks
Nadya can automatically reduce unnecessary load & stores and other memory operations by aggressively removing & optimizing them. This includes automatic in-placing, hoisting memory allocations, and many more.
Memory load & stores take lots of portion in optimization, and Nadya can help programmers doing so
Nadya can automatically reduce unnecessary load & stores and other memory operations by aggressively removing & optimizing them. This includes automatic in-placing, hoisting memory allocations, and many more.
Memory load & stores take lots of portion in optimization, and Nadya can help programmers doing so