RESOURCES

RESOURCES

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

© 2024 ENERZAi Inc. All rights reserved

© 2024 ENERZAi Inc. All rights reserved

© 2024 ENERZAi Inc. All rights reserved