-
Yifan Zhao authoredYifan Zhao authored
CMakeLists.txt 3.31 KiB
# Each source file contains a @MODEL_PARAMS_DIR@ waiting to be filled in.
set(MODEL_PARAMS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../model_params/")
set(test_compile_targets "")
function(compile_hpvm_c target_name src_filepath codegen_target)
set(generated_file_path "${CMAKE_CURRENT_BINARY_DIR}/${target_name}.cpp")
set(output_bin_path "${CMAKE_CURRENT_BINARY_DIR}/hpvm_${target_name}")
configure_file(${src_filepath} ${generated_file_path})
# Add an "hpvm_" prefix here because Ninja generator doesn't like
# the name of output file and custom target to clash.
add_custom_command(
OUTPUT ${output_bin_path}
DEPENDS ${generated_file_path} hpvm-clang
COMMAND hpvm-clang
${generated_file_path} ${output_bin_path} -O3 -fno-exceptions
-t ${codegen_target} ${ARGN}
)
add_custom_target(${target_name} DEPENDS ${output_bin_path})
set(test_compile_targets ${test_compile_targets} ${target_name} PARENT_SCOPE)
endfunction(compile_hpvm_c)
function(hpvm_add_dnn_test benchmark_target)
# llvm_test_run* composes a .test file with the RUN line needed by llvm-lit
# No need to give binary path yet;
# llvm_add_test_for_target knows the binary path from target name
# Runs the binary with no argument
llvm_test_run()
# Requests comparison of accuracy
llvm_test_run(EXECUTABLE check_dnn_acc.py final_accuracy ${benchmark_target})
# Removes the final_accuracy file
llvm_test_run(EXECUTABLE rm final_accuracy)
# llvm_add_test creates .test file to given output path for given binary.
# Also add "hpvm_" prefix here because compile_hpvm_c() did.
llvm_add_test(${benchmark_target}.test ${CMAKE_CURRENT_BINARY_DIR}/hpvm_${benchmark_target})
# TODO: add_dependencies
endfunction(hpvm_add_dnn_test)
file(GLOB entries ./benchmarks/*)
foreach(dir ${entries})
get_filename_component(dirname "${dir}" NAME)
# Generate "tensor"-targeted code
compile_hpvm_c(
${dirname} ${dir}/${dirname}.cpp tensor
--conf-file ${dir}/data/tuner_confs.txt
)
hpvm_add_dnn_test(${dirname})
# Generate "cudnn"-targeted code
compile_hpvm_c(${dirname}_cudnn ${dir}/${dirname}_cudnn.cpp cudnn)
hpvm_add_dnn_test(${dirname}_cudnn)
endforeach(dir)
# Install an accuracy comparator under build/bin for test suite.
set(BIN_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
add_custom_command(
OUTPUT ${BIN_DIR}/check_dnn_acc.py
COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/check_dnn_acc.py ${BIN_DIR}
COMMAND chmod +x ${BIN_DIR}/check_dnn_acc.py
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/check_dnn_acc.py
)
add_custom_target(check_dnn_acc DEPENDS ${BIN_DIR}/check_dnn_acc.py)
message(STATUS "List of HPVM-C DNN benchmarks: ${test_compile_targets}")
add_custom_target(dnn_benchmarks DEPENDS ${test_compile_targets})
message(STATUS "Target name for compiling all DNN benchmarks: dnn_benchmarks")
# --[ llvm-lit test setup
# lit.cfg.py looks for tests in CMAKE_CURRENT_BINARY_DIR (see lit.cfg.py)
# as most of the tests require some kind of compilation / generation
# which is best done over there.
configure_lit_site_cfg(
../../lit.site.cfg.py.in
${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.py
MAIN_CONFIG
${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py
)
add_lit_testsuite(check-hpvm-dnn "Running HPVM DNNs"
${CMAKE_CURRENT_BINARY_DIR}
DEPENDS dnn_benchmarks check_dnn_acc # Compile all dnn benchmarks to run them
ARGS "-j1" # Run DNN benchmarks sequentially
)