Topics | |
Print functions | |
These functions provide an abstraction on top of printf that allow users to display the contents of AIE types in the standard output. | |
Loop unrolling functions | |
These functions allow users to explicitly unroll the body of a loop. | |
Classes | |
struct | aie::arch |
Structure used to represent the AIE architecture being compiled against. More... | |
Functions | |
template<unsigned Reg = (unsigned)-1, AIE_RegFile RegFile = AIE_RegFile::Default, typename T> | |
auto | aie::utils::locate_in_register (T &&val) |
Binds a variable to a specified register. | |
template<unsigned StartIdx = 0, unsigned N, AIE_RegFile RegFile = AIE_RegFile::Default, typename T> | |
void | aie::utils::locate_in_register (T(&arr)[N]) |
Binds each variable in an array to sequential registers, starting from the specified register. | |
template<unsigned MinIters, LoopOptions Opts = LoopOptions{}, typename Fn> | |
void | aie::pipelined_loop (unsigned count, Fn &&fn) |
Invokes a function object a given number of times. | |
template<unsigned MinIters, LoopOptions OptsFn1 = LoopOptions{}, LoopOptions OptsFn2 = LoopOptions{}, typename Fn1, typename Fn2> | |
void | aie::pipelined_loops (unsigned count, Fn1 &&fn1, Fn2 &&fn2) |
Invokes two function objects a given number of times. | |
struct aie::arch |
Structure used to represent the AIE architecture being compiled against.
Public Types | |
enum | ArchGeneration : unsigned |
An enum defining available AIE generations, which are defined as: More... | |
enum | ArchVersion : unsigned |
An enum defining available AIE architectures. More... | |
Static Public Member Functions | |
template<typename... T> requires (std::is_same_v<T, ArchGeneration> && ...) | |
static constexpr bool | is (T... gens) |
Checks if the current AIE architecture version against the supplied generation pack. | |
template<typename... T> requires (std::is_same_v<T, ArchVersion> && ...) | |
static constexpr bool | is (T... vs) |
Checks if the current AIE architecture version against the supplied pack. | |
Static Public Attributes | |
static constexpr ArchGeneration | generation = ArchGeneration(__AIE_ARCH__ / 10) |
Represents the current AIE generation. | |
static constexpr ArchVersion | version = ArchVersion(__AIE_ARCH__) |
Represents the current AIE architecture version. | |
enum aie::arch::ArchGeneration : unsigned |
enum aie::arch::ArchVersion : unsigned |
|
inlinestaticconstexpr |
Checks if the current AIE architecture version against the supplied generation pack.
vs | A pack of ArchGenerations to test the current version against |
|
inlinestaticconstexpr |
Checks if the current AIE architecture version against the supplied pack.
vs | A pack of ArchVersions to test the current version against |
|
staticconstexpr |
Represents the current AIE generation.
|
staticconstexpr |
Represents the current AIE architecture version.
auto aie::utils::locate_in_register | ( | T && | val | ) |
Binds a variable to a specified register.
Reg | Numeric identifier of register to bind variable to. |
RegFile | Which register file to locate the variable in. |
val | The value to be placed. This may be an aie::vector, aie::accum, or scalar value.
|
void aie::utils::locate_in_register | ( | T(&) | arr[N] | ) |
Binds each variable in an array to sequential registers, starting from the specified register.
Reg | Numeric identifier of register to bind the first variable to. |
RegFile | Which register file to locate the variable in. |
val | The value to be placed. This may be an aie::vector, aie::accum, or scalar value.
|
void aie::pipelined_loop | ( | unsigned | count, |
Fn && | fn ) |
Invokes a function object a given number of times.
The pipelining can be controlled by optionally peeling iterations.
MinIters | Lower bound on the number of iterations of the loop body |
Opts | Options related to peeling loop iterations |
count | Number of iterations |
fn | The callable to pipeline
|
void aie::pipelined_loops | ( | unsigned | count, |
Fn1 && | fn1, | ||
Fn2 && | fn2 ) |
Invokes two function objects a given number of times.
The pipelining of each can be controlled by optionally peeling iterations.
MinIters | Lower bound on the number of iterations of the loop body |
OptsFn1 | Options related to peeling loop iterations of the first function |
OptsFn2 | Options related to peeling loop iterations of the second function |
count | Number of iterations |
fn1 | The first callable to pipeline |
fn2 | The second callable to pipeline For example, take the following This will result in the following execution: ``` |stage0 |stage1 |stage2 (main loop) |stage3 |stage4 | -—|----—|--------—|--------------------------------—|----—|----—| fn1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12| 13| 14| 15| - | - | fn2 | - | - | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12| 13| 14| 15| ``` |