options

exec - 2025-09-30 20:17:21 - MAQAO 2025.1.2

Help is available by moving the cursor above any symbol or by checking MAQAO website.

  • run_0
  • run_1
  • run_2
  • run_3
  • run_4
  • run_5
  • run_6
  • run_7

Stylizer  

[ 4 / 4 ] Application profile is long enough (17.82 s)

To have good quality measurements, it is advised that the application profiling time is greater than 10 seconds.

[ 2.05 / 3 ] Most of time spent in analyzed modules comes from functions without compilation information

Functions without compilation information (typically not compiled with -g and -grecord-gcc-switches) cumulate 31.75% of the time spent in analyzed modules. Check that -g and -grecord-gcc-switches are present. Remark: if -g and -grecord-gcc-switches are indeed used, this can also be due to some compiler built-in functions (typically math) or statically linked libraries. This warning can be ignored in that case.

[ 3 / 3 ] Optimization level option is correctly used

[ 3 / 3 ] Host configuration allows retrieval of all necessary metrics.

[ 0 / 3 ] Compilation of some functions is not optimized for the target processor

Application run on the GRANITE_RAPIDS micro-architecture while the code was specialized for graniterapids. Architecture specific options are needed to produce efficient code for a specific processor ( -x(target) or -ax(target) ).

[ 2 / 2 ] Application is correctly profiled ("Others" category represents 0.00 % 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

[ 1 / 1 ] Lstopo present. The Topology lstopo report will be generated.

Strategizer  

[ 0 / 4 ] Too little time of the experiment time spent in analyzed loops (23.16%)

If the time spent in analyzed loops is less than 30%, standard loop optimizations will have a limited impact on application performances.

[ 1 / 4 ] A significant amount of threads are idle (51.26%)

On average, more than 10% of observed threads are idle. Such threads are probably IO/sync waiting. Some hints: use faster filesystems to read/write data, improve parallel load balancing and/or scheduling.

[ 4 / 4 ] CPU activity is good

CPU cores are active 96.33% of time

[ 4 / 4 ] Loop profile is not flat

At least one loop coverage is greater than 4% (22.71%), representing an hotspot for the application

[ 4 / 4 ] Enough time of the experiment time spent in analyzed innermost loops (23.00%)

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.

[ 4 / 4 ] Affinity is good (97.86%)

Threads are not migrating to CPU cores: probably successfully pinned

[ 3 / 3 ] Less than 10% (0.00%) is spend in BLAS1 operations

It could be more efficient to inline by hand BLAS1 operations

[ 0 / 3 ] Too many functions do not use all threads

Functions running on a reduced number of threads (typically sequential code) cover at least 10% of application walltime (41.40%). Check both "Max Inclusive Time Over Threads" and "Nb Threads" in Functions or Loops tabs and consider parallelizing sequential regions or improving parallelization of regions running on a reduced number of threads

[ 3 / 3 ] Cumulative Outermost/In between loops coverage (0.15%) lower than cumulative innermost loop coverage (23.00%)

Having cumulative Outermost/In between loops coverage greater than cumulative innermost loop coverage will make loop optimization more complex

[ 2 / 2 ] Less than 10% (0.00%) is spend in BLAS2 operations

BLAS2 calls usually could make a poor cache usage and could benefit from inlining.

[ 2 / 2 ] Less than 10% (0.10%) is spend in Libm/SVML (special functions)

Optimizer

Loop IDAnalysisPenalty Score
Loop 548 - libggml-cpu.soExecution Time: 22 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Loop 713 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Control Flow Issues+2
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Vectorization Roadblocks+1002
[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
Loop 1232 - libggml-cpu.soExecution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Loop 2304 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Control Flow Issues+2
[SA] Several paths (2 paths) - Simplify control structure or force the compiler to use masked instructions. There are 2 issues ( = paths) costing 1 point each.2
Vectorization Roadblocks+2
[SA] Several paths (2 paths) - Simplify control structure or force the compiler to use masked instructions. There are 2 issues ( = paths) costing 1 point each.2
Loop 2015 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 6.25 %
Loop Computation Issues+20
[SA] Presence of expensive FP instructions - Perform hoisting, change algorithm, use SVML or proper numerical library or perform value profiling (count the number of distinct input values). There are 4 issues (= instructions) costing 4 points each.16
[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
Control Flow Issues+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Data Access Issues+2
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Loop 2294 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 18.59 % - Vector Length Use: 12.30 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Control Flow Issues+1003
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (4213 paths) - Simplify control structure. There are 4213 issues ( = paths) costing 1 point, limited to 1000.1000
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Data Access Issues+14
[SA] Presence of special instructions executing on a single port (BROADCAST) - Simplify data access and try to get stride 1 access. There are 12 issues (= instructions) costing 1 point each.12
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1003
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (4213 paths) - Simplify control structure. There are 4213 issues ( = paths) costing 1 point, limited to 1000.1000
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Inefficient Vectorization+12
[SA] Presence of special instructions executing on a single port (BROADCAST) - Simplify data access and try to get stride 1 access. There are 12 issues (= instructions) costing 1 point each.12
Loop 399 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 90.91 % - Vector Length Use: 38.76 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Data Access Issues+68
[SA] Presence of constant non unit stride data access - Use array restructuring, perform loop interchange or use gather instructions to lower a bit the cost. There are 9 issues ( = data accesses) costing 2 point each.18
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, BLEND/MERGE, SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 48 issues (= instructions) costing 1 point each.48
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+18
[SA] Presence of constant non unit stride data access - Use array restructuring, perform loop interchange or use gather instructions to lower a bit the cost. There are 9 issues ( = data accesses) costing 2 point each.18
Inefficient Vectorization+48
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, BLEND/MERGE, SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 48 issues (= instructions) costing 1 point each.48
Loop 117 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 9.58 %
Control Flow Issues+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Data Access Issues+2
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1001
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (at least 1000 paths) - Simplify control structure. There are at least 1000 issues ( = paths) costing 1 point.1000
Loop 3150 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 60.70 % - Vector Length Use: 29.66 %
Loop Computation Issues+4
[SA] Presence of expensive FP instructions - Perform hoisting, change algorithm, use SVML or proper numerical library or perform value profiling (count the number of distinct input values). There are 1 issues (= instructions) costing 4 points each.4
Control Flow Issues+3
[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
Data Access Issues+5
[SA] Inefficient vectorization: more than 10% of the vector loads instructions are unaligned - When allocating arrays, don’t forget to align them. There are 0 issues ( = arrays) costing 2 points each0
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, SHUFFLE/PERM, BROADCAST) - Simplify data access and try to get stride 1 access. There are 5 issues (= instructions) costing 1 point each.5
Vectorization Roadblocks+3
[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
Inefficient Vectorization+5
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, SHUFFLE/PERM, BROADCAST) - Simplify data access and try to get stride 1 access. There are 5 issues (= instructions) costing 1 point each.5
Loop 2292 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 6.25 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Data Access Issues+4
[SA] Presence of indirect accesses - Use array restructuring or gather instructions to lower the cost. There are 1 issues ( = indirect data accesses) costing 4 point each.4
Vectorization Roadblocks+4
[SA] Presence of indirect accesses - Use array restructuring or gather instructions to lower the cost. There are 1 issues ( = indirect data accesses) costing 4 point each.4

Stylizer  

[ 4 / 4 ] Application profile is long enough (17.41 s)

To have good quality measurements, it is advised that the application profiling time is greater than 10 seconds.

[ 2.25 / 3 ] Most of time spent in analyzed modules comes from functions without compilation information

Functions without compilation information (typically not compiled with -g and -grecord-gcc-switches) cumulate 25.00% of the time spent in analyzed modules. Check that -g and -grecord-gcc-switches are present. Remark: if -g and -grecord-gcc-switches are indeed used, this can also be due to some compiler built-in functions (typically math) or statically linked libraries. This warning can be ignored in that case.

[ 3 / 3 ] Optimization level option is correctly used

[ 3 / 3 ] Host configuration allows retrieval of all necessary metrics.

[ 0 / 3 ] Compilation of some functions is not optimized for the target processor

Application run on the GRANITE_RAPIDS micro-architecture while the code was specialized for graniterapids. Architecture specific options are needed to produce efficient code for a specific processor ( -x(target) or -ax(target) ).

[ 2 / 2 ] Application is correctly profiled ("Others" category represents 0.00 % 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

[ 1 / 1 ] Lstopo present. The Topology lstopo report will be generated.

Strategizer  

[ 0 / 4 ] Too little time of the experiment time spent in analyzed loops (23.84%)

If the time spent in analyzed loops is less than 30%, standard loop optimizations will have a limited impact on application performances.

[ 1 / 4 ] A significant amount of threads are idle (51.37%)

On average, more than 10% of observed threads are idle. Such threads are probably IO/sync waiting. Some hints: use faster filesystems to read/write data, improve parallel load balancing and/or scheduling.

[ 4 / 4 ] CPU activity is good

CPU cores are active 96.25% of time

[ 4 / 4 ] Loop profile is not flat

At least one loop coverage is greater than 4% (23.32%), representing an hotspot for the application

[ 4 / 4 ] Enough time of the experiment time spent in analyzed innermost loops (23.68%)

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.

[ 4 / 4 ] Affinity is good (97.34%)

Threads are not migrating to CPU cores: probably successfully pinned

[ 3 / 3 ] Less than 10% (0.00%) is spend in BLAS1 operations

It could be more efficient to inline by hand BLAS1 operations

[ 0 / 3 ] Too many functions do not use all threads

Functions running on a reduced number of threads (typically sequential code) cover at least 10% of application walltime (41.34%). Check both "Max Inclusive Time Over Threads" and "Nb Threads" in Functions or Loops tabs and consider parallelizing sequential regions or improving parallelization of regions running on a reduced number of threads

[ 3 / 3 ] Cumulative Outermost/In between loops coverage (0.15%) lower than cumulative innermost loop coverage (23.68%)

Having cumulative Outermost/In between loops coverage greater than cumulative innermost loop coverage will make loop optimization more complex

[ 2 / 2 ] Less than 10% (0.00%) is spend in BLAS2 operations

BLAS2 calls usually could make a poor cache usage and could benefit from inlining.

[ 2 / 2 ] Less than 10% (0.10%) is spend in Libm/SVML (special functions)

Optimizer

Loop IDAnalysisPenalty Score
Loop 548 - libggml-cpu.soExecution Time: 23 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Loop 713 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Control Flow Issues+2
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Vectorization Roadblocks+1002
[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
Loop 1232 - libggml-cpu.soExecution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Loop 399 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 90.91 % - Vector Length Use: 38.76 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Data Access Issues+68
[SA] Presence of constant non unit stride data access - Use array restructuring, perform loop interchange or use gather instructions to lower a bit the cost. There are 9 issues ( = data accesses) costing 2 point each.18
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, BLEND/MERGE, SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 48 issues (= instructions) costing 1 point each.48
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+18
[SA] Presence of constant non unit stride data access - Use array restructuring, perform loop interchange or use gather instructions to lower a bit the cost. There are 9 issues ( = data accesses) costing 2 point each.18
Inefficient Vectorization+48
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, BLEND/MERGE, SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 48 issues (= instructions) costing 1 point each.48
Loop 2304 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Control Flow Issues+2
[SA] Several paths (2 paths) - Simplify control structure or force the compiler to use masked instructions. There are 2 issues ( = paths) costing 1 point each.2
Vectorization Roadblocks+2
[SA] Several paths (2 paths) - Simplify control structure or force the compiler to use masked instructions. There are 2 issues ( = paths) costing 1 point each.2
Loop 2015 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 6.25 %
Loop Computation Issues+20
[SA] Presence of expensive FP instructions - Perform hoisting, change algorithm, use SVML or proper numerical library or perform value profiling (count the number of distinct input values). There are 4 issues (= instructions) costing 4 points each.16
[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
Control Flow Issues+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Data Access Issues+2
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Loop 2294 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 18.59 % - Vector Length Use: 12.30 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Control Flow Issues+1003
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (4213 paths) - Simplify control structure. There are 4213 issues ( = paths) costing 1 point, limited to 1000.1000
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Data Access Issues+14
[SA] Presence of special instructions executing on a single port (BROADCAST) - Simplify data access and try to get stride 1 access. There are 12 issues (= instructions) costing 1 point each.12
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1003
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (4213 paths) - Simplify control structure. There are 4213 issues ( = paths) costing 1 point, limited to 1000.1000
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Inefficient Vectorization+12
[SA] Presence of special instructions executing on a single port (BROADCAST) - Simplify data access and try to get stride 1 access. There are 12 issues (= instructions) costing 1 point each.12
Loop 117 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 9.58 %
Control Flow Issues+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Data Access Issues+2
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1001
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (at least 1000 paths) - Simplify control structure. There are at least 1000 issues ( = paths) costing 1 point.1000
Loop 3150 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 60.70 % - Vector Length Use: 29.66 %
Loop Computation Issues+4
[SA] Presence of expensive FP instructions - Perform hoisting, change algorithm, use SVML or proper numerical library or perform value profiling (count the number of distinct input values). There are 1 issues (= instructions) costing 4 points each.4
Control Flow Issues+3
[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
Data Access Issues+5
[SA] Inefficient vectorization: more than 10% of the vector loads instructions are unaligned - When allocating arrays, don’t forget to align them. There are 0 issues ( = arrays) costing 2 points each0
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, SHUFFLE/PERM, BROADCAST) - Simplify data access and try to get stride 1 access. There are 5 issues (= instructions) costing 1 point each.5
Vectorization Roadblocks+3
[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
Inefficient Vectorization+5
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, SHUFFLE/PERM, BROADCAST) - Simplify data access and try to get stride 1 access. There are 5 issues (= instructions) costing 1 point each.5
Loop 2292 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 6.25 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Data Access Issues+4
[SA] Presence of indirect accesses - Use array restructuring or gather instructions to lower the cost. There are 1 issues ( = indirect data accesses) costing 4 point each.4
Vectorization Roadblocks+4
[SA] Presence of indirect accesses - Use array restructuring or gather instructions to lower the cost. There are 1 issues ( = indirect data accesses) costing 4 point each.4

Stylizer  

[ 4 / 4 ] Application profile is long enough (16.94 s)

To have good quality measurements, it is advised that the application profiling time is greater than 10 seconds.

[ 2.29 / 3 ] Most of time spent in analyzed modules comes from functions without compilation information

Functions without compilation information (typically not compiled with -g and -grecord-gcc-switches) cumulate 23.81% of the time spent in analyzed modules. Check that -g and -grecord-gcc-switches are present. Remark: if -g and -grecord-gcc-switches are indeed used, this can also be due to some compiler built-in functions (typically math) or statically linked libraries. This warning can be ignored in that case.

[ 3 / 3 ] Optimization level option is correctly used

[ 3 / 3 ] Host configuration allows retrieval of all necessary metrics.

[ 0 / 3 ] Compilation of some functions is not optimized for the target processor

Application run on the GRANITE_RAPIDS micro-architecture while the code was specialized for graniterapids. Architecture specific options are needed to produce efficient code for a specific processor ( -x(target) or -ax(target) ).

[ 2 / 2 ] Application is correctly profiled ("Others" category represents 0.00 % 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

[ 1 / 1 ] Lstopo present. The Topology lstopo report will be generated.

Strategizer  

[ 0 / 4 ] Too little time of the experiment time spent in analyzed loops (25.33%)

If the time spent in analyzed loops is less than 30%, standard loop optimizations will have a limited impact on application performances.

[ 1 / 4 ] A significant amount of threads are idle (51.71%)

On average, more than 10% of observed threads are idle. Such threads are probably IO/sync waiting. Some hints: use faster filesystems to read/write data, improve parallel load balancing and/or scheduling.

[ 4 / 4 ] CPU activity is good

CPU cores are active 96.45% of time

[ 4 / 4 ] Loop profile is not flat

At least one loop coverage is greater than 4% (24.81%), representing an hotspot for the application

[ 4 / 4 ] Enough time of the experiment time spent in analyzed innermost loops (25.17%)

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.

[ 4 / 4 ] Affinity is good (97.31%)

Threads are not migrating to CPU cores: probably successfully pinned

[ 3 / 3 ] Less than 10% (0.00%) is spend in BLAS1 operations

It could be more efficient to inline by hand BLAS1 operations

[ 0 / 3 ] Too many functions do not use all threads

Functions running on a reduced number of threads (typically sequential code) cover at least 10% of application walltime (37.51%). Check both "Max Inclusive Time Over Threads" and "Nb Threads" in Functions or Loops tabs and consider parallelizing sequential regions or improving parallelization of regions running on a reduced number of threads

[ 3 / 3 ] Cumulative Outermost/In between loops coverage (0.16%) lower than cumulative innermost loop coverage (25.17%)

Having cumulative Outermost/In between loops coverage greater than cumulative innermost loop coverage will make loop optimization more complex

[ 2 / 2 ] Less than 10% (0.00%) is spend in BLAS2 operations

BLAS2 calls usually could make a poor cache usage and could benefit from inlining.

[ 2 / 2 ] Less than 10% (0.11%) is spend in Libm/SVML (special functions)

Optimizer

Loop IDAnalysisPenalty Score
Loop 548 - libggml-cpu.soExecution Time: 24 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Loop 713 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Control Flow Issues+2
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Vectorization Roadblocks+1002
[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
Loop 399 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 90.91 % - Vector Length Use: 38.76 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Data Access Issues+68
[SA] Presence of constant non unit stride data access - Use array restructuring, perform loop interchange or use gather instructions to lower a bit the cost. There are 9 issues ( = data accesses) costing 2 point each.18
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, BLEND/MERGE, SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 48 issues (= instructions) costing 1 point each.48
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+18
[SA] Presence of constant non unit stride data access - Use array restructuring, perform loop interchange or use gather instructions to lower a bit the cost. There are 9 issues ( = data accesses) costing 2 point each.18
Inefficient Vectorization+48
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, BLEND/MERGE, SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 48 issues (= instructions) costing 1 point each.48
Loop 1232 - libggml-cpu.soExecution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Loop 2304 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Control Flow Issues+2
[SA] Several paths (2 paths) - Simplify control structure or force the compiler to use masked instructions. There are 2 issues ( = paths) costing 1 point each.2
Vectorization Roadblocks+2
[SA] Several paths (2 paths) - Simplify control structure or force the compiler to use masked instructions. There are 2 issues ( = paths) costing 1 point each.2
Loop 2015 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 6.25 %
Loop Computation Issues+20
[SA] Presence of expensive FP instructions - Perform hoisting, change algorithm, use SVML or proper numerical library or perform value profiling (count the number of distinct input values). There are 4 issues (= instructions) costing 4 points each.16
[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
Control Flow Issues+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Data Access Issues+2
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Loop 2294 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 18.59 % - Vector Length Use: 12.30 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Control Flow Issues+1003
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (4213 paths) - Simplify control structure. There are 4213 issues ( = paths) costing 1 point, limited to 1000.1000
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Data Access Issues+14
[SA] Presence of special instructions executing on a single port (BROADCAST) - Simplify data access and try to get stride 1 access. There are 12 issues (= instructions) costing 1 point each.12
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1003
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (4213 paths) - Simplify control structure. There are 4213 issues ( = paths) costing 1 point, limited to 1000.1000
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Inefficient Vectorization+12
[SA] Presence of special instructions executing on a single port (BROADCAST) - Simplify data access and try to get stride 1 access. There are 12 issues (= instructions) costing 1 point each.12
Loop 117 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 9.58 %
Control Flow Issues+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Data Access Issues+2
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1001
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (at least 1000 paths) - Simplify control structure. There are at least 1000 issues ( = paths) costing 1 point.1000
Loop 3150 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 60.70 % - Vector Length Use: 29.66 %
Loop Computation Issues+4
[SA] Presence of expensive FP instructions - Perform hoisting, change algorithm, use SVML or proper numerical library or perform value profiling (count the number of distinct input values). There are 1 issues (= instructions) costing 4 points each.4
Control Flow Issues+3
[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
Data Access Issues+5
[SA] Inefficient vectorization: more than 10% of the vector loads instructions are unaligned - When allocating arrays, don’t forget to align them. There are 0 issues ( = arrays) costing 2 points each0
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, SHUFFLE/PERM, BROADCAST) - Simplify data access and try to get stride 1 access. There are 5 issues (= instructions) costing 1 point each.5
Vectorization Roadblocks+3
[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
Inefficient Vectorization+5
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, SHUFFLE/PERM, BROADCAST) - Simplify data access and try to get stride 1 access. There are 5 issues (= instructions) costing 1 point each.5
Loop 2292 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 6.25 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Data Access Issues+4
[SA] Presence of indirect accesses - Use array restructuring or gather instructions to lower the cost. There are 1 issues ( = indirect data accesses) costing 4 point each.4
Vectorization Roadblocks+4
[SA] Presence of indirect accesses - Use array restructuring or gather instructions to lower the cost. There are 1 issues ( = indirect data accesses) costing 4 point each.4

Stylizer  

[ 4 / 4 ] Application profile is long enough (17.92 s)

To have good quality measurements, it is advised that the application profiling time is greater than 10 seconds.

[ 2.03 / 3 ] Most of time spent in analyzed modules comes from functions without compilation information

Functions without compilation information (typically not compiled with -g and -grecord-gcc-switches) cumulate 32.26% of the time spent in analyzed modules. Check that -g and -grecord-gcc-switches are present. Remark: if -g and -grecord-gcc-switches are indeed used, this can also be due to some compiler built-in functions (typically math) or statically linked libraries. This warning can be ignored in that case.

[ 3 / 3 ] Optimization level option is correctly used

[ 3 / 3 ] Host configuration allows retrieval of all necessary metrics.

[ 0 / 3 ] Compilation of some functions is not optimized for the target processor

Application run on the GRANITE_RAPIDS micro-architecture while the code was specialized for graniterapids. Architecture specific options are needed to produce efficient code for a specific processor ( -x(target) or -ax(target) ).

[ 2 / 2 ] Application is correctly profiled ("Others" category represents 0.00 % 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

[ 1 / 1 ] Lstopo present. The Topology lstopo report will be generated.

Strategizer  

[ 0 / 4 ] Too little time of the experiment time spent in analyzed loops (25.19%)

If the time spent in analyzed loops is less than 30%, standard loop optimizations will have a limited impact on application performances.

[ 1 / 4 ] A significant amount of threads are idle (50.02%)

On average, more than 10% of observed threads are idle. Such threads are probably IO/sync waiting. Some hints: use faster filesystems to read/write data, improve parallel load balancing and/or scheduling.

[ 4 / 4 ] CPU activity is good

CPU cores are active 96.73% of time

[ 4 / 4 ] Loop profile is not flat

At least one loop coverage is greater than 4% (24.61%), representing an hotspot for the application

[ 4 / 4 ] Enough time of the experiment time spent in analyzed innermost loops (25.05%)

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.

[ 4 / 4 ] Affinity is good (97.47%)

Threads are not migrating to CPU cores: probably successfully pinned

[ 3 / 3 ] Less than 10% (0.00%) is spend in BLAS1 operations

It could be more efficient to inline by hand BLAS1 operations

[ 0 / 3 ] Too many functions do not use all threads

Functions running on a reduced number of threads (typically sequential code) cover at least 10% of application walltime (42.64%). Check both "Max Inclusive Time Over Threads" and "Nb Threads" in Functions or Loops tabs and consider parallelizing sequential regions or improving parallelization of regions running on a reduced number of threads

[ 3 / 3 ] Cumulative Outermost/In between loops coverage (0.14%) lower than cumulative innermost loop coverage (25.05%)

Having cumulative Outermost/In between loops coverage greater than cumulative innermost loop coverage will make loop optimization more complex

[ 2 / 2 ] Less than 10% (0.00%) is spend in BLAS2 operations

BLAS2 calls usually could make a poor cache usage and could benefit from inlining.

[ 2 / 2 ] Less than 10% (0.10%) is spend in Libm/SVML (special functions)

Optimizer

Loop IDAnalysisPenalty Score
Loop 548 - libggml-cpu.soExecution Time: 24 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Loop 1232 - libggml-cpu.soExecution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Loop 2304 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Control Flow Issues+2
[SA] Several paths (2 paths) - Simplify control structure or force the compiler to use masked instructions. There are 2 issues ( = paths) costing 1 point each.2
Vectorization Roadblocks+2
[SA] Several paths (2 paths) - Simplify control structure or force the compiler to use masked instructions. There are 2 issues ( = paths) costing 1 point each.2
Loop 713 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Control Flow Issues+2
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Vectorization Roadblocks+1002
[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
Loop 399 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 90.91 % - Vector Length Use: 38.76 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Data Access Issues+68
[SA] Presence of constant non unit stride data access - Use array restructuring, perform loop interchange or use gather instructions to lower a bit the cost. There are 9 issues ( = data accesses) costing 2 point each.18
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, BLEND/MERGE, SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 48 issues (= instructions) costing 1 point each.48
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+18
[SA] Presence of constant non unit stride data access - Use array restructuring, perform loop interchange or use gather instructions to lower a bit the cost. There are 9 issues ( = data accesses) costing 2 point each.18
Inefficient Vectorization+48
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, BLEND/MERGE, SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 48 issues (= instructions) costing 1 point each.48
Loop 2015 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 6.25 %
Loop Computation Issues+20
[SA] Presence of expensive FP instructions - Perform hoisting, change algorithm, use SVML or proper numerical library or perform value profiling (count the number of distinct input values). There are 4 issues (= instructions) costing 4 points each.16
[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
Control Flow Issues+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Data Access Issues+2
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Loop 2294 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 18.59 % - Vector Length Use: 12.30 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Control Flow Issues+1003
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (4213 paths) - Simplify control structure. There are 4213 issues ( = paths) costing 1 point, limited to 1000.1000
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Data Access Issues+14
[SA] Presence of special instructions executing on a single port (BROADCAST) - Simplify data access and try to get stride 1 access. There are 12 issues (= instructions) costing 1 point each.12
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1003
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (4213 paths) - Simplify control structure. There are 4213 issues ( = paths) costing 1 point, limited to 1000.1000
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Inefficient Vectorization+12
[SA] Presence of special instructions executing on a single port (BROADCAST) - Simplify data access and try to get stride 1 access. There are 12 issues (= instructions) costing 1 point each.12
Loop 117 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 9.58 %
Control Flow Issues+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Data Access Issues+2
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1001
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (at least 1000 paths) - Simplify control structure. There are at least 1000 issues ( = paths) costing 1 point.1000
Loop 2292 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 6.25 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Data Access Issues+4
[SA] Presence of indirect accesses - Use array restructuring or gather instructions to lower the cost. There are 1 issues ( = indirect data accesses) costing 4 point each.4
Vectorization Roadblocks+4
[SA] Presence of indirect accesses - Use array restructuring or gather instructions to lower the cost. There are 1 issues ( = indirect data accesses) costing 4 point each.4
Loop 3150 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 60.70 % - Vector Length Use: 29.66 %
Loop Computation Issues+4
[SA] Presence of expensive FP instructions - Perform hoisting, change algorithm, use SVML or proper numerical library or perform value profiling (count the number of distinct input values). There are 1 issues (= instructions) costing 4 points each.4
Control Flow Issues+3
[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
Data Access Issues+5
[SA] Inefficient vectorization: more than 10% of the vector loads instructions are unaligned - When allocating arrays, don’t forget to align them. There are 0 issues ( = arrays) costing 2 points each0
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, SHUFFLE/PERM, BROADCAST) - Simplify data access and try to get stride 1 access. There are 5 issues (= instructions) costing 1 point each.5
Vectorization Roadblocks+3
[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
Inefficient Vectorization+5
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, SHUFFLE/PERM, BROADCAST) - Simplify data access and try to get stride 1 access. There are 5 issues (= instructions) costing 1 point each.5

Stylizer  

[ 4 / 4 ] Application profile is long enough (17.08 s)

To have good quality measurements, it is advised that the application profiling time is greater than 10 seconds.

[ 1.84 / 3 ] Most of time spent in analyzed modules comes from functions without compilation information

Functions without compilation information (typically not compiled with -g and -grecord-gcc-switches) cumulate 38.78% of the time spent in analyzed modules. Check that -g and -grecord-gcc-switches are present. Remark: if -g and -grecord-gcc-switches are indeed used, this can also be due to some compiler built-in functions (typically math) or statically linked libraries. This warning can be ignored in that case.

[ 3 / 3 ] Optimization level option is correctly used

[ 3 / 3 ] Host configuration allows retrieval of all necessary metrics.

[ 0 / 3 ] Compilation of some functions is not optimized for the target processor

Application run on the GRANITE_RAPIDS micro-architecture while the code was specialized for graniterapids. Architecture specific options are needed to produce efficient code for a specific processor ( -x(target) or -ax(target) ).

[ 2 / 2 ] Application is correctly profiled ("Others" category represents 0.00 % 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

[ 1 / 1 ] Lstopo present. The Topology lstopo report will be generated.

Strategizer  

[ 0 / 4 ] Too little time of the experiment time spent in analyzed loops (23.49%)

If the time spent in analyzed loops is less than 30%, standard loop optimizations will have a limited impact on application performances.

[ 1 / 4 ] A significant amount of threads are idle (51.62%)

On average, more than 10% of observed threads are idle. Such threads are probably IO/sync waiting. Some hints: use faster filesystems to read/write data, improve parallel load balancing and/or scheduling.

[ 4 / 4 ] CPU activity is good

CPU cores are active 96.54% of time

[ 4 / 4 ] Loop profile is not flat

At least one loop coverage is greater than 4% (22.95%), representing an hotspot for the application

[ 4 / 4 ] Enough time of the experiment time spent in analyzed innermost loops (23.33%)

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.

[ 4 / 4 ] Affinity is good (97.27%)

Threads are not migrating to CPU cores: probably successfully pinned

[ 3 / 3 ] Less than 10% (0.00%) is spend in BLAS1 operations

It could be more efficient to inline by hand BLAS1 operations

[ 0 / 3 ] Too many functions do not use all threads

Functions running on a reduced number of threads (typically sequential code) cover at least 10% of application walltime (39.57%). Check both "Max Inclusive Time Over Threads" and "Nb Threads" in Functions or Loops tabs and consider parallelizing sequential regions or improving parallelization of regions running on a reduced number of threads

[ 3 / 3 ] Cumulative Outermost/In between loops coverage (0.16%) lower than cumulative innermost loop coverage (23.33%)

Having cumulative Outermost/In between loops coverage greater than cumulative innermost loop coverage will make loop optimization more complex

[ 2 / 2 ] Less than 10% (0.00%) is spend in BLAS2 operations

BLAS2 calls usually could make a poor cache usage and could benefit from inlining.

[ 2 / 2 ] Less than 10% (0.10%) is spend in Libm/SVML (special functions)

Optimizer

Loop IDAnalysisPenalty Score
Loop 548 - libggml-cpu.soExecution Time: 22 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Loop 399 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 90.91 % - Vector Length Use: 38.76 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Data Access Issues+68
[SA] Presence of constant non unit stride data access - Use array restructuring, perform loop interchange or use gather instructions to lower a bit the cost. There are 9 issues ( = data accesses) costing 2 point each.18
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, BLEND/MERGE, SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 48 issues (= instructions) costing 1 point each.48
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+18
[SA] Presence of constant non unit stride data access - Use array restructuring, perform loop interchange or use gather instructions to lower a bit the cost. There are 9 issues ( = data accesses) costing 2 point each.18
Inefficient Vectorization+48
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, BLEND/MERGE, SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 48 issues (= instructions) costing 1 point each.48
Loop 713 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Control Flow Issues+2
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Vectorization Roadblocks+1002
[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
Loop 1232 - libggml-cpu.soExecution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Loop 2304 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Control Flow Issues+2
[SA] Several paths (2 paths) - Simplify control structure or force the compiler to use masked instructions. There are 2 issues ( = paths) costing 1 point each.2
Vectorization Roadblocks+2
[SA] Several paths (2 paths) - Simplify control structure or force the compiler to use masked instructions. There are 2 issues ( = paths) costing 1 point each.2
Loop 2015 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 6.25 %
Loop Computation Issues+20
[SA] Presence of expensive FP instructions - Perform hoisting, change algorithm, use SVML or proper numerical library or perform value profiling (count the number of distinct input values). There are 4 issues (= instructions) costing 4 points each.16
[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
Control Flow Issues+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Data Access Issues+2
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Loop 2294 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 18.59 % - Vector Length Use: 12.30 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Control Flow Issues+1003
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (4213 paths) - Simplify control structure. There are 4213 issues ( = paths) costing 1 point, limited to 1000.1000
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Data Access Issues+14
[SA] Presence of special instructions executing on a single port (BROADCAST) - Simplify data access and try to get stride 1 access. There are 12 issues (= instructions) costing 1 point each.12
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1003
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (4213 paths) - Simplify control structure. There are 4213 issues ( = paths) costing 1 point, limited to 1000.1000
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Inefficient Vectorization+12
[SA] Presence of special instructions executing on a single port (BROADCAST) - Simplify data access and try to get stride 1 access. There are 12 issues (= instructions) costing 1 point each.12
Loop 117 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 9.58 %
Control Flow Issues+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Data Access Issues+2
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1001
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (at least 1000 paths) - Simplify control structure. There are at least 1000 issues ( = paths) costing 1 point.1000
Loop 3150 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 60.70 % - Vector Length Use: 29.66 %
Loop Computation Issues+4
[SA] Presence of expensive FP instructions - Perform hoisting, change algorithm, use SVML or proper numerical library or perform value profiling (count the number of distinct input values). There are 1 issues (= instructions) costing 4 points each.4
Control Flow Issues+3
[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
Data Access Issues+5
[SA] Inefficient vectorization: more than 10% of the vector loads instructions are unaligned - When allocating arrays, don’t forget to align them. There are 0 issues ( = arrays) costing 2 points each0
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, SHUFFLE/PERM, BROADCAST) - Simplify data access and try to get stride 1 access. There are 5 issues (= instructions) costing 1 point each.5
Vectorization Roadblocks+3
[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
Inefficient Vectorization+5
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, SHUFFLE/PERM, BROADCAST) - Simplify data access and try to get stride 1 access. There are 5 issues (= instructions) costing 1 point each.5
Loop 2292 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 6.25 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Data Access Issues+4
[SA] Presence of indirect accesses - Use array restructuring or gather instructions to lower the cost. There are 1 issues ( = indirect data accesses) costing 4 point each.4
Vectorization Roadblocks+4
[SA] Presence of indirect accesses - Use array restructuring or gather instructions to lower the cost. There are 1 issues ( = indirect data accesses) costing 4 point each.4

Stylizer  

[ 4 / 4 ] Application profile is long enough (17.26 s)

To have good quality measurements, it is advised that the application profiling time is greater than 10 seconds.

[ 1.94 / 3 ] Most of time spent in analyzed modules comes from functions without compilation information

Functions without compilation information (typically not compiled with -g and -grecord-gcc-switches) cumulate 35.38% of the time spent in analyzed modules. Check that -g and -grecord-gcc-switches are present. Remark: if -g and -grecord-gcc-switches are indeed used, this can also be due to some compiler built-in functions (typically math) or statically linked libraries. This warning can be ignored in that case.

[ 3 / 3 ] Optimization level option is correctly used

[ 3 / 3 ] Host configuration allows retrieval of all necessary metrics.

[ 0 / 3 ] Compilation of some functions is not optimized for the target processor

Application run on the GRANITE_RAPIDS micro-architecture while the code was specialized for graniterapids. Architecture specific options are needed to produce efficient code for a specific processor ( -x(target) or -ax(target) ).

[ 2 / 2 ] Application is correctly profiled ("Others" category represents 0.00 % 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

[ 1 / 1 ] Lstopo present. The Topology lstopo report will be generated.

Strategizer  

[ 0 / 4 ] Too little time of the experiment time spent in analyzed loops (24.92%)

If the time spent in analyzed loops is less than 30%, standard loop optimizations will have a limited impact on application performances.

[ 1 / 4 ] A significant amount of threads are idle (51.17%)

On average, more than 10% of observed threads are idle. Such threads are probably IO/sync waiting. Some hints: use faster filesystems to read/write data, improve parallel load balancing and/or scheduling.

[ 4 / 4 ] CPU activity is good

CPU cores are active 96.70% of time

[ 4 / 4 ] Loop profile is not flat

At least one loop coverage is greater than 4% (24.35%), representing an hotspot for the application

[ 4 / 4 ] Enough time of the experiment time spent in analyzed innermost loops (24.77%)

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.

[ 4 / 4 ] Affinity is good (97.16%)

Threads are not migrating to CPU cores: probably successfully pinned

[ 3 / 3 ] Less than 10% (0.00%) is spend in BLAS1 operations

It could be more efficient to inline by hand BLAS1 operations

[ 0 / 3 ] Too many functions do not use all threads

Functions running on a reduced number of threads (typically sequential code) cover at least 10% of application walltime (39.46%). Check both "Max Inclusive Time Over Threads" and "Nb Threads" in Functions or Loops tabs and consider parallelizing sequential regions or improving parallelization of regions running on a reduced number of threads

[ 3 / 3 ] Cumulative Outermost/In between loops coverage (0.15%) lower than cumulative innermost loop coverage (24.77%)

Having cumulative Outermost/In between loops coverage greater than cumulative innermost loop coverage will make loop optimization more complex

[ 2 / 2 ] Less than 10% (0.00%) is spend in BLAS2 operations

BLAS2 calls usually could make a poor cache usage and could benefit from inlining.

[ 2 / 2 ] Less than 10% (0.10%) is spend in Libm/SVML (special functions)

Optimizer

Loop IDAnalysisPenalty Score
Loop 548 - libggml-cpu.soExecution Time: 24 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Loop 1232 - libggml-cpu.soExecution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Loop 2304 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Control Flow Issues+2
[SA] Several paths (2 paths) - Simplify control structure or force the compiler to use masked instructions. There are 2 issues ( = paths) costing 1 point each.2
Vectorization Roadblocks+2
[SA] Several paths (2 paths) - Simplify control structure or force the compiler to use masked instructions. There are 2 issues ( = paths) costing 1 point each.2
Loop 713 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Control Flow Issues+2
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Vectorization Roadblocks+1002
[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
Loop 399 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 90.91 % - Vector Length Use: 38.76 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Data Access Issues+68
[SA] Presence of constant non unit stride data access - Use array restructuring, perform loop interchange or use gather instructions to lower a bit the cost. There are 9 issues ( = data accesses) costing 2 point each.18
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, BLEND/MERGE, SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 48 issues (= instructions) costing 1 point each.48
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+18
[SA] Presence of constant non unit stride data access - Use array restructuring, perform loop interchange or use gather instructions to lower a bit the cost. There are 9 issues ( = data accesses) costing 2 point each.18
Inefficient Vectorization+48
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, BLEND/MERGE, SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 48 issues (= instructions) costing 1 point each.48
Loop 2015 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 6.25 %
Loop Computation Issues+20
[SA] Presence of expensive FP instructions - Perform hoisting, change algorithm, use SVML or proper numerical library or perform value profiling (count the number of distinct input values). There are 4 issues (= instructions) costing 4 points each.16
[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
Control Flow Issues+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Data Access Issues+2
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Loop 2294 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 18.59 % - Vector Length Use: 12.30 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Control Flow Issues+1003
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (4213 paths) - Simplify control structure. There are 4213 issues ( = paths) costing 1 point, limited to 1000.1000
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Data Access Issues+14
[SA] Presence of special instructions executing on a single port (BROADCAST) - Simplify data access and try to get stride 1 access. There are 12 issues (= instructions) costing 1 point each.12
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1003
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (4213 paths) - Simplify control structure. There are 4213 issues ( = paths) costing 1 point, limited to 1000.1000
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Inefficient Vectorization+12
[SA] Presence of special instructions executing on a single port (BROADCAST) - Simplify data access and try to get stride 1 access. There are 12 issues (= instructions) costing 1 point each.12
Loop 117 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 9.58 %
Control Flow Issues+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Data Access Issues+2
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1001
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (at least 1000 paths) - Simplify control structure. There are at least 1000 issues ( = paths) costing 1 point.1000
Loop 2292 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 6.25 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Data Access Issues+4
[SA] Presence of indirect accesses - Use array restructuring or gather instructions to lower the cost. There are 1 issues ( = indirect data accesses) costing 4 point each.4
Vectorization Roadblocks+4
[SA] Presence of indirect accesses - Use array restructuring or gather instructions to lower the cost. There are 1 issues ( = indirect data accesses) costing 4 point each.4
Loop 914 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 6.25 %
Loop Computation Issues+4
[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

Stylizer  

[ 4 / 4 ] Application profile is long enough (17.60 s)

To have good quality measurements, it is advised that the application profiling time is greater than 10 seconds.

[ 2.16 / 3 ] Most of time spent in analyzed modules comes from functions without compilation information

Functions without compilation information (typically not compiled with -g and -grecord-gcc-switches) cumulate 28.07% of the time spent in analyzed modules. Check that -g and -grecord-gcc-switches are present. Remark: if -g and -grecord-gcc-switches are indeed used, this can also be due to some compiler built-in functions (typically math) or statically linked libraries. This warning can be ignored in that case.

[ 3 / 3 ] Optimization level option is correctly used

[ 3 / 3 ] Host configuration allows retrieval of all necessary metrics.

[ 0 / 3 ] Compilation of some functions is not optimized for the target processor

Application run on the GRANITE_RAPIDS micro-architecture while the code was specialized for graniterapids. Architecture specific options are needed to produce efficient code for a specific processor ( -x(target) or -ax(target) ).

[ 2 / 2 ] Application is correctly profiled ("Others" category represents 0.00 % 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

[ 1 / 1 ] Lstopo present. The Topology lstopo report will be generated.

Strategizer  

[ 0 / 4 ] Too little time of the experiment time spent in analyzed loops (24.76%)

If the time spent in analyzed loops is less than 30%, standard loop optimizations will have a limited impact on application performances.

[ 1 / 4 ] A significant amount of threads are idle (50.90%)

On average, more than 10% of observed threads are idle. Such threads are probably IO/sync waiting. Some hints: use faster filesystems to read/write data, improve parallel load balancing and/or scheduling.

[ 4 / 4 ] CPU activity is good

CPU cores are active 96.53% of time

[ 4 / 4 ] Loop profile is not flat

At least one loop coverage is greater than 4% (24.16%), representing an hotspot for the application

[ 4 / 4 ] Enough time of the experiment time spent in analyzed innermost loops (24.62%)

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.

[ 4 / 4 ] Affinity is good (97.02%)

Threads are not migrating to CPU cores: probably successfully pinned

[ 3 / 3 ] Less than 10% (0.00%) is spend in BLAS1 operations

It could be more efficient to inline by hand BLAS1 operations

[ 0 / 3 ] Too many functions do not use all threads

Functions running on a reduced number of threads (typically sequential code) cover at least 10% of application walltime (43.00%). Check both "Max Inclusive Time Over Threads" and "Nb Threads" in Functions or Loops tabs and consider parallelizing sequential regions or improving parallelization of regions running on a reduced number of threads

[ 3 / 3 ] Cumulative Outermost/In between loops coverage (0.14%) lower than cumulative innermost loop coverage (24.62%)

Having cumulative Outermost/In between loops coverage greater than cumulative innermost loop coverage will make loop optimization more complex

[ 2 / 2 ] Less than 10% (0.00%) is spend in BLAS2 operations

BLAS2 calls usually could make a poor cache usage and could benefit from inlining.

[ 2 / 2 ] Less than 10% (0.10%) is spend in Libm/SVML (special functions)

Optimizer

Loop IDAnalysisPenalty Score
Loop 548 - libggml-cpu.soExecution Time: 24 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Loop 1232 - libggml-cpu.soExecution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Loop 2304 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Control Flow Issues+2
[SA] Several paths (2 paths) - Simplify control structure or force the compiler to use masked instructions. There are 2 issues ( = paths) costing 1 point each.2
Vectorization Roadblocks+2
[SA] Several paths (2 paths) - Simplify control structure or force the compiler to use masked instructions. There are 2 issues ( = paths) costing 1 point each.2
Loop 399 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 90.91 % - Vector Length Use: 38.76 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Data Access Issues+68
[SA] Presence of constant non unit stride data access - Use array restructuring, perform loop interchange or use gather instructions to lower a bit the cost. There are 9 issues ( = data accesses) costing 2 point each.18
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, BLEND/MERGE, SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 48 issues (= instructions) costing 1 point each.48
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+18
[SA] Presence of constant non unit stride data access - Use array restructuring, perform loop interchange or use gather instructions to lower a bit the cost. There are 9 issues ( = data accesses) costing 2 point each.18
Inefficient Vectorization+48
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, BLEND/MERGE, SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 48 issues (= instructions) costing 1 point each.48
Loop 713 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Control Flow Issues+2
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Vectorization Roadblocks+1002
[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
Loop 2015 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 6.25 %
Loop Computation Issues+20
[SA] Presence of expensive FP instructions - Perform hoisting, change algorithm, use SVML or proper numerical library or perform value profiling (count the number of distinct input values). There are 4 issues (= instructions) costing 4 points each.16
[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
Control Flow Issues+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Data Access Issues+2
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Loop 2294 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 18.59 % - Vector Length Use: 12.30 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Control Flow Issues+1003
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (4213 paths) - Simplify control structure. There are 4213 issues ( = paths) costing 1 point, limited to 1000.1000
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Data Access Issues+14
[SA] Presence of special instructions executing on a single port (BROADCAST) - Simplify data access and try to get stride 1 access. There are 12 issues (= instructions) costing 1 point each.12
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1003
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (4213 paths) - Simplify control structure. There are 4213 issues ( = paths) costing 1 point, limited to 1000.1000
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Inefficient Vectorization+12
[SA] Presence of special instructions executing on a single port (BROADCAST) - Simplify data access and try to get stride 1 access. There are 12 issues (= instructions) costing 1 point each.12
Loop 117 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 9.58 %
Control Flow Issues+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Data Access Issues+2
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1001
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (at least 1000 paths) - Simplify control structure. There are at least 1000 issues ( = paths) costing 1 point.1000
Loop 2292 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 6.25 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Data Access Issues+4
[SA] Presence of indirect accesses - Use array restructuring or gather instructions to lower the cost. There are 1 issues ( = indirect data accesses) costing 4 point each.4
Vectorization Roadblocks+4
[SA] Presence of indirect accesses - Use array restructuring or gather instructions to lower the cost. There are 1 issues ( = indirect data accesses) costing 4 point each.4
Loop 3150 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 60.70 % - Vector Length Use: 29.66 %
Loop Computation Issues+4
[SA] Presence of expensive FP instructions - Perform hoisting, change algorithm, use SVML or proper numerical library or perform value profiling (count the number of distinct input values). There are 1 issues (= instructions) costing 4 points each.4
Control Flow Issues+3
[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
Data Access Issues+5
[SA] Inefficient vectorization: more than 10% of the vector loads instructions are unaligned - When allocating arrays, don’t forget to align them. There are 0 issues ( = arrays) costing 2 points each0
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, SHUFFLE/PERM, BROADCAST) - Simplify data access and try to get stride 1 access. There are 5 issues (= instructions) costing 1 point each.5
Vectorization Roadblocks+3
[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
Inefficient Vectorization+5
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, SHUFFLE/PERM, BROADCAST) - Simplify data access and try to get stride 1 access. There are 5 issues (= instructions) costing 1 point each.5

Stylizer  

[ 4 / 4 ] Application profile is long enough (18.30 s)

To have good quality measurements, it is advised that the application profiling time is greater than 10 seconds.

[ 1.75 / 3 ] Most of time spent in analyzed modules comes from functions without compilation information

Functions without compilation information (typically not compiled with -g and -grecord-gcc-switches) cumulate 41.67% of the time spent in analyzed modules. Check that -g and -grecord-gcc-switches are present. Remark: if -g and -grecord-gcc-switches are indeed used, this can also be due to some compiler built-in functions (typically math) or statically linked libraries. This warning can be ignored in that case.

[ 3 / 3 ] Optimization level option is correctly used

[ 3 / 3 ] Host configuration allows retrieval of all necessary metrics.

[ 0 / 3 ] Compilation of some functions is not optimized for the target processor

Application run on the GRANITE_RAPIDS micro-architecture while the code was specialized for graniterapids. Architecture specific options are needed to produce efficient code for a specific processor ( -x(target) or -ax(target) ).

[ 2 / 2 ] Application is correctly profiled ("Others" category represents 0.00 % 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

[ 1 / 1 ] Lstopo present. The Topology lstopo report will be generated.

Strategizer  

[ 0 / 4 ] Too little time of the experiment time spent in analyzed loops (25.51%)

If the time spent in analyzed loops is less than 30%, standard loop optimizations will have a limited impact on application performances.

[ 2 / 4 ] A significant amount of threads are idle (49.44%)

On average, more than 10% of observed threads are idle. Such threads are probably IO/sync waiting. Some hints: use faster filesystems to read/write data, improve parallel load balancing and/or scheduling.

[ 4 / 4 ] CPU activity is good

CPU cores are active 96.72% of time

[ 4 / 4 ] Loop profile is not flat

At least one loop coverage is greater than 4% (24.89%), representing an hotspot for the application

[ 4 / 4 ] Enough time of the experiment time spent in analyzed innermost loops (25.37%)

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.

[ 4 / 4 ] Affinity is good (98.56%)

Threads are not migrating to CPU cores: probably successfully pinned

[ 3 / 3 ] Less than 10% (0.00%) is spend in BLAS1 operations

It could be more efficient to inline by hand BLAS1 operations

[ 0 / 3 ] Too many functions do not use all threads

Functions running on a reduced number of threads (typically sequential code) cover at least 10% of application walltime (44.65%). Check both "Max Inclusive Time Over Threads" and "Nb Threads" in Functions or Loops tabs and consider parallelizing sequential regions or improving parallelization of regions running on a reduced number of threads

[ 3 / 3 ] Cumulative Outermost/In between loops coverage (0.14%) lower than cumulative innermost loop coverage (25.37%)

Having cumulative Outermost/In between loops coverage greater than cumulative innermost loop coverage will make loop optimization more complex

[ 2 / 2 ] Less than 10% (0.00%) is spend in BLAS2 operations

BLAS2 calls usually could make a poor cache usage and could benefit from inlining.

[ 2 / 2 ] Less than 10% (0.09%) is spend in Libm/SVML (special functions)

Optimizer

Loop IDAnalysisPenalty Score
Loop 548 - libggml-cpu.soExecution Time: 24 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Loop 1232 - libggml-cpu.soExecution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Loop 2304 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Control Flow Issues+2
[SA] Several paths (2 paths) - Simplify control structure or force the compiler to use masked instructions. There are 2 issues ( = paths) costing 1 point each.2
Vectorization Roadblocks+2
[SA] Several paths (2 paths) - Simplify control structure or force the compiler to use masked instructions. There are 2 issues ( = paths) costing 1 point each.2
Loop 399 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 90.91 % - Vector Length Use: 38.76 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Data Access Issues+68
[SA] Presence of constant non unit stride data access - Use array restructuring, perform loop interchange or use gather instructions to lower a bit the cost. There are 9 issues ( = data accesses) costing 2 point each.18
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, BLEND/MERGE, SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 48 issues (= instructions) costing 1 point each.48
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+18
[SA] Presence of constant non unit stride data access - Use array restructuring, perform loop interchange or use gather instructions to lower a bit the cost. There are 9 issues ( = data accesses) costing 2 point each.18
Inefficient Vectorization+48
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, BLEND/MERGE, SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 48 issues (= instructions) costing 1 point each.48
Loop 713 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 0.00 %
Control Flow Issues+2
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Vectorization Roadblocks+1002
[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
Loop 2015 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 6.25 %
Loop Computation Issues+20
[SA] Presence of expensive FP instructions - Perform hoisting, change algorithm, use SVML or proper numerical library or perform value profiling (count the number of distinct input values). There are 4 issues (= instructions) costing 4 points each.16
[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
Control Flow Issues+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Data Access Issues+2
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Loop 2294 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 18.59 % - Vector Length Use: 12.30 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Control Flow Issues+1003
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (4213 paths) - Simplify control structure. There are 4213 issues ( = paths) costing 1 point, limited to 1000.1000
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Data Access Issues+14
[SA] Presence of special instructions executing on a single port (BROADCAST) - Simplify data access and try to get stride 1 access. There are 12 issues (= instructions) costing 1 point each.12
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1003
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (4213 paths) - Simplify control structure. There are 4213 issues ( = paths) costing 1 point, limited to 1000.1000
[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
Inefficient Vectorization+12
[SA] Presence of special instructions executing on a single port (BROADCAST) - Simplify data access and try to get stride 1 access. There are 12 issues (= instructions) costing 1 point each.12
Loop 117 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 9.58 %
Control Flow Issues+1
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
Data Access Issues+2
[SA] More than 20% of the loads are accessing the stack - Perform loop splitting to decrease pressure on registers. This issue costs 2 points.2
Vectorization Roadblocks+1001
[SA] Presence of calls - Inline either by compiler or by hand and use SVML for libm calls. There are 1 issues (= calls) costing 1 point each.1
[SA] Too many paths (at least 1000 paths) - Simplify control structure. There are at least 1000 issues ( = paths) costing 1 point.1000
Loop 3150 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 60.70 % - Vector Length Use: 29.66 %
Loop Computation Issues+4
[SA] Presence of expensive FP instructions - Perform hoisting, change algorithm, use SVML or proper numerical library or perform value profiling (count the number of distinct input values). There are 1 issues (= instructions) costing 4 points each.4
Control Flow Issues+3
[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
Data Access Issues+5
[SA] Inefficient vectorization: more than 10% of the vector loads instructions are unaligned - When allocating arrays, don’t forget to align them. There are 0 issues ( = arrays) costing 2 points each0
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, SHUFFLE/PERM, BROADCAST) - Simplify data access and try to get stride 1 access. There are 5 issues (= instructions) costing 1 point each.5
Vectorization Roadblocks+3
[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
Inefficient Vectorization+5
[SA] Presence of special instructions executing on a single port (INSERT/EXTRACT, SHUFFLE/PERM, BROADCAST) - Simplify data access and try to get stride 1 access. There are 5 issues (= instructions) costing 1 point each.5
Loop 2292 - libggml-cpu.so+Execution Time: 0 % - Vectorization Ratio: 0.00 % - Vector Length Use: 6.25 %
Loop Computation Issues+2
[SA] Presence of a large number of scalar integer instructions - Simplify loop structure, perform loop splitting or perform unroll and jam. This issue costs 2 points.2
Data Access Issues+4
[SA] Presence of indirect accesses - Use array restructuring or gather instructions to lower the cost. There are 1 issues ( = indirect data accesses) costing 4 point each.4
Vectorization Roadblocks+4
[SA] Presence of indirect accesses - Use array restructuring or gather instructions to lower the cost. There are 1 issues ( = indirect data accesses) costing 4 point each.4
×