Требуется сделать анализ заданнового цикла в форме отчёта: Шаблон отчёта: template_report.docx
Внимание Инструкция ниже предназначена для Windows платформ. Если вы используете систему Linux (что похвально!), то
- llvm-extract следует вызвать со следущим параметром
-func=_ZN8testFunc3runEv
- Это связано с различной схемой декорирования имен (name mangling) для Linux и Windows
- Не имеет большого смысла использовать расширение
.exe
для компиляции
- Определить конфигурацию тестовой платформы. Занести в отчет в секцию "Конфигурация".
- Создать секцию исследуемый цикл и добавить туда исходный код цикла из вашего варианта
- Получить 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
- Получить 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
- Получить 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
- Получить 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
- Заполнить соответсвующие таблицы отчёта.
- Сравнить полученные IR файлы, объяснить различия. Записать выводы в секцию "Анализ LLVM IR"
- Провести измерения времени исполнения цикла в тех же самых конфигурациях:
# Без векторизации и раскрутки
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
- Занести результаты в таблицу
- Записать выводы в секцию "Анализ времени исполнения"