Как понять ускорение в отчете оптимизации от компилятора icc? - PullRequest
0 голосов
/ 08 ноября 2018

среда:
icc версия 19.0.0.117 (совместимость с gcc версии 5.4.0)
Кластер Intel для параллельной студии XE, выпуск 2019
Процессор Intel (R) Core (TM) i7-4790 @ 3,60 ГГц
Ubuntu 16.04

флаги компилятора:
-std = gnu11 -Wall -xHost -xCORE-AVX2 -O2 -fma -qopenmp -qopenmp-simd -qopt-report = 5 -qopt-report-phase = all

Я использую OpenMP SIMD или Intel Parama, чтобы векторизовать мой цикл для ускорения. В отчете по оптимизации, сгенерированном icc, я обычно вижу следующий результат:

LOOP BEGIN at get_forces.c(3668,3)
   remark #15389: vectorization support: reference mon->fricforce[n1][d] has unaligned access   [ get_forces.c(3669,4) ]
   remark #15389: vectorization support: reference mon->vel[n1][d] has unaligned access   [ get_forces.c(3669,36) ]
   remark #15389: vectorization support: reference vel[n1][d] has unaligned access   [ get_forces.c(3669,51) ]
   remark #15389: vectorization support: reference mon->drag[n1][d] has unaligned access   [ get_forces.c(3671,4) ]
   remark #15389: vectorization support: reference mon->vel[n1][d] has unaligned access   [ get_forces.c(3671,40) ]
   remark #15389: vectorization support: reference vel[n1][d] has unaligned access   [ get_forces.c(3671,57) ]
   remark #15381: vectorization support: unaligned access used inside loop body
   remark #15305: vectorization support: vector length 2
   remark #15309: vectorization support: normalized vectorization overhead 0.773
   remark #15300: LOOP WAS VECTORIZED
   remark #15450: unmasked unaligned unit stride loads: 3 
   remark #15451: unmasked unaligned unit stride stores: 2 
   remark #15475: --- begin vector cost summary ---
   remark #15476: scalar cost: 21 
   remark #15477: vector cost: 11.000 
   remark #15478: estimated potential speedup: 1.050 
   remark #15488: --- end vector cost summary ---
   remark #25456: Number of Array Refs Scalar Replaced In Loop: 1
   remark #25015: Estimate of max trip count of loop=1
LOOP END

Мой вопрос: Я не понимаю, как рассчитывается ускорение от

normalized vectorization overhead 0.773
scalar cost: 21 
vector cost: 11.000 

Еще один более экстремальный и загадочный случай может быть

LOOP BEGIN at get_forces.c(2690,8)
<Distributed chunk3>
   remark #15388: vectorization support: reference q12[j] has aligned access   [ get_forces.c(2694,19) ]
   remark #15388: vectorization support: reference q12[j] has aligned access   [ get_forces.c(2694,26) ]
   remark #15335: loop was not vectorized: vectorization possible but seems inefficient. Use vector always directive or -vec-threshold0 to override 
   remark #15305: vectorization support: vector length 2
   remark #15309: vectorization support: normalized vectorization overhead 1.857
   remark #15448: unmasked aligned unit stride loads: 1 
   remark #15475: --- begin vector cost summary ---
   remark #15476: scalar cost: 7 
   remark #15477: vector cost: 3.500 
   remark #15478: estimated potential speedup: 0.770 
   remark #15488: --- end vector cost summary ---
   remark #25436: completely unrolled by 3  
LOOP END

Теперь 3,5 + 1,857 = 5,357 <7 <br> Таким образом, я все еще могу симдировать этот цикл и получить ускорение, или я должен взять ускорение 0,770 в отчете, а не симд это?

Как понять ускорение в отчете по оптимизации от компилятора icc?

1 Ответ

0 голосов
/ 10 декабря 2018

«Скалярная стоимость» означает «стоимость одной итерации скалярной петли».

«Векторная стоимость» означает «стоимость одной итерации векторизованного цикла, деленная на vector_length * unroll_factor ”, то есть стоимость несколько эквивалентна одной скалярной итерации.

«Затраты на векторизацию» показывают нормированную (по стоимости векторной итерации) стоимость инициализации / завершения вектора до / после цикла.

«Расчетное потенциальное ускорение» рассчитывается для всего цикла выполнения. Он показывает нормированный (по скалярной стоимости итерации) потенциальный выигрыш от выполнения векторизованного цикла - включая отсчет, остаток и основной цикл для предполагаемого количества отключений цикла. Его нельзя получить явно из скалярной и векторной стоимости, показанной выше.

...