emmtrix
Parallel Studio
(ePS)

Release Notes

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 to while 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
  • 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 and template folders

Improvements

  • Template processing: Added variables C_FILES_PROCESSED, C_FILES_ADDITIONAL and C_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 and va_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 file
    • none or no attribute is ignoring the file
    • compile is copying and compiling the file to output folder
    • copy is only copying the file to output folder
    • process 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++ preprocessor
    • codegen=[eCG|eCPP2C]: Code generation is applied to the source file
    • eCG runs emmtrix Code Generator on the MATLAB or Scilab file
    • eCPP2C 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

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 and netdb.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 the for iterator variable) or a[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

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 and char32_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: Added Compilers 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 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 of pad
  • 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

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 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 of pad
      • 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 file
                    • 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

                    For more information on emmtrix Parallel Studio or to request a demo, use our contact form or get directly in touch. You may also make a Product Evaluation Request and/or a Project RequestWe’re looking forward to hearing from you!

                    Portrait Rainer Heim

                    Rainer Heim

                    Cookie Consent with Real Cookie Banner