Skocz do: nawigacji, wyszukiwania

MICLAB:Raport o wektoryzacji


Środowisko i modele programowania

dr inż. Łukasz Szustak, Politechnika Częstochowska, IITiS
mgr inż. Kamil Halbiniak, Politechnika Częstochowska, IITiS



Raport o wektoryzacji


Niewątpliwią zaletą kompilatorów firmy Intel jest możliwość generowania raportów diagnostycznych dotyczących automatycznej wektoryzacji. Raport ten informuje, czy pętle w kodzie źródłowym zostały zwektoryzowane. W przypadku, kiedy proces wektoryzacji zakończył się niepowodzeniem, raport przedstawia co jest źródłem problemu. Wygenerowanie raportu dotyczącego wektoryzacji wymaga zastosowania następujących flag kompilatora w trakcie kompilacji kodu źródłowego: -opt-report=[n] -opt-report-phase=vec -opt-report-file=[out].


Agrumentem flagi -opt-report jest liczba określająca poziom dokładoności raportu. Może ona przyjmować następujące wartości:

  • 0 - Brak raportu;
  • 1 - Informacje na temat zwektoryzowanych fragmentów kodu;
  • 2 - Diagnoza fragmentów nie zwektoryzowanych;
  • 3 - Podsumowania dla zwektoryzowanych pętli
  • 4 - Dodatkowe informacje, np.. „data alignment”
  • 5 - Dodatkowe informacje na temat zależności danych


Argument flagi -opt-report-file określa sposób w jaki wygenerowany raport przedstawiony zostanie użytkownikowi. Może on przyjmować następujące wartości:

  • filename - nazwa pliku do którego zostanie zapisany raport;
  • stderr - raport przekierowany zostanie na standardowy strumień błędów;
  • stdout - raport przekierowany zostanie na standardowy strumień wyjścia.
W przypadku aplikacji posiadających dużą liczbę linii kodu źródłowego najlepszym rozwiązaniem okazuje się wygenerowanie raportu do pliku, ponieważ w pozostałych przypadkach raport wyświetlony zostanie w konsoli systemowej, co może poskutkować trudnościami w interpretacji. W przypadku pominięcia flagi -opt-report-file raport wygenerowany zostanie do pliku, którego nazwa składać się będzie z nazwy pliku z kodem źródłowym oraz rozszerzenia .optrpt. Przykładowa treść raportu przedstawiona została na Rysunku 1.


LOOP BEGIN at main.cpp(4180,13)
   remark #15388: vectorization support: reference array has aligned access   [ main.cpp(4182,17) ]
   remark #15412: vectorization support: streaming store was generated for array   [ main.cpp(4287,17) ]
   remark #15300: LOOP WAS VECTORIZED
   remark #15448: unmasked aligned unit stride loads: 3 
   remark #15475: --- begin vector loop cost summary ---
   remark #15476: scalar loop cost: 14 
   remark #15477: vector loop cost: 6.500 
   remark #15478: estimated potential speedup: 1.240 
   remark #15479: lightweight vector operations: 5 
   remark #15480: medium-overhead vector operations: 1 
   remark #15488: --- end vector loop cost summary ---
LOOP END
Rysunek 1. Przykładowa treść raportu dotyczącego wektoryzacji


Przedstawiony powyżej raport informuje, iż pętla rozpoczyna się w lini 4180 w pliku main.cpp została zwektoryzowana (LOOP WAS VECTORIZED). Dostęp do danych (wewnątrz pętli) znajdujących się w tablicy array odbywa się przy użyciu instrukcji wektorowych operujących na adresach odpowiednio dopasowanych w pamięci, natomiast zapis danych realizowany jest przy pomocy mechanizmu streaming stories. Informacje zawarte w sekcji loop cost summary przedstawiają koszt obliczeń skalarnych i wektorowych oraz potencjalny wzrost wydajności obliczeń.


< Manualna wektoryzacja obliczeń

Narzędzia programistyczne >