The following guide assumes that you have opened SLX.cloud by clicking one of the following links to open up a workspace:
workshop_xlp - Hello World Example
matrix_mult - Simple Demo showing speedup on Matrix Multiplication
HOG-demo - Real World Example showing the speedup of the HOG algorithm (sequential algorithm implementation provided by Institut für Mikroelektronische Systeme, Leibniz Universität Hannover)
On the left side is a brief video to show the main features of SLX buttons. You could go through the SLX buttons part for more infirmation. You can register on the right side for SLX.cloud either via your Google, Github or LinkedIn Account or providing your email address. If you register using your email, no password will be assigned by default. You can update your password within the Dashboard or later on by resetting it using the Reset your password link.
Creating a Workspace
If you used one of the links above - a so called factory - your workspace with the right tooling is created automatically. If you would like to set up a workspace manually, please refer to Workspaces.
Loading a demo application
The factory links above will open a workspace with the respective project already set up, so you can start exploring the the demonstration right away. Projects are loaded from Git, Github or SVN repositories. Alternatively you can upload a project as a ZIP file. For more details see projects and import a project.
Overview of the SLX.cloud IDE
The main elements of the SLX.cloud IDE interface are displayed above. Similar to Desktop IDEs, you will find the Project (or File) Explorer on the left side, the main Code editor in the center and the Results View on the bottom of the interface. On top you will find the Menu bar and below the Toolbar with the most important functions. All relevant functions discussed in this guide are found in the Toolbar with an individual button.
The SLX buttons
Notice: The SLX.cloud IDE Editor is based on Eclipse Orion and saves your changes automatically, therefore you won’t find a save button on the toolbar.
Within the toolbar, you will find 5 buttons for every stage of the Analyze Phase of the SLX.cloud tools. The Stages are Run application, Clean Project, Trace Source, Open Call Graph, Find Parallelism and OpenMP Code Generation. Next to it, you will find a button to open a Call Graph, visualizing the dynamic call graph of the application.
|Run application||Compiles and runs the demo project or your application based on the current configuration. This step is optional but recommended.|
|Clean Project||Removes all auto-generated files from your project folder.|
|Trace Source||Compiles and executes an instrumented version of the application. This is obtains detailed information for the application, such as the execution paths and accesses to variables and memory. Trace Files are generated in your project folder.|
|Open Call Graph||Visualize the dynamic call graph of the application.|
|Code Analysis Graph||Gives a powerful overview of variables and the functions accessing them.|
|Code Analysis View||Gives the detailed information on usage of variables during the execution of the application.|
|Find Parallelism||Runs the partitioning algorithms of the SLX.cloud tools for allocating code into parallel tasks. For more information on the underlying technology, please refer to our advanced guide|
|OpenMP Code Generation||Runs the source-to-source code rewriter to automatically insert OpenMP (Open Multi-Processing) pragmas to your application. The rewritten files are located under
The project files
Information generated by the SLX.cloud tools is saved within the project in different folders. For demo projects, the
spec folder is present from the beginning, including the source code of the demo application and the
defines.mk file. The
defines.mk file specifies configuration parameters for the SLX.cloud tools, like the target platform and analysis options.
Run Sequential Code
We can now run the sequential code on the host machine. Click on the button Run Sequential Code. This will build and run the sequential application and show you the output in the console.
The Clean Project command will delete all generated files for the current project.
Tracing the source application is the process of building and running the instrumented executable. This produces a dynamic binary trace where detailed information, on actions that took place during execution, has been recorded. To trace the sequential C/C++ application, click on the button Trace Source. This will initiate the Trace Source stage.
Once the Trace Source function is finished the Open Call Graph button is enabled. This button presents you with an interactive view of the dynamic call graph of the program.
Once the Trace Source stage has completed on the imported C/C++ application, the dynamic call graph can be shown. Click on the Open Call Graph button to open the SLX Call Graph Diagram.
Depending on the number of functions and the connectivity of the Call Graph, it might become cumbersome to visualize the Call Graph in its entirety in a single view.
To navigate the dynamic call graph with ease, you can utilize the Overview mode which can be selected in the top right corner; or use the Mouse Wheel to zoom in and out.
It is easy to get specific information on call graph nodes (representing functions) and edges (representing function calls) by a mouse hover over the selected items. For a function apart from the information already shown in the Call Graph, a pop-up message gives the ideal application speedup that can be obtained for this function if it could be made fully parallel (i.e. contains no sequential parts). On the right side of each node, you can also get all the related threads with different colors.
Code Analysis Graph
The Code Analysis Graph is our most advanced visualization feature, giving you a powerful overview of variables and the functions accessing them. By showing global variables and the functions accessing them, you can check you code for data races. Connections between nodes and functions represent lines within your code which use the respective variable.
Code Analysis View
The Code Analysis View gives you multiple options to analyze variable and cache usage in your application. It allows listing of variable accesses, listing of variables by lines of code in which they are used and advanced cache analytics, showing cache hits and misses. If you have a threaded application, it will also show which thread accesses which variable.
Next, we will run Find Parallelism on the sequential C/C++ application. This process will use sophisticated partitioning algorithms in order to extract parallelism (TLP, DLP, PLP and perform offloading analysis) from the application. The partitioning process will also consider certain aspects of the target platform such as the number of available cores and the presence of accelerator cores. To proceed, click on the button Find parallelism. This will start the Find parallelism stage for the application. Note that, depending on the application, this may take a few seconds to 5 minutes, or more.
After this process is completed, useful information has been extracted from the application, including parallelization hints (for TLP, DLP, PLP forms of parallelism) and source-level highlighting of selected partitions. This information is presented to you conveniently, as pop-up information boxes in the source file editor in the GUI.
After running Find Parallelism, a number of parallelization hints will be generated. To see these hints, use the source file editor by opening the source code file(s). The file(s) can be selected by exploring in the Navigator tab (left).
Generate OpenMP Code
Next, we will run OpenMP Code Generation for the sequential C/C++ application. Its function is to run a source-to-source code rewriter that will automatically insert OpenMP (Open Multi-Processing) pragmas to your application. These are generated based on the parallelization hints for the application. This feature produces a rewritten version of the application source as under the
output/codegen/openmp subfolder of the project. The generation of the OpenMP-annotated version of the code causes the focus in the graphical environment to move to the OpenMP-annotated version of the code.