From c1cb4ef99aac411af957d6c1c15ab49fc02873c3 Mon Sep 17 00:00:00 2001 From: Yifan Zhao <yifanz16@illinois.edu> Date: Wed, 7 Jul 2021 23:04:04 -0500 Subject: [PATCH] Fixed a few issues in NVDLA pass --- hpvm/cmake/BuildNVDLA.cmake | 26 ++++++++++--------- hpvm/lib/Transforms/HPVM2NVDLA/CMakeLists.txt | 4 +-- .../Transforms/HPVM2NVDLA/HPVM2NVDLAPass.cpp | 12 +++------ 3 files changed, 19 insertions(+), 23 deletions(-) diff --git a/hpvm/cmake/BuildNVDLA.cmake b/hpvm/cmake/BuildNVDLA.cmake index 12f8237b67..eaff07f658 100644 --- a/hpvm/cmake/BuildNVDLA.cmake +++ b/hpvm/cmake/BuildNVDLA.cmake @@ -2,39 +2,43 @@ get_filename_component(NVDLA_DIR ${NVDLA_DIR} ABSOLUTE) set(NVDLA_UMD_DIR ${NVDLA_DIR}/umd) set(NVDLA_LIB_DIR ${NVDLA_DIR}/lib) make_directory(${NVDLA_LIB_DIR}) +set(LIB_DIR ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) # Build Protobuf set(PROTOBUF_DIR ${NVDLA_UMD_DIR}/external/protobuf-2.6) set(COMPILER_APPS_DIR ${NVDLA_UMD_DIR}/apps/compiler) set(COMPILER_CORE_DIR ${NVDLA_UMD_DIR}/core/src/compiler) add_custom_command( - OUTPUT + OUTPUT ${COMPILER_CORE_DIR}/libprotobuf.a ${COMPILER_APPS_DIR}/libprotobuf.a - ${NVDLA_LIB_DIR}/libprotobuf.so # Final product 1 + ${NVDLA_LIB_DIR}/libprotobuf.so ${LIB_DIR}/libprotobuf.so # Final product 1 WORKING_DIRECTORY ${PROTOBUF_DIR} COMMAND ./autogen.sh && ./configure && make COMMAND cp ./src/.libs/libprotobuf.a ${COMPILER_CORE_DIR} COMMAND cp ./src/.libs/libprotobuf.a ${COMPILER_APPS_DIR} - # Some versions of OS may need all of these: + COMMAND cp ./src/.libs/libprotobuf.a ${LIB_DIR} COMMAND mkdir -p ${NVDLA_LIB_DIR} - COMMAND cp ./src/.libs/libprotobuf.so ${NVDLA_LIB_DIR}/libprotobuf.so.9.0.1 - COMMAND ln -s ${NVDLA_LIB_DIR}/libprotobuf.so.9.0.1 ${NVDLA_LIB_DIR}/libprotobuf.so.9 - COMMAND ln -s ${NVDLA_LIB_DIR}/libprotobuf.so.9 ${NVDLA_LIB_DIR}/libprotobuf.so + COMMAND cp ./src/.libs/libprotobuf.so ${NVDLA_LIB_DIR}/libprotobuf.so + COMMAND cp ./src/.libs/libprotobuf.so ${LIB_DIR}/libprotobuf.so.9.0.1 + COMMAND ln -s ${LIB_DIR}/libprotobuf.so.9.0.1 ${LIB_DIR}/libprotobuf.so.9 + COMMAND ln -s ${LIB_DIR}/libprotobuf.so.9 ${LIB_DIR}/libprotobuf.so ) # Build NVDLA library add_custom_command( - OUTPUT ${COMPILER_APPS_DIR}/libnvdla_compiler.so # Final product 2 + OUTPUT ${COMPILER_APPS_DIR}/libnvdla_compiler.so ${LIB_DIR}/libnvdla_compiler.so # Final product 2 WORKING_DIRECTORY ${NVDLA_UMD_DIR} COMMAND make TOP=${NVDLA_UMD_DIR} COMMAND cp ${NVDLA_UMD_DIR}/out/core/src/compiler/libnvdla_compiler/libnvdla_compiler.so ${COMPILER_APPS_DIR} + COMMAND cp ${NVDLA_UMD_DIR}/out/core/src/compiler/libnvdla_compiler/libnvdla_compiler.so ${LIB_DIR} + DEPENDS ${NVDLA_LIB_DIR}/libprotobuf.so ${COMPILER_CORE_DIR}/libprotobuf.a ) # What's funny is Make and Ninja don't see these .so files without a custom target # even though the user of these files is right there (NVDLA) # So we add these custom target rules here. -add_custom_target(nvdla-protobuf DEPENDS ${NVDLA_LIB_DIR}/libprotobuf.so) -add_custom_target(nvdla-compiler DEPENDS ${COMPILER_APPS_DIR}/libnvdla_compiler.so) +add_custom_target(nvdla-protobuf DEPENDS ${LIB_DIR}/libprotobuf.so) +add_custom_target(nvdla-compiler DEPENDS ${LIB_DIR}/libnvdla_compiler.so nvdla-protobuf) add_library(NVDLA INTERFACE) target_include_directories( @@ -46,9 +50,7 @@ target_include_directories( $<INSTALL_INTERFACE:include/umd> ) target_link_libraries( - NVDLA INTERFACE - ${COMPILER_APPS_DIR}/libnvdla_compiler.so - ${NVDLA_LIB_DIR}/libprotobuf.so + NVDLA INTERFACE ${LIB_DIR}/libnvdla_compiler.so ${LIB_DIR}/libprotobuf.so ) add_dependencies(NVDLA nvdla-protobuf nvdla-compiler) diff --git a/hpvm/lib/Transforms/HPVM2NVDLA/CMakeLists.txt b/hpvm/lib/Transforms/HPVM2NVDLA/CMakeLists.txt index 33df6f864f..d8b5e13763 100644 --- a/hpvm/lib/Transforms/HPVM2NVDLA/CMakeLists.txt +++ b/hpvm/lib/Transforms/HPVM2NVDLA/CMakeLists.txt @@ -2,9 +2,7 @@ if(WIN32 OR CYGWIN) set(LLVM_LINK_COMPONENTS Core Support) endif() -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DLLVM_BUILD_DIR=${CMAKE_BINARY_DIR}") - -set(LLVM_REQUIRES_EH True) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -DLLVM_BUILD_DIR=${CMAKE_BINARY_DIR}") add_llvm_library( LLVMHPVM2NVDLAPass diff --git a/hpvm/lib/Transforms/HPVM2NVDLA/HPVM2NVDLAPass.cpp b/hpvm/lib/Transforms/HPVM2NVDLA/HPVM2NVDLAPass.cpp index 1f5f5be849..6f45ab2256 100644 --- a/hpvm/lib/Transforms/HPVM2NVDLA/HPVM2NVDLAPass.cpp +++ b/hpvm/lib/Transforms/HPVM2NVDLA/HPVM2NVDLAPass.cpp @@ -1186,7 +1186,7 @@ void CGT_NVDLA::codeGen(DFLeafNode *N) { // Get the function associated with the dataflow node auto *F = N->getFuncPointer(); - DEBUG(errs()<<"function name = "<< F->getName()<<"\n"); + LLVM_DEBUG(errs()<<"function name = "<< F->getName()<<"\n"); // Generate code for every instruction in this node for (inst_iterator i = inst_begin(F), e = inst_end(F); i != e; ++i) { @@ -1194,9 +1194,6 @@ void CGT_NVDLA::codeGen(DFLeafNode *N) { if (BuildDFG::isHPVMIntrinsic(I)) { auto *II = dyn_cast<IntrinsicInst>(I); - assert((II->getCalledFunction()->getName()).startswith("llvm.hpvm.tensor") - && "Only HPVM tensor intrinsics allowed in ApproxHPVM leaf nodes\n"); - switch (II->getIntrinsicID()) { case Intrinsic::hpvm_tensor_convolution: case Intrinsic::hpvm_tensor_group_convolution: @@ -1235,7 +1232,8 @@ void CGT_NVDLA::codeGen(DFLeafNode *N) { case Intrinsic::hpvm_tensor_softmax: generateSoftMaxLayer(N, II); break; - + case Intrinsic::hpvm_node_id: + break; default: llvm_unreachable("Unknown HPVM Intrinsic!"); break; @@ -1456,9 +1454,7 @@ NvDlaError CGT_NVDLA::compileProfile(const TestAppArgs* appArgs, TestInfo* i) { // Compile DEBUG(NvDlaDebugPrintf("compiling profile \"%s\"... config \"%s\"...\n", profileName.c_str(), targetConfigName.c_str())); - //PROPAGATE_ERROR_FAIL(compiler->compile(profileName.c_str(), targetConfigName.c_str(), &i->compiledLoadable)); - - compiler->compile(profileName.c_str(), targetConfigName.c_str(), &i->compiledLoadable); + PROPAGATE_ERROR_FAIL(compiler->compile(profileName.c_str(), targetConfigName.c_str(), &i->compiledLoadable)); // Get loadable buffer and dump it into a file PROPAGATE_ERROR_FAIL(compiler->getLoadableImageSize(profileName.c_str(), -- GitLab