Skip to content
Snippets Groups Projects
Commit 044cb850 authored by Yifan Zhao's avatar Yifan Zhao
Browse files

Added cmake compilation for test/dnn_benchmarks

parent 1d889bb3
No related branches found
No related tags found
No related merge requests found
...@@ -160,3 +160,5 @@ add_lit_testsuites(HPVM ${CMAKE_CURRENT_SOURCE_DIR} ...@@ -160,3 +160,5 @@ add_lit_testsuites(HPVM ${CMAKE_CURRENT_SOURCE_DIR}
add_custom_target(hpvm-check) add_custom_target(hpvm-check)
add_dependencies(hpvm-check check-hpvm) add_dependencies(hpvm-check check-hpvm)
set_target_properties(hpvm-check PROPERTIES FOLDER "Tests") set_target_properties(hpvm-check PROPERTIES FOLDER "Tests")
add_subdirectory(dnn_benchmarks)
# Look for CUDA again (already done in hpvm-tensor-rt) so we can include its header
# This is not the best practice,
# but easier than having the tensor runtime tell us which CUDA it used.
find_package(CUDA REQUIRED)
get_filename_component(LLVM_BIN_DIR ${PROJECT_BINARY_DIR}/bin REALPATH)
set(LLVM_CLANG_XX "${LLVM_BIN_DIR}/clang++")
set(LLVM_OPT "${LLVM_BIN_DIR}/opt")
set(LLVM_LINK "${LLVM_BIN_DIR}/llvm-link")
# Directories to include
set(HPVM_PROJECTS ${PROJECT_SOURCE_DIR}/tools/hpvm/projects)
set(HPVM_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../benchmarks/include)
set(TENSOR_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
set(TENSOR_RT_INCLUDE_DIR ${HPVM_PROJECTS}/hpvm-tensor-rt/tensor_runtime/include)
set(INCLUDES ${HPVM_INCLUDE_DIR} ${TENSOR_INCLUDE_DIR} ${TENSOR_RT_INCLUDE_DIR} ${CUDA_INCLUDE_DIRS})
foreach(dir ${INCLUDES})
list(APPEND INCLUDE_COMPILER_STRINGS "-I${dir}")
endforeach()
# Built-in libraries to link
list(APPEND LINKER_FLAGS -lpthread -lcudart -lcurand -lcudnn -lcublas -lcufft -lOpenCL -lstdc++fs -lomp)
# The hpvm-rt runtime
# This has to be explicitly set as hpvm-rt.ll is created in a custom_target
# and does not export its file location.
# Keep this in sync with hpvm/projects/hpvm-rt/CMakeLists.txt.
set(HPVM_RT_PATH ${PROJECT_BINARY_DIR}/tools/hpvm/projects/hpvm-rt/hpvm-rt.ll)
# Optimization flags
set(
HPVM_OPT_PASSES
-load LLVMBuildDFG.so
-load LLVMInPlaceDFGAnalysis.so
-load LLVMDFG2LLVM_CUDNN.so
-load LLVMDFG2LLVM_CPU.so
-load LLVMClearDFG.so
-inplace -dfg2llvm-cpu -dfg2llvm-cudnn -clearDFG
)
# Manually specify dependencies because we're not using cmake "normally"
list(
APPEND DEPEND
clang opt llvm-link # LLVM binaries
hpvm-rt.ll # HPVM runtime
LLVMGenHPVM LLVMBuildDFG LLVMInPlaceDFGAnalysis LLVMDFG2LLVM_CUDNN LLVMDFG2LLVM_CPU LLVMClearDFG # Passes
)
file(GLOB entries ./benchmarks/*)
set(test_targets "")
foreach(entry ${entries})
if(IS_DIRECTORY ${entry} AND IS_DIRECTORY ${entry}/src)
file(GLOB src_files ${entry}/src/*.cpp)
foreach(src_file ${src_files})
get_filename_component(target "${src_file}" NAME_WE)
set(target "test_${target}")
list(APPEND test_targets ${target})
set(WORK_DIR ${CMAKE_CURRENT_BINARY_DIR})
add_custom_command(
OUTPUT "${target}.ll"
DEPENDS ${src_file}
COMMAND ${LLVM_CLANG_XX} ${INCLUDE_COMPILER_STRINGS} -emit-llvm -S -O1 ${src_file}
-o ${WORK_DIR}/${target}.ll
)
add_custom_command(
OUTPUT "${target}.opt.bc"
DEPENDS "${target}.ll"
COMMAND ${LLVM_OPT} -load LLVMGenHPVM.so -genhpvm -globaldce -S ${WORK_DIR}/${target}.ll
-o ${WORK_DIR}/${target}.hpvm.ll
COMMAND ${LLVM_OPT} ${HPVM_OPT_PASSES} ${WORK_DIR}/${target}.hpvm.ll
-o ${WORK_DIR}/${target}_cudnn.bc
COMMAND ${LLVM_LINK} ${WORK_DIR}/${target}_cudnn.bc ${HPVM_RT_PATH}
-o ${WORK_DIR}/${target}_cudnn_linked.bc
COMMAND ${LLVM_CLANG_XX} ${WORK_DIR}/${target}_cudnn_linked.bc $<TARGET_FILE:tensor_runtime>
-o ${WORK_DIR}/${target}_cudnn_linked ${LINKER_FLAGS}
)
add_custom_target(${target} DEPENDS "${target}.opt.bc")
add_dependencies(${target} ${DEPEND})
endforeach()
endif()
endforeach(entry)
message(STATUS "List of test dnn benchmarks: ${test_targets}")
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment