options

kmeans-icpx-Ofast - 2025-08-07 21:52:38 - 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

▼Strategizer  

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

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

[ 4 / 4 ] Threads activity is good

On average, more than 99.12% of observed threads are actually active

[ 4 / 4 ] CPU activity is good

CPU cores are active 99.12% of time

[ 4 / 4 ] Loop profile is not flat

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

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

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.

[ 2 / 4 ] Affinity stability is lower than 90% (69.35%)

Threads are often migrating to other CPU cores/threads. For OpenMP, typically set (OMP_PLACES=cores OMP_PROC_BIND=close) or (OMP_PLACES=threads OMP_PROC_BIND=spread). With OpenMPI + OpenMP, use --bind-to core --map-by node:PE=$OMP_NUM_THREADS --report-bindings. With IntelMPI + OpenMP, set I_MPI_PIN_DOMAIN=omp:compact or I_MPI_PIN_DOMAIN=omp:scatter and use -print-rank-map.

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

It could be more efficient to inline by hand BLAS1 operations

[ 3 / 3 ] Functions mostly use all threads

Functions running on a reduced number of threads (typically sequential code) cover less than 10% of application walltime (0.00%)

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

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.00%) is spend in Libm/SVML (special functions)

▼Optimizer

Loop IDAnalysisPenalty Score
►Loop 29 - kmeans-icpx-Ofast+Execution Time: 99 % - Vectorization Ratio: 57.89 % - Vector Length Use: 18.86 %
►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
►Control Flow Issues+260
○[SA] Too many paths (256 paths) - Simplify control structure. There are 256 issues ( = paths) costing 1 point each with a malus of 4 points.260
►Data Access Issues+8
○[SA] Presence of special instructions executing on a single port (SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 8 issues (= instructions) costing 1 point each.8
►Vectorization Roadblocks+260
○[SA] Too many paths (256 paths) - Simplify control structure. There are 256 issues ( = paths) costing 1 point each with a malus of 4 points.260
►Inefficient Vectorization+8
○[SA] Presence of special instructions executing on a single port (SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 8 issues (= instructions) costing 1 point each.8
►Loop 28 - kmeans-icpx-Ofast+Execution Time: 0 % - Vectorization Ratio: 94.12 % - Vector Length Use: 23.90 %
►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+262
○[SA] Too many paths (256 paths) - Simplify control structure. There are 256 issues ( = paths) costing 1 point each with a malus of 4 points.260
○[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
►Vectorization Roadblocks+262
○[SA] Too many paths (256 paths) - Simplify control structure. There are 256 issues ( = paths) costing 1 point each with a malus of 4 points.260
○[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2

▼Strategizer  

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

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

[ 4 / 4 ] Threads activity is good

On average, more than 147.93% of observed threads are actually active

[ 3 / 4 ] CPU activity is below 90% (89.30%)

CPU cores are idle more than 10% of time. Threads supposed to run on these cores are probably IO/sync waiting. Some hints: use faster filesystems to read/write data, improve parallel load balancing and/or scheduling.

[ 4 / 4 ] Loop profile is not flat

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

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

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

[ 3 / 4 ] Affinity stability is lower than 90% (78.48%)

Threads are often migrating to other CPU cores/threads. For OpenMP, typically set (OMP_PLACES=cores OMP_PROC_BIND=close) or (OMP_PLACES=threads OMP_PROC_BIND=spread). With OpenMPI + OpenMP, use --bind-to core --map-by node:PE=$OMP_NUM_THREADS --report-bindings. With IntelMPI + OpenMP, set I_MPI_PIN_DOMAIN=omp:compact or I_MPI_PIN_DOMAIN=omp:scatter and use -print-rank-map.

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

It could be more efficient to inline by hand BLAS1 operations

[ 3 / 3 ] Functions mostly use all threads

Functions running on a reduced number of threads (typically sequential code) cover less than 10% of application walltime (0.00%)

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

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.00%) is spend in Libm/SVML (special functions)

▼Optimizer

Loop IDAnalysisPenalty Score
►Loop 27 - kmeans-icpx-Ofast+Execution Time: 58 % - Vectorization Ratio: 57.14 % - Vector Length Use: 18.75 %
►Loop Computation Issues+6
○[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
○[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+20
○[SA] Too many paths (16 paths) - Simplify control structure. There are 16 issues ( = paths) costing 1 point each with a malus of 4 points.20
►Data Access Issues+4
○[SA] Presence of special instructions executing on a single port (SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 4 issues (= instructions) costing 1 point each.4
►Vectorization Roadblocks+20
○[SA] Too many paths (16 paths) - Simplify control structure. There are 16 issues ( = paths) costing 1 point each with a malus of 4 points.20
►Inefficient Vectorization+4
○[SA] Presence of special instructions executing on a single port (SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 4 issues (= instructions) costing 1 point each.4
►Loop 26 - kmeans-icpx-Ofast+Execution Time: 2 % - Vectorization Ratio: 58.57 % - Vector Length Use: 19.38 %
►Loop Computation Issues+11
○[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
○[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
○[SA] Peel/tail loop, considered having a low iteration count - Perform full unroll. Force compiler to use masked instructions. This issue costs 5 points.5
►Control Flow Issues+7
○[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
○[SA] Peel/tail loop, considered having a low iteration count - Perform full unroll. Force compiler to use masked instructions. This issue costs 5 points.5
►Data Access Issues+1
○[SA] Presence of special instructions executing on a single port (SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 1 issues (= instructions) costing 1 point each.1
►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
►Inefficient Vectorization+1
○[SA] Presence of special instructions executing on a single port (SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 1 issues (= instructions) costing 1 point each.1
►Loop 24 - kmeans-icpx-Ofast+Execution Time: 2 % - Vectorization Ratio: 0.00 % - Vector Length Use: 9.90 %
►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 (13364 paths) - Simplify control structure. There are 13364 issues ( = paths) costing 1 point, limited to 1000.1000
○[SA] Non innermost loop (Outermost) - Collapse loop with innermost ones. This issue costs 2 points.2
►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+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 (13364 paths) - Simplify control structure. There are 13364 issues ( = paths) costing 1 point, limited to 1000.1000
○[SA] Non innermost loop (Outermost) - Collapse loop with innermost ones. This issue costs 2 points.2
►Loop 25 - kmeans-icpx-Ofast+Execution Time: 2 % - Vectorization Ratio: 42.86 % - Vector Length Use: 16.07 %
►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+57
○[SA] Too many paths (51 paths) - Simplify control structure. There are 51 issues ( = paths) costing 1 point each with a malus of 4 points.55
○[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
►Vectorization Roadblocks+57
○[SA] Too many paths (51 paths) - Simplify control structure. There are 51 issues ( = paths) costing 1 point each with a malus of 4 points.55
○[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2

▼Strategizer  

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

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

[ 4 / 4 ] Threads activity is good

On average, more than 207.19% of observed threads are actually active

[ 3 / 4 ] CPU activity is below 90% (84.20%)

CPU cores are idle more than 10% of time. Threads supposed to run on these cores are probably IO/sync waiting. Some hints: use faster filesystems to read/write data, improve parallel load balancing and/or scheduling.

[ 4 / 4 ] Loop profile is not flat

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

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

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

[ 3 / 4 ] Affinity stability is lower than 90% (78.35%)

Threads are often migrating to other CPU cores/threads. For OpenMP, typically set (OMP_PLACES=cores OMP_PROC_BIND=close) or (OMP_PLACES=threads OMP_PROC_BIND=spread). With OpenMPI + OpenMP, use --bind-to core --map-by node:PE=$OMP_NUM_THREADS --report-bindings. With IntelMPI + OpenMP, set I_MPI_PIN_DOMAIN=omp:compact or I_MPI_PIN_DOMAIN=omp:scatter and use -print-rank-map.

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

It could be more efficient to inline by hand BLAS1 operations

[ 3 / 3 ] Functions mostly use all threads

Functions running on a reduced number of threads (typically sequential code) cover less than 10% of application walltime (0.01%)

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

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.00%) is spend in Libm/SVML (special functions)

▼Optimizer

Loop IDAnalysisPenalty Score
►Loop 27 - kmeans-icpx-Ofast+Execution Time: 59 % - Vectorization Ratio: 57.14 % - Vector Length Use: 18.75 %
►Loop Computation Issues+6
○[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
○[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+20
○[SA] Too many paths (16 paths) - Simplify control structure. There are 16 issues ( = paths) costing 1 point each with a malus of 4 points.20
►Data Access Issues+4
○[SA] Presence of special instructions executing on a single port (SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 4 issues (= instructions) costing 1 point each.4
►Vectorization Roadblocks+20
○[SA] Too many paths (16 paths) - Simplify control structure. There are 16 issues ( = paths) costing 1 point each with a malus of 4 points.20
►Inefficient Vectorization+4
○[SA] Presence of special instructions executing on a single port (SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 4 issues (= instructions) costing 1 point each.4
►Loop 24 - kmeans-icpx-Ofast+Execution Time: 2 % - Vectorization Ratio: 0.00 % - Vector Length Use: 9.90 %
►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 (13364 paths) - Simplify control structure. There are 13364 issues ( = paths) costing 1 point, limited to 1000.1000
○[SA] Non innermost loop (Outermost) - Collapse loop with innermost ones. This issue costs 2 points.2
►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+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 (13364 paths) - Simplify control structure. There are 13364 issues ( = paths) costing 1 point, limited to 1000.1000
○[SA] Non innermost loop (Outermost) - Collapse loop with innermost ones. This issue costs 2 points.2
►Loop 26 - kmeans-icpx-Ofast+Execution Time: 2 % - Vectorization Ratio: 58.57 % - Vector Length Use: 19.38 %
►Loop Computation Issues+11
○[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
○[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
○[SA] Peel/tail loop, considered having a low iteration count - Perform full unroll. Force compiler to use masked instructions. This issue costs 5 points.5
►Control Flow Issues+7
○[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
○[SA] Peel/tail loop, considered having a low iteration count - Perform full unroll. Force compiler to use masked instructions. This issue costs 5 points.5
►Data Access Issues+1
○[SA] Presence of special instructions executing on a single port (SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 1 issues (= instructions) costing 1 point each.1
►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
►Inefficient Vectorization+1
○[SA] Presence of special instructions executing on a single port (SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 1 issues (= instructions) costing 1 point each.1
►Loop 25 - kmeans-icpx-Ofast+Execution Time: 2 % - Vectorization Ratio: 42.86 % - Vector Length Use: 16.07 %
►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+57
○[SA] Too many paths (51 paths) - Simplify control structure. There are 51 issues ( = paths) costing 1 point each with a malus of 4 points.55
○[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
►Vectorization Roadblocks+57
○[SA] Too many paths (51 paths) - Simplify control structure. There are 51 issues ( = paths) costing 1 point each with a malus of 4 points.55
○[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2

▼Strategizer  

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

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

[ 4 / 4 ] Threads activity is good

On average, more than 265.57% of observed threads are actually active

[ 3 / 4 ] CPU activity is below 90% (81.67%)

CPU cores are idle more than 10% of time. Threads supposed to run on these cores are probably IO/sync waiting. Some hints: use faster filesystems to read/write data, improve parallel load balancing and/or scheduling.

[ 4 / 4 ] Loop profile is not flat

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

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

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

[ 3 / 4 ] Affinity stability is lower than 90% (78.33%)

Threads are often migrating to other CPU cores/threads. For OpenMP, typically set (OMP_PLACES=cores OMP_PROC_BIND=close) or (OMP_PLACES=threads OMP_PROC_BIND=spread). With OpenMPI + OpenMP, use --bind-to core --map-by node:PE=$OMP_NUM_THREADS --report-bindings. With IntelMPI + OpenMP, set I_MPI_PIN_DOMAIN=omp:compact or I_MPI_PIN_DOMAIN=omp:scatter and use -print-rank-map.

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

It could be more efficient to inline by hand BLAS1 operations

[ 3 / 3 ] Functions mostly use all threads

Functions running on a reduced number of threads (typically sequential code) cover less than 10% of application walltime (0.01%)

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

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.00%) is spend in Libm/SVML (special functions)

▼Optimizer

Loop IDAnalysisPenalty Score
►Loop 27 - kmeans-icpx-Ofast+Execution Time: 60 % - Vectorization Ratio: 57.14 % - Vector Length Use: 18.75 %
►Loop Computation Issues+6
○[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
○[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+20
○[SA] Too many paths (16 paths) - Simplify control structure. There are 16 issues ( = paths) costing 1 point each with a malus of 4 points.20
►Data Access Issues+4
○[SA] Presence of special instructions executing on a single port (SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 4 issues (= instructions) costing 1 point each.4
►Vectorization Roadblocks+20
○[SA] Too many paths (16 paths) - Simplify control structure. There are 16 issues ( = paths) costing 1 point each with a malus of 4 points.20
►Inefficient Vectorization+4
○[SA] Presence of special instructions executing on a single port (SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 4 issues (= instructions) costing 1 point each.4
►Loop 26 - kmeans-icpx-Ofast+Execution Time: 2 % - Vectorization Ratio: 58.57 % - Vector Length Use: 19.38 %
►Loop Computation Issues+11
○[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
○[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
○[SA] Peel/tail loop, considered having a low iteration count - Perform full unroll. Force compiler to use masked instructions. This issue costs 5 points.5
►Control Flow Issues+7
○[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
○[SA] Peel/tail loop, considered having a low iteration count - Perform full unroll. Force compiler to use masked instructions. This issue costs 5 points.5
►Data Access Issues+1
○[SA] Presence of special instructions executing on a single port (SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 1 issues (= instructions) costing 1 point each.1
►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
►Inefficient Vectorization+1
○[SA] Presence of special instructions executing on a single port (SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 1 issues (= instructions) costing 1 point each.1
►Loop 24 - kmeans-icpx-Ofast+Execution Time: 2 % - Vectorization Ratio: 0.00 % - Vector Length Use: 9.90 %
►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 (13364 paths) - Simplify control structure. There are 13364 issues ( = paths) costing 1 point, limited to 1000.1000
○[SA] Non innermost loop (Outermost) - Collapse loop with innermost ones. This issue costs 2 points.2
►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+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 (13364 paths) - Simplify control structure. There are 13364 issues ( = paths) costing 1 point, limited to 1000.1000
○[SA] Non innermost loop (Outermost) - Collapse loop with innermost ones. This issue costs 2 points.2
►Loop 25 - kmeans-icpx-Ofast+Execution Time: 2 % - Vectorization Ratio: 42.86 % - Vector Length Use: 16.07 %
►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+57
○[SA] Too many paths (51 paths) - Simplify control structure. There are 51 issues ( = paths) costing 1 point each with a malus of 4 points.55
○[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
►Vectorization Roadblocks+57
○[SA] Too many paths (51 paths) - Simplify control structure. There are 51 issues ( = paths) costing 1 point each with a malus of 4 points.55
○[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2

▼Strategizer  

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

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

[ 4 / 4 ] Threads activity is good

On average, more than 311.38% of observed threads are actually active

[ 3 / 4 ] CPU activity is below 90% (80.38%)

CPU cores are idle more than 10% of time. Threads supposed to run on these cores are probably IO/sync waiting. Some hints: use faster filesystems to read/write data, improve parallel load balancing and/or scheduling.

[ 4 / 4 ] Loop profile is not flat

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

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

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

[ 3 / 4 ] Affinity stability is lower than 90% (78.29%)

Threads are often migrating to other CPU cores/threads. For OpenMP, typically set (OMP_PLACES=cores OMP_PROC_BIND=close) or (OMP_PLACES=threads OMP_PROC_BIND=spread). With OpenMPI + OpenMP, use --bind-to core --map-by node:PE=$OMP_NUM_THREADS --report-bindings. With IntelMPI + OpenMP, set I_MPI_PIN_DOMAIN=omp:compact or I_MPI_PIN_DOMAIN=omp:scatter and use -print-rank-map.

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

It could be more efficient to inline by hand BLAS1 operations

[ 3 / 3 ] Functions mostly use all threads

Functions running on a reduced number of threads (typically sequential code) cover less than 10% of application walltime (0.06%)

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

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.00%) is spend in Libm/SVML (special functions)

▼Optimizer

Loop IDAnalysisPenalty Score
►Loop 27 - kmeans-icpx-Ofast+Execution Time: 59 % - Vectorization Ratio: 57.14 % - Vector Length Use: 18.75 %
►Loop Computation Issues+6
○[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
○[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+20
○[SA] Too many paths (16 paths) - Simplify control structure. There are 16 issues ( = paths) costing 1 point each with a malus of 4 points.20
►Data Access Issues+4
○[SA] Presence of special instructions executing on a single port (SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 4 issues (= instructions) costing 1 point each.4
►Vectorization Roadblocks+20
○[SA] Too many paths (16 paths) - Simplify control structure. There are 16 issues ( = paths) costing 1 point each with a malus of 4 points.20
►Inefficient Vectorization+4
○[SA] Presence of special instructions executing on a single port (SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 4 issues (= instructions) costing 1 point each.4
►Loop 26 - kmeans-icpx-Ofast+Execution Time: 2 % - Vectorization Ratio: 58.57 % - Vector Length Use: 19.38 %
►Loop Computation Issues+11
○[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
○[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
○[SA] Peel/tail loop, considered having a low iteration count - Perform full unroll. Force compiler to use masked instructions. This issue costs 5 points.5
►Control Flow Issues+7
○[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
○[SA] Peel/tail loop, considered having a low iteration count - Perform full unroll. Force compiler to use masked instructions. This issue costs 5 points.5
►Data Access Issues+1
○[SA] Presence of special instructions executing on a single port (SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 1 issues (= instructions) costing 1 point each.1
►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
►Inefficient Vectorization+1
○[SA] Presence of special instructions executing on a single port (SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 1 issues (= instructions) costing 1 point each.1
►Loop 24 - kmeans-icpx-Ofast+Execution Time: 2 % - Vectorization Ratio: 0.00 % - Vector Length Use: 9.90 %
►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 (13364 paths) - Simplify control structure. There are 13364 issues ( = paths) costing 1 point, limited to 1000.1000
○[SA] Non innermost loop (Outermost) - Collapse loop with innermost ones. This issue costs 2 points.2
►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+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 (13364 paths) - Simplify control structure. There are 13364 issues ( = paths) costing 1 point, limited to 1000.1000
○[SA] Non innermost loop (Outermost) - Collapse loop with innermost ones. This issue costs 2 points.2
►Loop 25 - kmeans-icpx-Ofast+Execution Time: 2 % - Vectorization Ratio: 42.86 % - Vector Length Use: 16.07 %
►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+57
○[SA] Too many paths (51 paths) - Simplify control structure. There are 51 issues ( = paths) costing 1 point each with a malus of 4 points.55
○[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
►Vectorization Roadblocks+57
○[SA] Too many paths (51 paths) - Simplify control structure. There are 51 issues ( = paths) costing 1 point each with a malus of 4 points.55
○[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2

▼Strategizer  

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

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

[ 4 / 4 ] Threads activity is good

On average, more than 336.09% of observed threads are actually active

[ 3 / 4 ] CPU activity is below 90% (79.99%)

CPU cores are idle more than 10% of time. Threads supposed to run on these cores are probably IO/sync waiting. Some hints: use faster filesystems to read/write data, improve parallel load balancing and/or scheduling.

[ 4 / 4 ] Loop profile is not flat

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

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

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

[ 3 / 4 ] Affinity stability is lower than 90% (78.39%)

Threads are often migrating to other CPU cores/threads. For OpenMP, typically set (OMP_PLACES=cores OMP_PROC_BIND=close) or (OMP_PLACES=threads OMP_PROC_BIND=spread). With OpenMPI + OpenMP, use --bind-to core --map-by node:PE=$OMP_NUM_THREADS --report-bindings. With IntelMPI + OpenMP, set I_MPI_PIN_DOMAIN=omp:compact or I_MPI_PIN_DOMAIN=omp:scatter and use -print-rank-map.

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

It could be more efficient to inline by hand BLAS1 operations

[ 3 / 3 ] Functions mostly use all threads

Functions running on a reduced number of threads (typically sequential code) cover less than 10% of application walltime (0.11%)

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

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.00%) is spend in Libm/SVML (special functions)

▼Optimizer

Loop IDAnalysisPenalty Score
►Loop 27 - kmeans-icpx-Ofast+Execution Time: 59 % - Vectorization Ratio: 57.14 % - Vector Length Use: 18.75 %
►Loop Computation Issues+6
○[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
○[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+20
○[SA] Too many paths (16 paths) - Simplify control structure. There are 16 issues ( = paths) costing 1 point each with a malus of 4 points.20
►Data Access Issues+4
○[SA] Presence of special instructions executing on a single port (SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 4 issues (= instructions) costing 1 point each.4
►Vectorization Roadblocks+20
○[SA] Too many paths (16 paths) - Simplify control structure. There are 16 issues ( = paths) costing 1 point each with a malus of 4 points.20
►Inefficient Vectorization+4
○[SA] Presence of special instructions executing on a single port (SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 4 issues (= instructions) costing 1 point each.4
►Loop 26 - kmeans-icpx-Ofast+Execution Time: 2 % - Vectorization Ratio: 58.57 % - Vector Length Use: 19.38 %
►Loop Computation Issues+11
○[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
○[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
○[SA] Peel/tail loop, considered having a low iteration count - Perform full unroll. Force compiler to use masked instructions. This issue costs 5 points.5
►Control Flow Issues+7
○[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
○[SA] Peel/tail loop, considered having a low iteration count - Perform full unroll. Force compiler to use masked instructions. This issue costs 5 points.5
►Data Access Issues+1
○[SA] Presence of special instructions executing on a single port (SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 1 issues (= instructions) costing 1 point each.1
►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
►Inefficient Vectorization+1
○[SA] Presence of special instructions executing on a single port (SHUFFLE/PERM) - Simplify data access and try to get stride 1 access. There are 1 issues (= instructions) costing 1 point each.1
►Loop 24 - kmeans-icpx-Ofast+Execution Time: 2 % - Vectorization Ratio: 0.00 % - Vector Length Use: 9.90 %
►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 (13364 paths) - Simplify control structure. There are 13364 issues ( = paths) costing 1 point, limited to 1000.1000
○[SA] Non innermost loop (Outermost) - Collapse loop with innermost ones. This issue costs 2 points.2
►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+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 (13364 paths) - Simplify control structure. There are 13364 issues ( = paths) costing 1 point, limited to 1000.1000
○[SA] Non innermost loop (Outermost) - Collapse loop with innermost ones. This issue costs 2 points.2
►Loop 25 - kmeans-icpx-Ofast+Execution Time: 2 % - Vectorization Ratio: 42.86 % - Vector Length Use: 16.07 %
►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+57
○[SA] Too many paths (51 paths) - Simplify control structure. There are 51 issues ( = paths) costing 1 point each with a malus of 4 points.55
○[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
►Vectorization Roadblocks+57
○[SA] Too many paths (51 paths) - Simplify control structure. There are 51 issues ( = paths) costing 1 point each with a malus of 4 points.55
○[SA] Non innermost loop (InBetween) - Collapse loop with innermost ones. This issue costs 2 points.2
×