emmtrix Studio Release Notes
Jump to navigation
Jump to search
emmtrix Studio Release Notes
Release 2024.11
New Features
- New/improved transformations:
- ControlStructSimplify trafo: Added new trafo to simplify control structures
- VarCoalescing trafo: Added transformation to remove unnecessary copy operations by coalescing (i.e. reusing) variables
- ArrayToScalar trafo: Extended trafo to convert arrays to single scalars
- VarSplit trafo: Automatically perform loop if splitting on affected loops
- Vectorization trafo: Using platform SIMD vector length property as default vector length
- LoopUnswitch trafo: Added new trafo to unswitch `for` loops containing `if` conditions
- ConstPropagation trafo: Added `remove_dead_blocks=<no|defensive|aggressive>` parameter to remove dead blocks after constant propagation
- ConstantPropagation now supports arrays
- VectorizeTrafo: Added warnings for constructs that might lead to incorrect code
- Vectorization: Showing analysis abort reasons (For loop structure, analysis of memory accesses, detection of nested structures)
- Target platforms: Implemented Tasking/Synopsys targets for Aurix Triboard TC499a STD
- Vectorization: Supporting sin, cos and exp operations
- Full support for PPU of AURIX TC4x (reduction, rounding, multiply-accumulate...)
- Pragmas: `pragmas.json`: Supporting global, variable, parameter, and function declaration pragmas
- Transformation: Showing reason why a transformation cannot be applied
Improvements
- CLI: Added new `addtrafo <trafoname> <path> [--jsonparams <params>]` command to add a trafo to the `emx_trafos_v2.json` file
- GUI: Combo box to switch the active project is now disabled while a pass is running
- Performance Estimation: Improved loop analysis by using maximum number of iterations and supporting while loops. Uses maximum number of iterations if available and sets `avg = (min + max)/2`
- CLI: Added new `createproject2 <name> [--folder <dir>]` command
- C parsing: Changed handling of include directories
- Subdirectories of include folder are not automatically added as include folders anymore
- Parsing stops with an error message when an include cannot be resolved
- The name of all parsed header files and where they are included is printed on the console when debugging is enabled
Bugfixes
- Assembly-based performance estimation: Fixed incorrect code caused by const data type in ?: operator
- Vectorization: Fixed incorrect code generation caused by comments at the end of the for body
- C parsing: Fixed that pragmas within included files were not considered
- LoopInterchange trafo: Fixed exception caused by loop local variable used within variable initialization
- Vectorization: Fixed that all linear memory accesses were considered as indexed
- Vectorization: Fixed vectorization of loops containing unsupported code
- Performance estimation: Fixed handling of nested folder structures for ASM performance estimation
Notes
- Removed support for GPUs (CUDA and OpenCL code generation)
- Removed support for FPGAs (high-level synthesis)
- ParallelCodeGeneration: Deactivated default static array conversion for test code generation (can be activated in settings)
Release 2024.07
New Features
- New/improved transformations
- Deroll trafo: Added new trafo to create loops for similar subsequent statements or constructs
- LoopFusion trafo: Added new trafo to fuse two subsequent for loops with the same iteration space
- PtrResolve trafo: Added new trafo to resolve pointers and replace indirect memory accesses by direct (used in eDA)
- MakeStatic trafo: Added new trafo to make functions static if used only locally to provide optimization potential for the compiler and ease the linking
- ArrayToScalar trafo: Added new trafo to convert arrays to scalars
- LoopUnroll trafo:
- Added possibility to apply
LoopUnroll
to all for-loops of selected functions - Automatically perform full loop unrolling when the unrolling factor exceeds the constant number of iterations
- Added possibility to apply
- emmtrix Dependency Analyzer (eDA)
- Added result caching mechanism to speed up recurring analysis
- Added support for label propagation
- Added shortest-path and reachability report to follow how values/signals propagate
- emmtrix Performance Estimator (ePE)
- Added min/max runtime calculation
Improvements
- C code handling
- Preserving
#define
and#undef
preprocessor directives - Parsing C code comments for analysis and code generation
- Added option to set charsets for source code files
- Respecting the correct order of #include directives and other declarations
- Preserving
- GUI Improvements
- Settings: Sorted and restructured settings
- Improved usability of emmtrix Studio project wizard
- Analysis Time Improvements
- Improved performance of SSA calculation
- Improved analysis performance by caching result of variable usage
- Added internal caching for performance estimation
- Improvements of internal type calculations
- Added cache to improve performance to calculations in eDA
- Fixed performance bottleneck in dominator calculation in eDA
- emmtrix Parallel Studio
- Added option to enable parallelization for shared memory (improves global variables synchronization)
- General
- Improved support for pointers in dependency analysis in eDA
- Improved constant propagation by using sparse conditional constant propagation algorithm
- Commandline interface learned to run commands from script file
Bugfixes
- Fixed handling of enum declarations
- Improved support for nested folder structures
- Crash in SSA algorithm
- Fixed automatic insertion of forward declaration when necessary
- Handling of ArithmeticException e.g. caused by division by zero in const propagation
- Fixed stack overflow in SSA algorithm caused by deep CFGs
Release 2023.11
New Features
- All emmtrix tools are now gathered in the emmtrix Studio framework with their own perspectives
- emmtrix Parallel Studio
- emmtrix Performance Estimator
- TargetLink Extension (coming soon)
- Simulink Extension (on request)
- emmtrix Dependency Analyzer
- emmtrix Code Vectorizer (coming soon)
- emmtrix Model Code Generator
- emmtrix Code Generator
- Windows: A portable Cygwin installation is provided to remove the need to install any additional third-party tools
Improvements
- Hierarchical Program View: New indicator icon for tasks with measured timing data
- Code Transformations: Added setting in GUI to enable/disable code transformation analysis
- Frontend: Print out missing include files for all processed files for easier project setup and debugging
- Eclipse: Update to version 2023-06
- EMX-LLVM: Update to version 230901
- Added support for alias attribute (e.g.
__attribute__((alias("name")))
) for functions and variables - InstructionSimplifier trafo: Added the following simplifications:
const ? a : b
=>a
orb
0 - x
=>-x
x [-&^|/%] x
=>0
orx
x [+-] (-y)
=>x [-+] y
(-x) + y
=>y - x
x [*/] (-1)
=>-x
- ExplicitCastInserter trafo: Added trafo to insert explicit type casts in expressions where implicit casts are performed
if (expr)
=>if ((_Bool)expr)
float_var = 10
=>float_var = (float)10
ptr_to_long_int + char
=>ptr_to__long_int + (int)char
bool_var * unsigned_long_var
=>(unsigned long)bool_var * unsigned_long_var
0 ? bool_var : vol_int_var
=>(_Bool)0 ? (volatile int)bool_var : vol_int_var
func_call(signed_int_var + long_double_var)
=>func_call((long double)signed_int_var + long_double_var)
- Simulink viewer: Improved usability
- Added sliders for larger models
- Added labels for simple blocks (e.g. sum, product)
- Improved contrast of background colors
- Improved positioning of labels
Bugfixes
- Parallelization: Fixed generation of inconsistent ids from send/recv calls
- Parallelization: Detect variable length arrays as unsupported and clustered
- Fixed wrong reordering of declarations for automatic merging of blocks
- Fixed access analysis of function call arguments including
&
and structs - Fixed crash caused by struct field passed as pointer to function
- Project Wizard got stuck during project creation
- Performance Estimation: Fixed bug with LLVM IR based estimation and multiple source files
- Bugfix for handling custom paths replacing the system paths
emmtrix Parallel Studio Release Notes
Release 2022.10
Improvements
- Added support for GCC extension statement expressions
- Update EMX-LLVM tools to release 2022.11.18
- Added separate template files for “Parallel Tests” (independent from sequential test template)
- Eclipse: Updated to version 2022.06
- Added setting to specify the path for EMX-LLVM tools
- Added new transformation to convert
for
loops towhile
loops
Bugfixes
- Avoid false duplication of functions
Release 2022.07
New Features
- Added support for assembly-based performance estimation
- Added option to enable assembly-based performance estimation in advanced settings
- Supporting Tricore using HighTec GCC compiler (tricore-gcc)
- Supporting ARM Cortex-A7 using ARM GNU Toolchain
- Updated target defintions with assembler performance estimation
- Added new disassembly view with traceability between HTG and C source code
- Generating
assembly.asmmodel
file storing disassembly and mapping information - Disassembly view: Added disassembly view (AsmEditor) for
assembly.asmmodel
files that displays disassembly information - Disassembly view: Option to display timing information from assembly-based performance information
- Disassembly view: Option to reorder basic blocks to better match the order within the source file
- Disassembly view: Automatically highlighting the C source line in a corresponding editor if the caret is changed to an assembly instruction
- Disassembly view: Automatically highlighting the assembly instruction in a corresponding disassembly view if the caret is changed to a C expression
- HTG view: Added new
ASM
button to open disassembly view - HTG view: Automatically highlighting the assembly instructions within disassembly view if a HTG node is selected
- Currently supports Infineon AURIX and ARM Cortex-A7
- Generating
- Performance estimation workflow
- Added new GUI elements to handle performance estimation to workflow
- Generation of HTML report with information on function level
- Added support for loading timing data from simulation and hardware
- Added support for LLVM-IR-based performance estimation
- Independent from target compiler
- Example target specification available for Infineon AURIX TC3xx
- Added new code sinking transformation
- The transformation moves assign statements to positions where it is executed less frequently
- A threshold value is given that specifies the minimum reduction factor for the execution count (threshold)
- Added new loop-invariant code motion transformation
- The transformation moves only statements by default
- It optionally moves sub-expressions by creating temporary variables (sub_exprs=1)
- It optionally reorders invariant expressions by applying the commutative and associative laws (reorder=1)
- It includes an built-in test about the number of moved expressions (expected_moved_exprs)
- Added checksum based upgrade mechanism for
target
andtemplate
folders
Improvements
- Template processing: Added variables
C_FILES_PROCESSED
,C_FILES_ADDITIONAL
andC_FILES_TOCOMPILE
- CPP2C: Supporting projects with multiple *.cpp files
- Active project management
- GUI: Project list in workflow view now has an empty entry to deselect any project
- Bugfix: The active project is now stored explicitly in the workspace to avoid any ambiguity
- Bugfix: Fixed detection of changes to projects (rename, import, copy, etc.)
- Improved WhileToFor transformation with better detection of step and init code
- Improved loop unrolling transformation by adding support for declarations, unknown number of exections, returns and breaks
- C library: Supporting
va_start
,va_end
andva_arg
of stdarg.h - Improved trip count calculation of for loops by using local constant propagation
- Improved check for unsupported C constructs that will be automatically clustered
- Switch case constructs (that are not converted to if)
- Double pointers: e.g.
int **a
- Do while loops
- Goto statements
- Functions with multiple return paths (no return or one return at the end is allowed)
- Loops (for, while, do while) with continue
- Loops (for, while, do while) with break
Bugfixes
- Parallel code generation: Header file
_emx_main.h
was included multiple times - Control-To-Goto: Fixed conversion of short-circuit operations within variable initialization
- Bugfix: Constant propagation with pointers
- Fixed issues with generation of temporary variables
- Fixed some GUI related bugs (avoid unnecessary exceptions)
- Fixed some bugs in the parallel performance estimation (wrong calculation of loops)
- Fixed Linux related bugs (paths, executable flags)
- Fixed Run on MATLAB and compare
Other
- Removed TWIG template support
- ePS is now using Java 17, required files for Windows and Linux are integrated
- Release is based on Eclipse 2022.03
- Update eCG to release from 29/04/22
- Update CPP2C to release from 29/07/22
Release 2022.04
New Features
- Transformations:
- Introduced VarSplit transformation for splitting an array variable into multiple variables
- Introduced FuncPtrResolve transformation for replacing indirect function calls by if-then-else constructs
- Introduced
InstructionSimplifier
transformation to simplify expressions by applying neutral and zero element optimizations - Transformations can now track the reason the analysis failed
- Standard header files now available in template folder (
standard_includes
) and can be edited by the user - Introduced new file management (epsfiles.txt)
- Input files are now defined in the file
sources/epsfiles.txt
which follows the syntax of .gitattributes files - It supports the following attributes
action=[none|process|compile|copy]
: Defines what ePS is doing with the filenone
or no attribute is ignoring the filecompile
is copying and compiling the file to output foldercopy
is only copying the file to output folderprocess
is processing (reading and writing) the C source file by ePS
template=[twig|ftl]
: The file is processed by the specified template engine. A corresponding file extension is removed.c_preprocess
: The source file is preprocessed through a C/C++ preprocessorcodegen=[eCG|eCPP2C]
: Code generation is applied to the source fileeCG
runs emmtrix Code Generator on the MATLAB or Scilab fileeCPP2C
runs emmtrix C++ to C Compiler on C++ source files
- Source file status is shown in Project Explorer as specified in epsfiles.txt
- Default epsfiles.txt file can be created via context menu in Project Explorer or in the Project Settings dialog
- Input files are now defined in the file
Improvements
- Target platforms:
- Added Tasking template for the Aurix TC397 platform
- Added hardware model of SPC58ECxx (PowerPC e200z4 dual-core)
- Vectorization transformation (still experimental)
- Improved support for array subscripts with linear memory access pattern
- Improved source code appearance after vectorization
- Supporting array subscripts with indexed memory access pattern
- Supporting vectorization of loops containing unvectorizable expressions
- Supporting vectorization of simple sub-functions
- Supporting
for
loops with non-constant iteration count - Supporting memory accesses with indirection operator (e.g.
*(p+1) = ...
) - Supporting
?:
operators, generic for loop initialization and non-vectorized local variables
- Performance estimation: Consider duration of variable initialization and ignoring constant expressions
- GUI: Changed format of exceptions dialog
- C library: Added header
arpa/inet.h
,sys/socket.h
,netinet/in.h
andnetdb.h
- Improved support for wide character string and char literals
- Supporting array size calculation of designated array initializers
- Performance estimation: Set default to 1 cycle per instruction when no data is available
- EpsProject: Include directories are relativized if they are part of the project
- CodeGeneration: Replicate input folder structure
- Added node context menu to Hierarchical Program View to export task dependencies in DOT or CSV format
- LLVM tools: Update to release from 27/04/2022
Bugfixes
- Crash caused by
if (a = func() == 3)
- Frontend: Crash in type compatibility check when variable was redeclared after struct was redeclared
- Parallel code generation: Missing function prototypes of parallelized functions
- ParallelCodeGeneration: ‘sources’ folder is now correctly added to the includes
- Fixed OS-dependent path name that could cause one C file being parsed multiple times
- Frontend: Crash caused by two nested C99 for loops without curly brackets, e.g.
for (int i=0; i<10; ++i) for (int i2; i2<10; ++i2) ...
- Function duplication did not consider static variables
- Type deduction of function pointers
- Frontend: Improved error handling of false C code (e.g. case outside switch)
- Fixed executable flags for Linux
- Type deduction failed for address operator on
_Bool
variable - Performance estimation: Wrong warning: Assuming default number of iterations
Release 2022.01.a
Improvements
- Parallelization: Automatic scheduler avoids any schedules that causes slowdowns
- Parallelization: Functions with unsupported use of pointers are automatically clustered and will not be falsely parallelized
Bugfixes
- Fixed errors with libraries math.h and errno.h
- Fixed bugs related to incompatible types
- Compilation error caused by conflict between user-defined macros (e.g.
N
) and winnt.h - Fixed prompt for workspace selection at startup
Release 2022.01
New Features
- Added initial vectorization support for Aurix TC4xx PPU
- VectorizeTrafo: Added trafo for vectorizing a simple
for
loop into platform-independent vector code (alpha)- No check is performed that the vectorized code will be correct
- Unsupported constructs are not detected beforehand. Instead, an exception is thrown during application
- Supporting only simple array variable constructs of
a[i]
(i
is thefor
iterator variable) ora[j1]...[j2][i]
(j1 ... j2
must be loop invariant) - Supporting vectorization of reduction variables, e.g.
for (i=0; i<N; ++i) i += a[i];
- Supporting predicated vector instructions
- Supporting optional padding of array variables to eliminate predicated vector instructions
- TargetPlatform:
host_win32
supports code generation of platform-independent vector code by using a template-based library for vector types and functions - TargetPlatform: Added two “Aurix TC4xx Parallel Processing Unit” platforms with Tasking and Synopsys PPU compiler support
- Supporting simulator code generation with cycle-approximate performance measurement
- VectorizeTrafo: Added trafo for vectorizing a simple
Improvements
- Supporting
long double
in our libc math.h - Added ConstPropagationTrafo transformation for applying constant propagation to a function
- Improved replacement of inc/dec (e.g.
++
) and compound assign (e.g.+=
) operators- Supports correct handling of volatile variables
- Resolution within array/struct initializers was not working (e.g.
int i1[] = { x++ };
) - Resolution within variable initialization could switch the order of statements (e.g.
int i1 = x++; int i2 = x;
)
- Target platforms: Added
char16_t
andchar32_t
types and supporting macros - Improved support for running code on target platforms
- Documentation: Added section about CLI
- Documentation: Set Cygwin 64 bit as only supported version
- Added support for selecting the target compiler affecting the macros and types used to parse the source code
- Settings: Added compiler combo box into general settings
- TargetPlatform:
microarchitecture.xml
: AddedCompilers
section
- Switched to Eclipse 2021-09
- Improved switch-to-if converter
- Added initial support for designated array range initializers (
[first ... last] = value
) (see designated inits) - Added optional function de-duplication pass (can be activated in advanced settings)
- Preserving all function, variable and type declarations and their original order within C file
- Flow: Improved monitor output (warning/error display) and added subtasks
- Multiple performance improvements for large projects (e.g. performance estimation works well with 1 mio lines of code)
Bugfixes
- Invalid function arguments after parallelization
- Parallelized function returned result on wrong core
- Duplication of
for
loops with declarations generated incorrect code - Communication was not working with pointer variables
- Communication was placed after return statements
- Multiple transfers of same variable with same ID
- Fixed handling of large call trees
- Crash in SSATraversal caused by recursive functions with pointer parameters
- Memory leaks
- Avoiding “Too many arguments to function” warning for implicit functions
- Array size calculation of
array[ENUMERATOR]
is now working - COutput: -(-1) was output as –1
- Fixed analysis of for loops where the loop variable is modified before the for loop
- Pragmas outside of functions are preserved in the correct order
- Fixed output of forward-declared structs, unions and enums
- Merging two composite blocks could lead to two variables using the same name
Release 2021.09.a
New Features
- Added pass to use a preprocessor (e.g. gcc or clang) on C code before it is used in ePS
- Integrated AUTOSAR file parsing based on the Artop library
- Added calculation of confidence level for performance estimation
- Added support for a configuration file to add pragmas without changing the source code
Improvements
- Added basic support for:
- function pointers
- recursive functions
- designated array initializers
- designated struct/union initializers
- compound assignment operators
- C11 style anonymous enum/struct/union definitions embedded in other type definitions
- incomplete data types (according to C standard)
- Separated settings for sequential and parallel platform tests
- Added new functionalities to CLI:
- Configuration of projects
- Control over passes to run
- Improved traceability of input to output source code lines
- Added generation of log files for each pass that capture all output from the console
- Project files are now stored compressed to save space
- Reworked the status messages of the flow
- Improved profile-guided execution counts of for loops
- Added more information to properties view of HTG representation
- Switched file structure for parallelization constraints to reduce the number of required entries
- Added Infineon TC387 platform
- Made the analysis for transformations more robust
Bugfixes
- Crash for arguments with pointer case (e.g. (void*) arg)
- Crash with function calls used in variable initialization
- Assertion caused by repeated function declarations in one translation unit
- Various conflicting types errors
- Wrong placement of global variables
- Typedef redefinition was always reported as error
- Function declaration and implementation of different but compatible function types caused errors
- Fixed several issues with files not being closed correctly in the GUI
- Fixed error in size calculation in recursive structs
- Propagation of absolute number of executions over function calls
- Errors in duplication of function calls
- Detection of recursive function calls in unused functions
- Type deduction was wrong in many cases (e.g.
enum
,++
) - void-cast of function call caused incorrect code
- Removed automic inclusion of System32 folder in path on Windows
- Fixed bug with PATH variable on Windows
- Fixed path separation on Linux
- Wrong messages about assignments to constant variables
- Fixed layout of advanced settings page
- Renamed _emx_main.c to _emx_t_main.c to avoid conflicts with sources named main.c
- Functions called via function pointers/references were considered unused
Release 2021.06
- Added line information for warning “Variable is defined externally”
- Code generation: Added supported for generating inline assembler
- ConsistencyChecker: Introduced different levels of strictness and added corresponding project setting
- DepChainAnalysis: Added reason to warning if a function could not be analyzed
- Frontend / Model / Code generation: Supporting switch case expressions to contain generic instructions (e.g. enumerators) instead of just integers
- Frontend: Added support for inline assembler
- Frontend: Handling of null statements improved (especially if labeled or within empty body blocks) HTG: Adding task clusters for goto instructions
- Hardware support: Added the optimized ringbuffer communication models ringbuf_fixed_fork (the new default) and ringbuf_fixed_thread based on the existing Aurix optimized ringbuffer implementation
- Hardware support: Implemented new communication API:EMXAPI prefix replaced with EMX, Added functions to send and receive float and double types, Values to be sent/received by scalar communication functions are now passed by value and as the return value, Argument order changed so that the first four arguments of all functions are: src, dst, id and index, followed by value/buffer arguments when present
- Hardware support: Renamed communication model names ringbuf->ringbuf_fork and singlecopy_sharedmem->ringbuf_thread
- Product: Updated provided JRE on linux to 11.0.11
- Wizard: Added communication test example project
- Bugfix: Custom paths were not considered for executing external tools
- Bugfix: DepChainAnalysis: Fixed crash if a function was not duplicated
- Bugfix: ExtractMain transformation: Converting function to main was not working if the calling function was not main
- Bugfix: Fixed handling of the size of alias types
- Bugfix: Fixed some problems related to BasicBlock file locations
- Bugfix: Frontend / Code Generation: Handling of case blocks with { } was not working
- Bugfix: Frontend: Correct placement of pragmas in front of labels
- Bugfix: GUI: Re-initialize compiler defaults when project settings is changed
- Bugfix: SSA: Crash in SSATraversal caused by incorrect usedef detection of parameters
Release 2021.03a
- Code generation: Template processing is deleting template files directly after processing
- DepChainAnalysis: Added XML output (depchainanalysis.xml)
- DepChainAnalysis: Bugfix: Function calls with unused return value were broken
- Flow: Introduced source template processing of .ftl and .twig files. An option was added in general settings to enable that feature.
- GUI: Source template GUI option now also added for non-C inputs and defaults to disabled
- Performance estimation: Refactored BBDurationProvider and BBDurationEstimator
- Performance estimation: Refactored procedure call overhead
- Settings: Improved handling of false root procedures
- Supporting EMX_EXTRACTMAIN pragma to trigger extract main transformation. The extract main trafo uses the pragma to apply the transformation after all other transformations.
- Template processing: Introduced generic project-based variables
- Trafo: Added loop interchange transformation
- Bugfix: C Frontend: Pragma placement
- Bugfix: Crash in case of unary operator within while condition
- Bugfix: Exception caused by loop analyzer in case of reverse “for” loop
- Bugfix: Fixed several GUI and flow errors
- Bugfix: ParallelPostCodeGen: Fixed check for empty source folders list
- Bugfix: Parameters no longer removed from function without body
- Bugfix: Project wizard stored wrong String in .properties for InputLanguage
- Bugfix: TargetPlatform: GUI was broken in case a software platform was missing
Release 2021.03
- Added GUI mechanism to insert timing instructions around functions and at blocks marked with pragmas
- Bugfix: CDT Frontend: Variable declaration in the middle could produce wrong code
- Bugfix: Dangling exception with AliasType
- Bugfix: GUI: Project wizard was broken for empty workspaces
- Bugfix: GUI: the presence of a file without extension inside the ECG output folder caused an exception in C2MMapper
- Bugfix: HTG: Crash caused by a too deep HTG
- Bugfix: Indirection (dereference) as function call argument
- Bugfix: PaddingPragmaHandler: EMX_PADDING pragma is working across function boundaries
- Bugfix: Parallel Code Generation: Return assignment check failed for non-duplicated functions
- Bugfix: Remove unused functions setting was broken
- Bugfix: Scheduler: Root function forcibly clustered due to multiple returns are handled correctly
- Bugfix: Scheduler: exception caused by main function with multiple return statements
- Bugfix: Size deduction from variable initialization was broken for global variables
- Bugfix: The analysis failed in case a variable was available only as an external declaration. A warning is now issued in that case.
- Bugfix: incorrect view when switching between input languages
- DepChainAnalysis: Improved dependency chain analysis to take repeating function calls into account and added delay suffix for each dependency
- DepChainAnalysis: Supporting analysis of function calls
- DepChainAnalysis: Supporting control dependency calculation
- DepChainAnalysis: Supporting functions with return parameters
- Eclipse: Switched to version 2021.03
- Flow view: removed unnecessary methods for button state restores
- Flow: Introduced lambda-based CallNormalizer that reimplements the old functionality to move every call into its own basic block
- Flow: Output of eMCG is now stored in generated_files
- Frontend: Added C correctness checks
- GUI: Added button to generate transformed code
- GUI: Added indicator of execution frequency to block representation in HTG view
- GUI: Added tab in properties view for displaying source code
- GUI: Anti and output dependencies are not rendered if they are between tasks on different cores
- GUI: Children of blocks are scaled to make sure they fit into the parent
- GUI: HTG and Scheduler view: Added support for bringing up the context menu using the keyboard
- GUI: HTG and Scheduler view: Fixed a bug that caused invalid behavior when focus was lost during mouse drag
- GUI: HTG and Scheduler view: Made selection behavior more consistent with standard windows selection behavior
- GUI: HTG: Changing ecg_decisions.ini file only if the content changed. That prevents unnecessary eCG runs.
- GUI: The length of THEN/ELSE blocks is scaled according to their execution frequency
- GeCoS: Deleted several unused classes
- ParallelCodeGeneration: Leaving non-parallelized functions unchanged
- ParallelCodeGeneration: Removed user includes from _emx_main.h
- Performance estimation: Brought back execution frequency assumptions in case code cannot be analyzed
- Performance estimation: Changed perf test platform to aurix_tc397_kit
- Performance estimation: Improved LLVM profiling provider to handle nested control constructs and while loops
- Settings: Added setting to disable consistency checking
- Settings: Moved host profiling settings from advanced to general
- Settings: Supporting <Makefile> placeholder in compile command settings that is replaced by Makefile or Makefile.gen (whatever exists)
- Supporting
#pragma EMX_PADDING <pad>
pragma to increase the size of the last dimension of an array to a multiple ofpad
- TargetPlatform: Supporting run command specification in software platform (e.g.
<Run command="make sim"/>
) - TargetPlatform: Supporting specification of compile settings in software platform
- TargetPlatform: Used software platform description for parallel testing
- Templates: Added EMXAPI_SyncCores and EMXAPI_GetCore API functions
- Templates: Converted timing template to use FTL instead of macros
- Trafo: Added ExtractMain transformation
- Trafo: Added ObfuscationTrafo to make identifiers obscure
- Trafo: Added function inline transformation
Release 2020.12
- Added Apache FreeMarker (.ftl file extension) as additional template language
- Flow GUI: Parsing the C source code is now a pass
- Switched to Eclipse-2020-09
- HTG and properties view: Displaying call overhead
- Scheduler / Performance estimation: Refactored procedure call overhead calculation/handling
- GUI: refactored eCG and ePS view to use same base
- AURIX: Implemented high-performance communication library using statically determined absolute addresses
- AURIX: Added new combined template for TC297 and TC397
- Parallel Code Generation: Implement feature to convert functions to static (Parallelization settings, activated by default)
- Performance estimation: Reworked calculation of call overhead
- Added post-placement communication optimization by moving send as early and recv as late as possible (Advanced setting, deactived by default)
- Most important bug fixes:
- Bugfix: Return type of parallelized functions
- Bugfix: Pragma-controlled clustering (
EMX_TASK_CLUSTER
) of tasks was broken - Bugfix:
EMX_TASK_ALLOC
pragmas appeared in generated code - Bugfix: Linux: Issue with short task names on task termination
- Bugfix: Preserving static keyword and name of static global variables
- Bugfix: Fixed support for
EMX_INITCODE
pragma
Release 2020.06
- emmtrix project wizard now can import multiple C files
- Fixed handling of C projects without main function
- Introduced new indicators for status of passes
- Reworked handling of compiler settings
- Switched to internal pass infrastructure
- Switched to Eclipse version 2020-03
- Switched from Jasva 8 to Java 11
- Bugfix: CDTFrontend crashed for “for (;;) {}” loops [TS]
- TargetPlatform: Added support for additional function information (funcinfo.xml)
- Bugfix: Fixed template of MBA5728
- Added option to disable removal of unsused functions
- Added option to disable reordering of tasks
- Added option to parse of C files in eCG output folder
- Bugfix: Fixed generation of functions with simple declarations
- Removed enforced option “-B” for sequential tests
- Added handling of include directories
- Added button to parse C code in C projects
- Fixed various bugs
Release 2019.11.07
- Fixed definition of custom paths
- Several bug fixes regarding global variables
- Several bug fixes regarding parameters of parallelized functions
- Improved generation of OpenCL code
- Improved handling of static keyword
- Fixed bug in analysis of data dependencies
- Several other minor bug fixes
Release 2019.03.20
- Support for array of structs in emmtrix Code Generator
- Various improvements for data type selection in eCG
- Fixed bug that might cause parallel execution of passes within ePS
- Added option to set C macros for C workflow
- Improved error messages from CDTFrontend
- Redesigned SSH password and confirmation dialog
- Fixed various bugs related to C code input
Release 2018.08.09
- Support for Linux. We have tested it under Xubuntu 18.04. Since it is the first version for Linux, additional bugs compared to Windows cannot be excluded.
- Customization of the target platform: a target folder is automatically generated in the project folder, in which the various files for the target platform are located. Here e.g. timings for library functions can be stored. More details can be found in the ePS User Guide (just click on Parallel Studio Help in the tool).
- Support for software templates: in the generated subfolder “template” files can be stored that are to be used for building the parallel code. In addition, existing files can be customized for specific projects and templates can be filled in dynamically using Jtwig (http://jtwig.org/). Again, more details can be found in the ePS User-Guide
- Improved C support: processing of generic C code (e.g. with structs and switch cases) has been improved
- Static performance analysis has been reworked. Estimated times from previous versions may differ especially in nested structures. With the new method, it is no longer necessary that the input code is executed on the host system. Instead, all values are calculated as far as possible and otherwise populated with default values.
Release 2017.07.04
- Restructured settings
- Removed option of eCG to mimic the output of MATLAB
- Integrated automatic consistency checker into the flow
- Model consistency
- Order consistency
- Schedule checker (times, containment, order)
- Unified video interfaces across all platforms
- Switched to Eclipse Oxygen
- Removed support for GeCoS scripts
- Improved sequential testing for C flow
- Simplified support of parallelization of functions with pointer parameters
- Fixed scheduler crash with function prototypes that omit parameter names
- Updated instruction performance for Cortex-A7 and Cortex-A15 on ODROID XU4
- Fixed a bug that could cause the tabular communication cost model to assign transfer costs for same-core transfers
- Fixed a bug that prevented to correctly derive a tabular communication cost models when multiple commtable files where present for the same target platform (affected heterogeneous architectures only)
- Analysis results are integrated into a node’s property view
- Fixed support for emx_task_alloc and emx_task_cluster pragmas: pragmas now take precedence over allocation made in the GUI or via the constraint settings JSON file
- Various fixes and improvements regarding user decisions
- Fixed a bug that would cause user decisions that were not changed in the current session to be removed from ecg_decisions.ini upon save of the file
- corrected calculation of start and finish times of for loops
- Fixed display of loops that are mapped to multiple cores
Release 2017.03.23
- Added Simulink Model Viewer, which currently supports:
- display of top level of model
- descend to sub block by double clicking on block
- block hover and selection
- history: Back/Forward/Home to model root
- zoom: 0,25 - 2.00 using toolbar or mouse wheel
- Support Simulink models
- HLS: Added synchronization for FPGA accelerators
- Fixed receive of pipe communication
- Enabled basic testing of C code in the C based flow
- Improved error handling when accessing projects/settings
- HLS: Added software interface generation for custom IP
- HLS: Added IP insertion into template Vivado project and bitstream generation
- HLS: Improved error handling and reporting
- Added video support for FriendlyARM NanoPi M3
- UnifyParameters now adds names to all unnamed function parameters
- Improved upgrade capabilities of project wizard
- automatic deletion of old epsproject and properties files
- generation of new epsproject and properties files
- Added Properties view to eCG and ePS perspective
- Added pass to place the eCG decision pragmas at parent blocks
- Improved error handling of update decision job
- Improved error handling of script execution
Release 2017.03.08
- Added support for Aurix FreeRTOS template and compiler script
- Added support for individual compiler settings for sequential, parallel and platform tests. These include:
- pre-/post-build bash script execution
- customization of CFLAG and LDFLAG
- customization of environment variables
- Improved support for handling of external files
- Improved support of __cplusplus define
- Added platform description for NanoPI M3 (S5P6818 Quad-Core Cortex-A53 1.4 GHz)
- Added platform description attribute “active” that determines whether a description is loaded/an available target platform
- HLS: improved the result checker to ensure compatability with Vivado HLS
- HLS: improved error checking of synthesis progress
- HLS: code refactoring and miscellaneous minor fixes
- Scheduler View: set minimal width of blocks to one pixel to improve placement of data dependencies
- Scheduler View: removed gaps beetween adjacent blocks to better reflect the blocks’ actual runtime
- Scheduler View: block selection markers are now drawn after blocks, so that they may not be overlapped by adjacent blocks anymore
- HTG View: moved information about from right pane to the properties view
- HTG View: added button to show the property view
Release 2016.27.01
- emmtrix Technologies GmbH was founded