-
Notifications
You must be signed in to change notification settings - Fork 3.7k
[RUNTIME] Initial implementation of Hexagon runtime support #3163
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1 +1,15 @@ | ||
| TVM End to End Deep Learning Compiler Stack: https://tvm.ai/ | ||
|
|
||
| This product includes contributions provided by Qualcomm Technologies, Inc., | ||
| a Delaware corporation, or its subsidiary Qualcomm Innovation Center, Inc., | ||
| a California corporation, under certain additional terms and conditions | ||
| pursuant to Section 5 of the Apache 2.0 license. In this regard, with | ||
| respect to these Contributions, the term "Work" in Section 1 of the | ||
| Apache 2.0 license means only the specific subdirectory within the TVM repo | ||
| (currently at https://github.com/dmlc/tvm) to which these Contribution were | ||
| made. | ||
| In any case, these submissions are "Not a Contribution" with respect to its | ||
| permitted use with any of the "vta" and "verilog" subdirectories in the TVM | ||
| repo. | ||
| Qualcomm Technologies, Inc. and Qualcomm Innovation Center, Inc. retain | ||
| copyright of their respective Contributions. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,104 @@ | ||
| # Licensed to the Apache Software Foundation (ASF) under one | ||
| # or more contributor license agreements. See the NOTICE file | ||
| # distributed with this work for additional information | ||
| # regarding copyright ownership. The ASF licenses this file | ||
| # to you under the Apache License, Version 2.0 (the | ||
| # "License"); you may not use this file except in compliance | ||
| # with the License. You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, | ||
| # software distributed under the License is distributed on an | ||
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
| # KIND, either express or implied. See the License for the | ||
| # specific language governing permissions and limitations | ||
| # under the License. | ||
|
|
||
| # This Contribution is being provided by Qualcomm Technologies, Inc., | ||
| # a Delaware corporation, or its subsidiary Qualcomm Innovation Center, Inc., | ||
| # a California corporation, under certain additional terms and conditions | ||
| # pursuant to Section 5 of the Apache 2.0 license. In this regard, with | ||
| # respect to this Contribution, the term "Work" in Section 1 of the | ||
| # Apache 2.0 license means only the specific subdirectory within the TVM repo | ||
| # (currently at https://github.com/dmlc/tvm) to which this Contribution is | ||
| # made. | ||
| # In any case, this submission is "Not a Contribution" with respect to its | ||
| # permitted use with any of the "vta" and "verilog" subdirectories in the TVM | ||
| # repo. | ||
| # Qualcomm Technologies, Inc. and Qualcomm Innovation Center, Inc. retain | ||
| # copyright of their respective Contributions. | ||
|
|
||
| function(find_hexagon_toolchain) | ||
| if (NOT "${USE_HEXAGON_TOOLCHAIN}" STREQUAL "") | ||
| set(TRY_PATH "${USE_HEXAGON_TOOLCHAIN}") | ||
| else() | ||
| set(TRY_PATH "${USE_HEXAGON_SDK}") | ||
| endif() | ||
| message(STATUS "Looking for Hexagon toolchain in ${TRY_PATH}") | ||
| file(GLOB_RECURSE HEXAGON_CLANG "${TRY_PATH}/*/hexagon-clang++") | ||
| if(HEXAGON_CLANG) | ||
| # The path is ${HEXAGON_TOOLCHAIN}/bin/hexagon-clang++. | ||
| get_filename_component(HEXAGON_TMP0 "${HEXAGON_CLANG}" DIRECTORY) | ||
| get_filename_component(HEXAGON_TMP1 "${HEXAGON_TMP0}" DIRECTORY) | ||
| set(HEXAGON_TOOLCHAIN "${HEXAGON_TMP1}" CACHE PATH | ||
| "Path to the Hexagon toolchain") | ||
| else(HEXAGON_CLANG) | ||
| message(SEND_ERROR "Cannot find Hexagon toolchain in ${TRY_PATH}") | ||
| endif() | ||
| endfunction() | ||
|
|
||
| function(find_hexagon_sdk_root) | ||
| message(STATUS "Checking Hexagon SDK root: ${USE_HEXAGON_SDK}") | ||
| file(GLOB_RECURSE HEXAGON_AEESTDDEF "${USE_HEXAGON_SDK}/*/AEEStdDef.h") | ||
| if(HEXAGON_AEESTDDEF) | ||
| # The path is ${HEXAGON_SDK_ROOT}/incs/stddef/AEEStdDef.h. | ||
| get_filename_component(HEXAGON_TMP0 "${HEXAGON_AEESTDDEF}" DIRECTORY) | ||
| get_filename_component(HEXAGON_TMP1 "${HEXAGON_TMP0}" DIRECTORY) | ||
| get_filename_component(HEXAGON_TMP2 "${HEXAGON_TMP1}" DIRECTORY) | ||
| set(HEXAGON_SDK_ROOT "${HEXAGON_TMP2}" CACHE PATH | ||
| "Root directory of Hexagon SDK") | ||
| else(HEXAGON_AEESTDDEF) | ||
| message(SEND_ERROR "Cannot validate Hexagon SDK in ${USE_HEXAGON_SDK}") | ||
| endif() | ||
| endfunction() | ||
|
|
||
| if(USE_HEXAGON STREQUAL "OFF") | ||
| return() | ||
| elseif(NOT USE_HEXAGON STREQUAL "sim" AND | ||
| NOT USE_HEXAGON STREQUAL "device") | ||
| message(SEND_ERROR "USE_HEXAGON must be one of [OFF|sim|device]") | ||
| return() | ||
| endif() | ||
| # If USE_HEXAGON is set to a valid value, make sure that USE_HEXAGON_SDK | ||
| # is defined. | ||
| if (NOT USE_HEXAGON_SDK) | ||
| message(SEND_ERROR "Please set USE_HEXAGON_SDK to the Hexagon SDK root") | ||
| return() | ||
| endif() | ||
|
|
||
| if(USE_HEXAGON STREQUAL "sim") | ||
| find_hexagon_toolchain() | ||
| message(STATUS "Hexagon toolchain: ${HEXAGON_TOOLCHAIN}") | ||
| add_definitions("-DHEXAGON_TOOLCHAIN=\"${HEXAGON_TOOLCHAIN}\"") | ||
| file(GLOB RUNTIME_HEXAGON_SIM_SRCS src/runtime/hexagon/sim/*.cc) | ||
| include_directories("${HEXAGON_TOOLCHAIN}/include/iss") | ||
| link_directories("${HEXAGON_TOOLCHAIN}/lib/iss") | ||
| list(APPEND TVM_RUNTIME_LINKER_LIBS "-lwrapper") | ||
| elseif(USE_HEXAGON STREQUAL "device") | ||
| find_hexagon_sdk_root() | ||
| find_hexagon_toolchain() | ||
| message(STATUS "Hexagon SDK: ${HEXAGON_SDK_ROOT}") | ||
| add_definitions("-DHEXAGON_TOOLCHAIN=\"${HEXAGON_TOOLCHAIN}\"") | ||
| file(GLOB RUNTIME_HEXAGON_DEVICE_SRCS src/runtime/hexagon/device/*.cc) | ||
| include_directories("${HEXAGON_SDK_ROOT}/incs/stddef") | ||
| include_directories("${HEXAGON_SDK_ROOT}/libs/common/rpcmem/inc") | ||
| include_directories("${HEXAGON_SDK_ROOT}/libs/common/remote/ship") | ||
| include_directories("${HEXAGON_TOOLCHAIN}/include/iss") | ||
| list(APPEND TVM_RUNTIME_LINKER_LIBS "-ldl") | ||
| endif() | ||
|
|
||
| add_definitions("-DDMLC_LOG_FATAL_THROW=0") | ||
| file(GLOB RUNTIME_HEXAGON_SRCS src/runtime/hexagon/*.cc) | ||
| list(APPEND RUNTIME_SRCS ${RUNTIME_HEXAGON_SRCS} ${RUNTIME_HEXAGON_SIM_SRCS} | ||
| ${RUNTIME_HEXAGON_DEVICE_SRCS}) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -82,6 +82,7 @@ typedef enum { | |
| kDLSDAccel = 6, | ||
| kOpenGL = 11, | ||
| // AddExtraTVMType which is not in DLPack here | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Move this comment after
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Will do. |
||
| kDLHexagon = 13, | ||
| } TVMDeviceExtType; | ||
|
|
||
| /*! | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -46,10 +46,10 @@ enum DeviceAttrKind : int { | |
| }; | ||
|
|
||
| /*! \brief Number of bytes each allocation must align to */ | ||
| constexpr int kAllocAlignment = 64; | ||
| constexpr int kAllocAlignment = 128; | ||
|
|
||
| /*! \brief Number of bytes each allocation must align to in temporary allocation */ | ||
| constexpr int kTempAllocaAlignment = 64; | ||
| constexpr int kTempAllocaAlignment = 128; | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. How about this? https://github.com/dmlc/tvm/blob/master/src/pass/ir_util.h#L174 I think we should handle it specially for Hexagon.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Someone suggested having a target-specific function that gets the required alignment, instead of having global constants. I think that would be a better solution. This patch simply has what we've done about it.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I also suggest we have a target-specific function that gets the required alignment. Then in
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same comment. How about create target-specific function alignment? |
||
|
|
||
| /*! \brief Maximum size that can be allocated on stack */ | ||
| constexpr int kMaxStackAlloca = 1024; | ||
|
|
@@ -215,6 +215,7 @@ inline const char* DeviceName(int type) { | |
| case kDLROCM: return "rocm"; | ||
| case kOpenGL: return "opengl"; | ||
| case kDLExtDev: return "ext_dev"; | ||
| case kDLHexagon: return "hexagon"; | ||
| default: LOG(FATAL) << "unknown type =" << type; return "Unknown"; | ||
| } | ||
| } | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -175,6 +175,10 @@ def ext_dev(self, dev_id=0): | |
| """Construct extension device.""" | ||
| return self.context(12, dev_id) | ||
|
|
||
| def hexagon(self, dev_id=0): | ||
| """Construct extension device.""" | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
| return self.context(13, dev_id) | ||
|
|
||
|
|
||
| class LocalSession(RPCSession): | ||
| """RPCSession interface backed by local environment. | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.