Skip to content

ArtemSkrebkov/autovectorization-practise

Repository files navigation

Практическая работа по векторизации в LLVM

Требуется сделать анализ заданнового цикла в форме отчёта: Шаблон отчёта: template_report.docx

Порядок выполнения:


Внимание Инструкция ниже предназначена для Windows платформ. Если вы используете систему Linux (что похвально!), то

  1. llvm-extract следует вызвать со следущим параметром -func=_ZN8testFunc3runEv
  2. Не имеет большого смысла использовать расширение .exe для компиляции

  1. Определить конфигурацию тестовой платформы. Занести в отчет в секцию "Конфигурация".
  2. Создать секцию исследуемый цикл и добавить туда исходный код цикла из вашего варианта
  3. Получить LLVM IR без векторизации и раскрутки:
clang -O3 -fno-vectorize -fno-unroll-loops -I./loops/vectorizable/ -DINCLUDE_TEST=\"testN.hpp\" test.cpp -emit-llvm -c -o testN.bc
llvm-extract -func=?run@testFunc@@QEAAXXZ test5.bc -o run-fn.bc
llvm-dis run-fn.bc -o run-fn.ll
  1. Получить LLVM IR без векторизации, с раскруткой:
clang -O3 -fno-vectorize -I./loops/vectorizable/ -DINCLUDE_TEST=\"testN.hpp\" test.cpp -emit-llvm -c -o testN.bc
llvm-extract -func=?run@testFunc@@QEAAXXZ testN.bc -o run-fn.bc
llvm-dis run-fn.bc -o run-fn.ll
  1. Получить LLVM IR с векторизацией, без раскрутки:
clang -O3 -fno-unroll-loops -I./loops/vectorizable/ -DINCLUDE_TEST=\"testN.hpp\" test.cpp -emit-llvm -c -o testN.bc
llvm-extract -func=?run@testFunc@@QEAAXXZ testN.bc -o run-fn.bc
llvm-dis run-fn.bc -o run-fn.ll
  1. Получить LLVM IR с векторизацией и раскруткой:
clang -O3 -I./loops/vectorizable/ -DINCLUDE_TEST=\"testN.hpp\" test.cpp -emit-llvm -c -o testN.bc
llvm-extract -func=?run@testFunc@@QEAAXXZ testN.bc -o run-fn.bc
llvm-dis run-fn.bc -o run-fn.ll
  1. Заполнить соответсвующие таблицы отчёта.
  2. Сравнить полученные IR файлы, объяснить различия. Записать выводы в секцию "Анализ LLVM IR"
  3. Провести измерения времени исполнения цикла в тех же самых конфигурациях:
# Без векторизации и раскрутки
clang -O3 -fno-vectorize -fno-unroll-loops -Rpass=loop-vectorize ./benchmark_app/main.cpp -I ./loops/vectorizable/ -DINCLUDE_TEST=\"testN.hpp\" -o ./benchmark_app.exe
./benchmark_app/benchmark_app.exe

# Без векторизации, с раскруткой
clang -O3 -fno-vectorize -Rpass=loop-vectorize ./benchmark_app/main.cpp -I ./loops/vectorizable/ -DINCLUDE_TEST=\"testN.hpp\" -o ./benchmark_app.exe
./benchmark_app/benchmark_app.exe

# С векторизацией, без раскрутки
clang -O3 -fno-unroll-loops -Rpass=loop-vectorize ./benchmark_app/main.cpp -I ./loops/vectorizable/ -DINCLUDE_TEST=\"testN.hpp\" -o ./benchmark_app.exe
./benchmark_app/benchmark_app.exe

# С векторизацией и раскруткой
clang -O3 -Rpass=loop-vectorize ./benchmark_app/main.cpp -I ./loops/vectorizable/ -DINCLUDE_TEST=\"testN.hpp\" -o ./benchmark_app.exe
./benchmark_app/benchmark_app.exe
  1. Занести результаты в таблицу
  2. Записать выводы в секцию "Анализ времени исполнения"

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages