Help is available by moving the cursor above any symbol or by checking MAQAO website.
[ 0 / 9 ] Compilation options are not available
Compilation options are an important optimization leverage but ONE-View is not able to analyze them.
[ 4 / 4 ] Application profile is long enough (82.4 s)
To have good quality measurements, it is advised that the application profiling time is greater than 10 seconds.
[ 2 / 2 ] Application is correctly profiled ("Others" category represents 1.02 % of the execution time)
To have a representative profiling, it is advised that the category "Others" represents less than 20% of the execution time in order to analyze as much as possible of the user code
[ 4 / 4 ] Enough time of the experiment time spent in analyzed loops (98.24%)
If the time spent in analyzed loops is less than 30%, standard loop optimizations will have a limited impact on application performances.
[ 4 / 4 ] Loop profile is not flat
At least one loop coverage is greater than 4% (68.28%), representing an hotspot for the application
[ 4 / 4 ] Enough time of the experiment time spent in analyzed innermost loops (93.39%)
If the time spent in analyzed innermost loops is less than 15%, standard innermost loop optimizations such as vectorisation will have a limited impact on application performances.
[ 3 / 3 ] Less than 10% (0%) is spend in BLAS1 operations
It could be more efficient to inline by hand BLAS1 operations
[ 3 / 3 ] Cumulative Outermost/In between loops coverage (4.85%) lower than cumulative innermost loop coverage (93.39%)
Having cumulative Outermost/In between loops coverage greater than cumulative innermost loop coverage will make loop optimization more complex
[ 2 / 2 ] Less than 10% (1.12%) is spend in Libm/SVML (special functions)
[ 2 / 2 ] Less than 10% (0%) is spend in BLAS2 operations
BLAS2 calls usually could make a poor cache usage and could benefit from inlining.
Loop ID | Module | Analysis | Penalty Score | Coverage (%) | Vectorization Ratio (%) | Vector Length Use (%) |
---|---|---|---|---|---|---|
►401 | libqmckl.so.0 | Inefficient vectorization. | 24 | 68.28 | 100 | 100 |
○ | [SA] Inefficient vectorization: more than 10% of the vector loads instructions are unaligned - When allocating arrays, don’t forget to align them. There are 10 issues ( = arrays) costing 2 points each | 20 | ||||
○ | [SA] Less than 10% of the FP ADD/SUB/MUL arithmetic operations are performed using FMA - Reorganize arithmetic expressions to exhibit potential for FMA. This issue costs 4 points. | 4 | ||||
○ | [DA] The ratio FP/LS (floating point / memory accesses) is smaller than 0.8 (0.34) - Focus on optimizing data accesses. | 0 | ||||
►367 | libqmckl.so.0 | Inefficient vectorization. | 4 | 16.08 | 100 | 100 |
○ | [SA] Less than 10% of the FP ADD/SUB/MUL arithmetic operations are performed using FMA - Reorganize arithmetic expressions to exhibit potential for FMA. This issue costs 4 points. | 4 | ||||
○ | [DA] The ratio FP/LS (floating point / memory accesses) is smaller than 0.8 (0.29) - Focus on optimizing data accesses. | 0 | ||||
►406 | libqmckl.so.0 | Inefficient vectorization. | 24 | 1.89 | 100 | 100 |
○ | [DA] Ratio time (ORIG)/time (DL1) is greater than 3 (7.45) - Perform blocking. Perform array restructuring. There are 8 issues (= non unit stride or indirect memory access) costing 2 point each, with an additional malus of 8 points due to the ORIG/DL1 ratio. | 24 | ||||
○ | [DA] The ratio FP/LS (floating point / memory accesses) is smaller than 0.8 (0.01) - Focus on optimizing data accesses. | 0 | ||||
►403 | libqmckl.so.0 | Partial or unexisting vectorization - Use pragma to force vectorization and check potential dependencies between array access. | 3 | 1.66 | 0 | 25 |
○ | [SA] Several paths (3 paths) - Simplify control structure or force the compiler to use masked instructions. There are 3 issues ( = paths) costing 1 point each. | 3 | ||||
►37 | libqmckl.so.0 | Partial or unexisting vectorization - Use pragma to force vectorization and check potential dependencies between array access. | 305 | 1.33 | 25.38 | 37.21 |
○ | [SA] Too many paths (299 paths) - Simplify control structure. There are 299 issues ( = paths) costing 1 point each with a malus of 4 points. | 303 | ||||
○ | [SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points. | 2 | ||||
○ | Warning! Some static analysis are missing because the loop has too many paths. Use a higher value for --maximal_path_number option. | 0 | ||||
►397 | libqmckl.so.0 | Inefficient vectorization. | 16 | 1.27 | 100 | 100 |
○ | [SA] Inefficient vectorization: more than 10% of the vector loads instructions are unaligned - When allocating arrays, don’t forget to align them. There are 6 issues ( = arrays) costing 2 points each | 12 | ||||
○ | [SA] Less than 10% of the FP ADD/SUB/MUL arithmetic operations are performed using FMA - Reorganize arithmetic expressions to exhibit potential for FMA. This issue costs 4 points. | 4 | ||||
○ | [DA] The ratio FP/LS (floating point / memory accesses) is smaller than 0.8 (0.16) - Focus on optimizing data accesses. | 0 | ||||
►36 | libqmckl.so.0 | Partial or unexisting vectorization - Use pragma to force vectorization and check potential dependencies between array access. | 1002 | 1.22 | 25.94 | 39.27 |
○ | [SA] Too many paths (at least 1000 paths) - Simplify control structure. There are at least 1000 issues ( = paths) costing 1 point. | 1000 | ||||
○ | [SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points. | 2 | ||||
○ | Warning! Some static analysis are missing because the loop has too many paths. Use a higher value for --maximal_path_number option. | 0 | ||||
►369 | libqmckl.so.0 | Partial or unexisting vectorization - Use pragma to force vectorization and check potential dependencies between array access. | 13 | 0.89 | 0 | 25 |
○ | [SA] Too many paths (9 paths) - Simplify control structure. There are 9 issues ( = paths) costing 1 point each with a malus of 4 points. | 13 | ||||
○ | Warning! Some static analysis are missing because the loop has too many paths. Use a higher value for --maximal_path_number option. | 0 | ||||
►399 | libqmckl.so.0 | Partial or unexisting vectorization - Use pragma to force vectorization and check potential dependencies between array access. | 24 | 0.75 | 21.33 | 40.92 |
○ | [SA] Too many paths (18 paths) - Simplify control structure. There are 18 issues ( = paths) costing 1 point each with a malus of 4 points. | 22 | ||||
○ | [SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points. | 2 | ||||
○ | Warning! Some static analysis are missing because the loop has too many paths. Use a higher value for --maximal_path_number option. | 0 | ||||
►107 | libqmckl.so.0 | Partial or unexisting vectorization - Use pragma to force vectorization and check potential dependencies between array access. | 1002 | 0.73 | 25.8 | 38.84 |
○ | [SA] Too many paths (at least 1000 paths) - Simplify control structure. There are at least 1000 issues ( = paths) costing 1 point. | 1000 | ||||
○ | [SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points. | 2 | ||||
○ | Warning! Some static analysis are missing because the loop has too many paths. Use a higher value for --maximal_path_number option. | 0 |