This is an automated email from the ASF dual-hosted git repository. tqchen pushed a commit to branch refactor in repository https://gitbox.apache.org/repos/asf/tvm.git
commit d5191ac0b074b0a086a9629c4ef39f1effb93ac8 Author: Siyuan Feng <[email protected]> AuthorDate: Mon Feb 17 14:24:39 2025 +0800 remove VERILATOR --- CMakeLists.txt | 2 - cmake/config.cmake | 3 - cmake/modules/LibInfo.cmake | 1 - cmake/modules/contrib/Verilator.cmake | 23 --- docker/Dockerfile.ci_i386 | 4 - docker/install/ubuntu_install_verilator.sh | 37 ----- src/runtime/contrib/verilator/verilator_device.h | 84 ---------- src/runtime/contrib/verilator/verilator_kernel.h | 45 ------ src/runtime/contrib/verilator/verilator_runtime.cc | 180 --------------------- src/runtime/contrib/verilator/verilator_runtime.h | 138 ---------------- src/support/libinfo.cc | 1 - 11 files changed, 518 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a7e1241d6..ab01cd5f47 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -120,7 +120,6 @@ tvm_option(SUMMARIZE "Print CMake option summary after configuring" OFF) tvm_option(USE_CLML "Build with CLML Codegen support" OFF) tvm_option(USE_CLML_GRAPH_EXECUTOR "Build with CLML graph runtime" OFF) tvm_option(USE_UMA "Build with UMA support" OFF) -tvm_option(USE_VERILATOR "Build with Verilator support" OFF) tvm_option(USE_MSC "Enable Multi-System Compiler" OFF) tvm_option(USE_MRVL "Build with MRVL TVM support" OFF) tvm_option(USE_NVSHMEM "Build with NVSHMEM support" OFF) @@ -499,7 +498,6 @@ include(cmake/modules/contrib/ONNX.cmake) include(cmake/modules/contrib/ArmComputeLib.cmake) include(cmake/modules/contrib/TensorRT.cmake) include(cmake/modules/contrib/NNAPI.cmake) -include(cmake/modules/contrib/Verilator.cmake) include(cmake/modules/contrib/UMA.cmake) include(cmake/modules/contrib/MSC.cmake) include(cmake/modules/contrib/vllm.cmake) diff --git a/cmake/config.cmake b/cmake/config.cmake index e5f85380d2..d420fe54ab 100644 --- a/cmake/config.cmake +++ b/cmake/config.cmake @@ -279,9 +279,6 @@ set(USE_ARM_COMPUTE_LIB_GRAPH_EXECUTOR OFF) set(USE_TENSORRT_CODEGEN OFF) set(USE_TENSORRT_RUNTIME OFF) -# Build Verilator codegen and runtime -set(USE_VERILATOR OFF) - # Whether to use the Multi-System Compiler set(USE_MSC OFF) diff --git a/cmake/modules/LibInfo.cmake b/cmake/modules/LibInfo.cmake index 70ae86fc79..2010043909 100644 --- a/cmake/modules/LibInfo.cmake +++ b/cmake/modules/LibInfo.cmake @@ -128,7 +128,6 @@ function(add_lib_info src_file) TVM_INFO_USE_CLML_GRAPH_EXECUTOR="${USE_CLML_GRAPH_EXECUTOR}" TVM_INFO_USE_TVM_CLML_VERSION="${CLML_VERSION_MAJOR}" TVM_INFO_USE_UMA="${USE_UMA}" - TVM_INFO_USE_VERILATOR="${USE_VERILATOR}" TVM_INFO_USE_MSC="${USE_MSC}" TVM_INFO_USE_CCACHE="${USE_CCACHE}" TVM_INFO_USE_NVSHMEM="${USE_NVSHMEM}" diff --git a/cmake/modules/contrib/Verilator.cmake b/cmake/modules/contrib/Verilator.cmake deleted file mode 100644 index 61a2e309d0..0000000000 --- a/cmake/modules/contrib/Verilator.cmake +++ /dev/null @@ -1,23 +0,0 @@ -# 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. - -if(USE_VERILATOR STREQUAL "ON") - tvm_file_glob(GLOB VERILATOR_RELAY_CONTRIB_SRC src/relay/backend/contrib/verilator/codegen.cc) - tvm_file_glob(GLOB VERILATOR_CONTRIB_SRC src/runtime/contrib/verilator/verilator_runtime.cc) - list(APPEND COMPILER_SRCS ${VERILATOR_RELAY_CONTRIB_SRC}) - list(APPEND RUNTIME_SRCS ${VERILATOR_CONTRIB_SRC}) -endif() diff --git a/docker/Dockerfile.ci_i386 b/docker/Dockerfile.ci_i386 index b96e4a33b4..b4aa2b6bff 100644 --- a/docker/Dockerfile.ci_i386 +++ b/docker/Dockerfile.ci_i386 @@ -66,10 +66,6 @@ RUN bash /install/ubuntu2004_install_redis.sh COPY install/ubuntu_install_sbt.sh /install/ubuntu_install_sbt.sh RUN bash /install/ubuntu_install_sbt.sh -# Verilator deps -COPY install/ubuntu_install_verilator.sh /install/ubuntu_install_verilator.sh -RUN bash /install/ubuntu_install_verilator.sh - # sccache COPY install/ubuntu_install_sccache.sh /install/ubuntu_install_sccache.sh RUN bash /install/ubuntu_install_sccache.sh diff --git a/docker/install/ubuntu_install_verilator.sh b/docker/install/ubuntu_install_verilator.sh deleted file mode 100755 index 630746bd21..0000000000 --- a/docker/install/ubuntu_install_verilator.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -# 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. - -set -e -set -u -set -o pipefail - -# Verilator version -VERILATOR_VERSION="5.002" - -# Install dependencies -apt-get update && apt-install-and-clear -y autoconf g++ flex bison - -# Install Verilator -git clone --depth 1 --branch v${VERILATOR_VERSION} https://github.com/verilator/verilator -pushd verilator - autoconf - ./configure - make -j$(nproc) - make install -popd -rm -rf verilator diff --git a/src/runtime/contrib/verilator/verilator_device.h b/src/runtime/contrib/verilator/verilator_device.h deleted file mode 100644 index 298e41c06d..0000000000 --- a/src/runtime/contrib/verilator/verilator_device.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * 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. - */ - -/*! - * \file src/runtime/contrib/verilator/verilator_device.h - * \brief Use external verilator device. - */ - -#ifndef TVM_RUNTIME_CONTRIB_VERILATOR_VERILATOR_DEVICE_H_ -#define TVM_RUNTIME_CONTRIB_VERILATOR_VERILATOR_DEVICE_H_ - -#include <tvm/runtime/c_runtime_api.h> - -namespace tvm { -namespace runtime { -namespace contrib { - -/*! \brief Verilator device resource context */ -typedef void* VerilatorHandle; - -/*! - * \brief Allocate a verilator device resource handle - * \return The verilator device handle. - */ -extern "C" TVM_DLL VerilatorHandle VerilatorAlloc(); - -/*! - * \brief Free a verilator device handle - * \param handle The verilator device handle to be freed. - */ -extern "C" TVM_DLL void VerilatorDealloc(VerilatorHandle handle); - -/*! - * \brief Read verilator register or memory - * \param handle The verilator device handle. - * \param id The register or memory identifier. - * \param addr The register or memory address (word-level). - * \return The value of register or memory. - */ -extern "C" TVM_DLL int VerilatorRead(VerilatorHandle handle, int id, int addr); - -/*! - * \brief Write verilator register or memory - * \param handle The verilator device handle. - * \param id The register or memory identifier. - * \param addr The register or memory address (word-level). - * \param value The value of register or memory. - */ -extern "C" TVM_DLL void VerilatorWrite(VerilatorHandle handle, int id, int addr, int value); - -/*! - * \brief Reset Verilator for n clock cycles - * \param handle The verilator device handle. - * \param n The number of reset cycles. - */ -extern "C" TVM_DLL void VerilatorReset(VerilatorHandle handle, int n); - -/*! - * \brief Run Verilator for n clock cycles - * \param handle The verilator device handle. - * \param n The number of run cycles. - */ -extern "C" TVM_DLL void VerilatorRun(VerilatorHandle handle, int n); - -} // namespace contrib -} // namespace runtime -} // namespace tvm -#endif // TVM_RUNTIME_CONTRIB_VERILATOR_VERILATOR_DEVICE_H_ diff --git a/src/runtime/contrib/verilator/verilator_kernel.h b/src/runtime/contrib/verilator/verilator_kernel.h deleted file mode 100644 index 57353297db..0000000000 --- a/src/runtime/contrib/verilator/verilator_kernel.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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. - */ - -/*! - * \file src/runtime/contrib/verilator/verilator_kernel.h - * \brief Use external verilator library kernels. - */ - -#ifndef TVM_RUNTIME_CONTRIB_VERILATOR_VERILATOR_KERNEL_H_ -#define TVM_RUNTIME_CONTRIB_VERILATOR_VERILATOR_KERNEL_H_ - -#include <tvm/runtime/c_runtime_api.h> - -#include "verilator_device.h" - -namespace tvm { -namespace runtime { -namespace contrib { - -extern "C" TVM_DLL void verilator_add(VerilatorHandle handle, int* left, int* right, int* out, - int p_h_, int p_w_); - -extern "C" TVM_DLL void verilator_bias_add(VerilatorHandle handle, int* data, int* bias, int* out, - int p_n_, int p_c_, int p_h_, int p_w_); - -} // namespace contrib -} // namespace runtime -} // namespace tvm -#endif // TVM_RUNTIME_CONTRIB_VERILATOR_VERILATOR_KERNEL_H_ diff --git a/src/runtime/contrib/verilator/verilator_runtime.cc b/src/runtime/contrib/verilator/verilator_runtime.cc deleted file mode 100644 index 81ecf91da4..0000000000 --- a/src/runtime/contrib/verilator/verilator_runtime.cc +++ /dev/null @@ -1,180 +0,0 @@ -/* - * 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. - */ - -/*! - * \file src/runtime/contrib/verilator/verilator_runtime.cc - * \brief A runtime for Verilator. - */ - -#include "verilator_runtime.h" - -#include <dlfcn.h> -#include <tvm/runtime/ndarray.h> -#include <tvm/runtime/registry.h> - -#include <cstddef> -#include <string> -#include <vector> - -#include "../../library_module.h" -#include "../json/json_node.h" -#include "../json/json_runtime.h" -#include "verilator_device.h" -#include "verilator_kernel.h" - -namespace tvm { -namespace runtime { -namespace contrib { - -using namespace tvm::runtime; -using namespace tvm::runtime::contrib; -using namespace tvm::runtime::json; - -VerilatorLibrary::~VerilatorLibrary() { - if (lib_handle_) { - dlclose(lib_handle_); - lib_handle_ = nullptr; - } -} - -void VerilatorLibrary::Load(const std::string& name) { - lib_handle_ = dlopen(name.c_str(), RTLD_LAZY | RTLD_LOCAL); - ICHECK(lib_handle_ != nullptr) << "Failed to load dynamic shared library " << name << " " - << dlerror(); -} - -void* VerilatorLibrary::GetSymbol(const char* name) { return dlsym(lib_handle_, name); } - -void VerilatorProfiler::Clear() { cycle_counter = 0; } - -std::string VerilatorProfiler::AsJSON() { - std::ostringstream os; - os << "{\n" - << " \"cycle_counter\":" << cycle_counter << "\n" - << "}\n"; - return os.str(); -} - -VerilatorProfiler* VerilatorProfiler::ThreadLocal() { - static thread_local VerilatorProfiler inst; - return &inst; -} - -VerilatorRuntime::~VerilatorRuntime() { - VLOG(0) << "destroying verilator runtime"; - if (lib_ == nullptr) { - // Never initialized. This can happen if the runtime was created during compilation of - // a BYOC function but the resulting runtime module was never invoked. - return; - } - auto dealloc = reinterpret_cast<VerilatorDeallocFunc>(lib_->GetSymbol("VerilatorDealloc")); - ICHECK(dealloc != nullptr); - ICHECK(device_ != nullptr); - dealloc(device_); - device_ = nullptr; - lib_->~VerilatorLibrary(); - lib_ = nullptr; -} - -void VerilatorRuntime::SetLibrary(const std::string& lib_path) { lib_path_ = lib_path; } - -void VerilatorRuntime::SetResetCycles(const int cycles) { reset_cycles_ = cycles; } - -void VerilatorRuntime::EnableProfiler() { prof_enable_ = true; } - -void VerilatorRuntime::SetProfilerCycleCounterId(const int id) { prof_cycle_counter_id_ = id; } - -void VerilatorRuntime::Init(const Array<NDArray>& consts) { - VLOG(0) << "initializing verilator runtime"; - lib_ = new VerilatorLibrary(); - lib_->Load(lib_path_); - auto alloc = reinterpret_cast<VerilatorAllocFunc>(lib_->GetSymbol("VerilatorAlloc")); - ICHECK(alloc != nullptr); - auto reset = reinterpret_cast<VerilatorResetFunc>(lib_->GetSymbol("VerilatorReset")); - ICHECK(reset != nullptr); - read_ = reinterpret_cast<VerilatorReadFunc>(lib_->GetSymbol("VerilatorRead")); - ICHECK(read_ != nullptr); - - // alloc verilator device - device_ = alloc(); - - // enable profiler - if (prof_enable_) prof_ = VerilatorProfiler::ThreadLocal(); - - // reset verilator device - reset(device_, reset_cycles_); - - CHECK_EQ(consts.size(), const_idx_.size()) - << "The number of input constants must match the number of required."; - - // Setup constants entries for weights. - SetupConstants(consts); -} - -void VerilatorRuntime::Run() { - std::vector<int*> in_ptr; - std::vector<int*> out_ptr; - for (size_t i = 0; i < input_nodes_.size(); ++i) { - uint32_t eid = EntryID(input_nodes_[i], 0); - int* data = static_cast<int*>(data_entry_[eid]->data); - in_ptr.push_back(data); - } - for (size_t i = 0; i < outputs_.size(); ++i) { - uint32_t eid = EntryID(outputs_[i]); - int* data = static_cast<int*>(data_entry_[eid]->data); - out_ptr.push_back(data); - } - for (size_t nid = 0; nid < nodes_.size(); ++nid) { - const auto& node = nodes_[nid]; - if (node.GetOpType() == "kernel") { - CHECK_EQ(node.GetOpType(), "kernel"); - auto op_name = node.GetOpName(); - auto entry = node.GetInputs()[0]; - auto shape = node.GetOpShape()[entry.index_]; - if ("add" == op_name) { - auto add = reinterpret_cast<VerilatorAddFunc>(lib_->GetSymbol("verilator_add")); - ICHECK(add != nullptr); - add(device_, in_ptr[0], in_ptr[1], out_ptr[0], shape[0], shape[1]); - } else if ("nn.bias_add" == op_name) { - auto bias_add = - reinterpret_cast<VerilatorBiasAddFunc>(lib_->GetSymbol("verilator_bias_add")); - ICHECK(bias_add != nullptr); - bias_add(device_, in_ptr[0], in_ptr[1], out_ptr[0], shape[0], shape[3], shape[1], shape[2]); - } else { - LOG(FATAL) << "Unsupported op: " << op_name; - } - } - } - if (prof_enable_) { - int cycles = read_(device_, prof_cycle_counter_id_, 0); - prof_->cycle_counter += cycles; - } -} - -TVM_REGISTER_GLOBAL("verilator.profiler_clear").set_body([](TVMArgs args, TVMRetValue* rv) { - VerilatorProfiler::ThreadLocal()->Clear(); -}); - -TVM_REGISTER_GLOBAL("verilator.profiler_status").set_body([](TVMArgs args, TVMRetValue* rv) { - *rv = VerilatorProfiler::ThreadLocal()->AsJSON(); -}); - -} // namespace contrib -} // namespace runtime -} // namespace tvm diff --git a/src/runtime/contrib/verilator/verilator_runtime.h b/src/runtime/contrib/verilator/verilator_runtime.h deleted file mode 100644 index 14bf0bcdfc..0000000000 --- a/src/runtime/contrib/verilator/verilator_runtime.h +++ /dev/null @@ -1,138 +0,0 @@ -/* - * 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. - */ - -/*! - * \file src/runtime/contrib/verilator/verilator_runtime.h - * \brief A runtime for Verilator. - */ - -#ifndef TVM_RUNTIME_CONTRIB_VERILATOR_VERILATOR_RUNTIME_H_ -#define TVM_RUNTIME_CONTRIB_VERILATOR_VERILATOR_RUNTIME_H_ - -#include <dlfcn.h> -#include <tvm/runtime/ndarray.h> -#include <tvm/runtime/registry.h> - -#include <cstddef> -#include <string> -#include <vector> - -#include "../../library_module.h" -#include "../json/json_node.h" -#include "../json/json_runtime.h" -#include "verilator_device.h" -#include "verilator_kernel.h" - -namespace tvm { -namespace runtime { -namespace contrib { - -using namespace tvm::runtime::contrib; -using namespace tvm::runtime::json; - -typedef VerilatorHandle (*VerilatorAllocFunc)(); -typedef void (*VerilatorDeallocFunc)(VerilatorHandle); -typedef void (*VerilatorResetFunc)(VerilatorHandle, int); -typedef int (*VerilatorReadFunc)(VerilatorHandle, int, int); -typedef void (*VerilatorAddFunc)(VerilatorHandle, int*, int*, int*, int, int); -typedef void (*VerilatorBiasAddFunc)(VerilatorHandle, int*, int*, int*, int, int, int, int); - -class VerilatorLibrary : public Library { - public: - ~VerilatorLibrary(); - - /*! \brief load library */ - void Load(const std::string& name); - - /*! \brief get symbol from libray */ - void* GetSymbol(const char* name) final; - - private: - /*! \brief the library handle */ - void* lib_handle_{nullptr}; -}; - -class VerilatorProfiler { - public: - /*! \brief the number of cycle counter */ - uint32_t cycle_counter{0}; - - /*! \brief clear the profiler */ - void Clear(); - - /*! \brief get profiler data */ - std::string AsJSON(); - - /*! \brief profiler constructor */ - static VerilatorProfiler* ThreadLocal(); -}; - -class VerilatorRuntime : public JSONRuntimeBase { - public: - VerilatorRuntime(const std::string& symbol_name, const std::string& graph_json, - const Array<String> const_names) - : JSONRuntimeBase(symbol_name, graph_json, const_names) { - VLOG(0) << "creating verilator runtime"; - } - - ~VerilatorRuntime(); - - const char* type_key() const final { return "verilator"; } - - /*! \brief set verilator library */ - void SetLibrary(const std::string& lib_name); - - /*! \brief set the number of reset cycles */ - void SetResetCycles(const int cycles); - - /*! \brief enable profiler */ - void EnableProfiler(); - - /*! \brief set cycle counter register id */ - void SetProfilerCycleCounterId(const int id); - - /*! \brief init verilator runtime */ - void Init(const Array<NDArray>& consts) override; - - /*! \brief run verilator runtime */ - void Run() override; - - private: - /*! \brief the verilator library path */ - String lib_path_; - /*! \brief the verilator device */ - VerilatorHandle device_{nullptr}; - /*! \brief the verilator library */ - VerilatorLibrary* lib_{nullptr}; - /*! \brief the verilator profiler */ - VerilatorProfiler* prof_{nullptr}; - /*! \brief the verilator read function */ - VerilatorReadFunc read_{nullptr}; - /*! \brief the verilator reset cycles */ - int reset_cycles_{1}; - /*! \brief the verilator profiler status */ - bool prof_enable_{false}; - /*! \brief the verilator profiler cycle counter id */ - int prof_cycle_counter_id_{0}; -}; - -} // namespace contrib -} // namespace runtime -} // namespace tvm -#endif // TVM_RUNTIME_CONTRIB_VERILATOR_VERILATOR_RUNTIME_H_ diff --git a/src/support/libinfo.cc b/src/support/libinfo.cc index 1af5e6e095..065eaf503f 100644 --- a/src/support/libinfo.cc +++ b/src/support/libinfo.cc @@ -369,7 +369,6 @@ TVM_DLL Map<String, String> GetLibInfo() { {"TVM_CLML_VERSION", TVM_INFO_USE_TVM_CLML_VERSION}, {"USE_CLML_GRAPH_EXECUTOR", TVM_INFO_USE_CLML_GRAPH_EXECUTOR}, {"USE_UMA", TVM_INFO_USE_UMA}, - {"USE_VERILATOR", TVM_INFO_USE_VERILATOR}, {"USE_MSC", TVM_INFO_USE_MSC}, {"USE_CCACHE", TVM_INFO_USE_CCACHE}, {"USE_NVSHMEM", TVM_INFO_USE_NVSHMEM},
