From c3b9bd6cb3b7c6a692c3f033153f57ddb1c396b6 Mon Sep 17 00:00:00 2001 From: WuXintong123 <13683168028@163.com> Date: Mon, 31 Mar 2025 04:05:29 +0000 Subject: [PATCH 1/2] LeNet --- examples/CMakeLists.txt | 4 + examples/HeterLeNet/.gitignore | 10 ++ examples/HeterLeNet/CMakeLists.txt | 163 ++++++++++++++++++ examples/HeterLeNet/README.md | 104 +++++++++++ examples/HeterLeNet/buddy-lenet-import.py | 126 ++++++++++++++ examples/HeterLeNet/buddy-lenet-main.cpp | 150 ++++++++++++++++ examples/HeterLeNet/images/0-28*28.png | Bin 0 -> 1850 bytes examples/HeterLeNet/images/0.png | Bin 0 -> 6765 bytes examples/HeterLeNet/images/1-28*28.png | Bin 0 -> 1439 bytes examples/HeterLeNet/images/1.png | Bin 0 -> 4597 bytes examples/HeterLeNet/images/2.png | Bin 0 -> 7304 bytes examples/HeterLeNet/images/3.png | Bin 0 -> 6847 bytes examples/HeterLeNet/images/4.png | Bin 0 -> 6113 bytes examples/HeterLeNet/images/5.png | Bin 0 -> 5615 bytes examples/HeterLeNet/images/6.png | Bin 0 -> 6500 bytes examples/HeterLeNet/images/7.png | Bin 0 -> 6377 bytes .../HeterLeNet/images/8-16bit-565-28*28.bmp | Bin 0 -> 1634 bytes examples/HeterLeNet/images/8-24bit-28*28.bmp | Bin 0 -> 2406 bytes examples/HeterLeNet/images/8.bmp | Bin 0 -> 3190 bytes examples/HeterLeNet/images/8.png | Bin 0 -> 6195 bytes examples/HeterLeNet/images/9.png | Bin 0 -> 5031 bytes examples/HeterLeNet/model.py | 41 +++++ examples/lit.cfg.py | 1 + 23 files changed, 599 insertions(+) create mode 100644 examples/HeterLeNet/.gitignore create mode 100644 examples/HeterLeNet/CMakeLists.txt create mode 100644 examples/HeterLeNet/README.md create mode 100644 examples/HeterLeNet/buddy-lenet-import.py create mode 100644 examples/HeterLeNet/buddy-lenet-main.cpp create mode 100644 examples/HeterLeNet/images/0-28*28.png create mode 100644 examples/HeterLeNet/images/0.png create mode 100644 examples/HeterLeNet/images/1-28*28.png create mode 100644 examples/HeterLeNet/images/1.png create mode 100644 examples/HeterLeNet/images/2.png create mode 100644 examples/HeterLeNet/images/3.png create mode 100644 examples/HeterLeNet/images/4.png create mode 100644 examples/HeterLeNet/images/5.png create mode 100644 examples/HeterLeNet/images/6.png create mode 100644 examples/HeterLeNet/images/7.png create mode 100644 examples/HeterLeNet/images/8-16bit-565-28*28.bmp create mode 100644 examples/HeterLeNet/images/8-24bit-28*28.bmp create mode 100644 examples/HeterLeNet/images/8.bmp create mode 100644 examples/HeterLeNet/images/8.png create mode 100644 examples/HeterLeNet/images/9.png create mode 100644 examples/HeterLeNet/model.py diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index acdbeced..28035863 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -12,6 +12,10 @@ if(BUDDY_DIS_LLAMA_EXAMPLES) add_subdirectory(LlamaTest) endif() +if(BUDDY_HETER_LENET_EXAMPLES) + add_subdirectory(HeterLeNet) +endif() + if(BUDDY_DEEPSEEKR1_EXAMPLES) add_subdirectory(BuddyDeepSeekR1) endif() diff --git a/examples/HeterLeNet/.gitignore b/examples/HeterLeNet/.gitignore new file mode 100644 index 00000000..8ef196d7 --- /dev/null +++ b/examples/HeterLeNet/.gitignore @@ -0,0 +1,10 @@ +log.mlir +log.ll +log.s +data +*.data +__pycache__ +*.pth +lenet.mlir +forward.mlir +subgraph0.mlir diff --git a/examples/HeterLeNet/CMakeLists.txt b/examples/HeterLeNet/CMakeLists.txt new file mode 100644 index 00000000..6e3c3db7 --- /dev/null +++ b/examples/HeterLeNet/CMakeLists.txt @@ -0,0 +1,163 @@ +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/forward0.mlir + ${CMAKE_CURRENT_BINARY_DIR}/forward1.mlir + ${CMAKE_CURRENT_BINARY_DIR}/subgraph0.mlir + ${CMAKE_CURRENT_BINARY_DIR}/subgraph1.mlir + ${CMAKE_CURRENT_BINARY_DIR}/arg0.data + COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/buddy-lenet-import.py + --output-dir ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Generating forward.mlir, subgraph0.mlir and parameter files" +) + +add_custom_command( + OUTPUT forward0.o + COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${CMAKE_CURRENT_BINARY_DIR}/forward0.mlir + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith), empty-tensor-to-alloc-tensor, convert-elementwise-to-linalg, arith-bufferize, func.func(linalg-bufferize, tensor-bufferize), func-bufferize)" | + ${LLVM_TOOLS_BINARY_DIR}/mlir-opt + -pass-pipeline "builtin.module(func.func(buffer-deallocation-simplification, convert-linalg-to-loops), eliminate-empty-tensors, func.func(llvm-request-c-wrappers),convert-math-to-llvm, convert-math-to-libm, convert-scf-to-cf, convert-arith-to-llvm, expand-strided-metadata, finalize-memref-to-llvm, convert-func-to-llvm, reconcile-unrealized-casts)" | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${CMAKE_CURRENT_BINARY_DIR}/forward0.o + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/forward0.mlir + COMMENT "Building forward0.o" + VERBATIM) + +add_custom_command( + OUTPUT subgraph0.o + COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${CMAKE_CURRENT_BINARY_DIR}/subgraph0.mlir + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith))" | + ${BUDDY_BINARY_DIR}/buddy-opt + -eliminate-empty-tensors + -convert-tensor-to-linalg + -linalg-bufferize + -batchmatmul-optimize + -convert-linalg-to-affine-loops + -lower-affine + -func-bufferize-dynamic-offset + -arith-bufferize + -tensor-bufferize + -buffer-deallocation + -finalizing-bufferize + -convert-vector-to-scf + -expand-strided-metadata + -convert-vector-to-llvm + -convert-arith-to-llvm + -finalize-memref-to-llvm + -convert-scf-to-cf + -llvm-request-c-wrappers + -convert-arith-to-llvm + -convert-func-to-llvm + -reconcile-unrealized-casts | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${CMAKE_CURRENT_BINARY_DIR}/subgraph0.o + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/subgraph0.mlir + COMMENT "Building subgraph0.o" + VERBATIM) + + add_custom_command( + OUTPUT forward1.o + COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${CMAKE_CURRENT_BINARY_DIR}/forward1.mlir + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith), empty-tensor-to-alloc-tensor, convert-elementwise-to-linalg, arith-bufferize, func.func(linalg-bufferize, tensor-bufferize), func-bufferize)" | + ${LLVM_TOOLS_BINARY_DIR}/mlir-opt + -pass-pipeline "builtin.module(func.func(buffer-deallocation-simplification, convert-linalg-to-loops), eliminate-empty-tensors, func.func(llvm-request-c-wrappers),convert-math-to-llvm, convert-math-to-libm, convert-scf-to-cf, convert-arith-to-llvm, expand-strided-metadata, finalize-memref-to-llvm, convert-func-to-llvm, reconcile-unrealized-casts)" | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${CMAKE_CURRENT_BINARY_DIR}/forward1.o + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/forward1.mlir + COMMENT "Building forward1.o" + VERBATIM) + + add_custom_command( + OUTPUT subgraph1.o + COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${CMAKE_CURRENT_BINARY_DIR}/subgraph1.mlir + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith))" | + ${BUDDY_BINARY_DIR}/buddy-opt + -eliminate-empty-tensors + -convert-tensor-to-linalg + -linalg-bufferize + -batchmatmul-optimize + -convert-linalg-to-affine-loops + -lower-affine + -func-bufferize-dynamic-offset + -arith-bufferize + -tensor-bufferize + -buffer-deallocation + -finalizing-bufferize + -convert-vector-to-scf + -expand-strided-metadata + -convert-vector-to-llvm + -convert-arith-to-llvm + -finalize-memref-to-llvm + -convert-scf-to-cf + -llvm-request-c-wrappers + -convert-arith-to-llvm + -convert-func-to-llvm + -reconcile-unrealized-casts | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${CMAKE_CURRENT_BINARY_DIR}/subgraph1.o + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/subgraph1.mlir + COMMENT "Building subgraph1.o" + VERBATIM) +set(LENET_EXAMPLE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) +set(LENET_EXAMPLE_BUILD_PATH ${CMAKE_CURRENT_BINARY_DIR}) + +# set(ONE_SHOT_BUFFERIZE_OPTION "bufferize-function-boundaries=1 function-boundary-type-conversion=identity-layout-map") +# set(LOWER_TO_NVVM_OPTION "cubin-chip=sm_80 cubin-features=+ptx71 cubin-format=fatbin") +# set(CONVERT_MEMCPY_TO_GPU_OPTION "process-args=1") +# set(CONVERT_MEMCPY_TO_GPU_OPTION_DISABLE_PROCESS_ARG "process-args=0") + +# add_custom_command( +# OUTPUT forward1.o +# COMMAND ${BUDDY_BINARY_DIR}/buddy-opt ${CMAKE_CURRENT_BINARY_DIR}/forward1.mlir +# -buffer-deallocation +# -canonicalize -cse -expand-strided-metadata -convert-memcpy-to-gpu -gpu-async-region | +# ${LLVM_TOOLS_BINARY_DIR}/mlir-opt -llvm-request-c-wrappers --gpu-to-llvm | +# ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | +# ${LLVM_TOOLS_BINARY_DIR}/llvm-as | +# ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${CMAKE_CURRENT_BINARY_DIR}/forward1.o +# DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/forward1.mlir +# COMMENT "Building forward1.o" +# VERBATIM) + +# add_custom_command( +# OUTPUT subgraph1.o +# COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${CMAKE_CURRENT_BINARY_DIR}/subgraph1.mlir +# -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith))" | +# ${BUDDY_BINARY_DIR}/buddy-opt +# -one-shot-bufferize +# -func-bufferize-dynamic-offset +# -convert-linalg-to-parallel-loops +# -canonicalize +# -gpu-map-parallel-loops +# -convert-parallel-loops-to-gpu +# -gpu-kernel-outlining +# -buffer-deallocation +# -canonicalize +# -cse | +# ${BUDDY_BINARY_DIR}/buddy-opt -convert-memcpy-to-gpu=${CONVERT_MEMCPY_TO_GPU_OPTION_DISABLE_PROCESS_ARG} -gpu-async-region -canonicalize | +# ${LLVM_TOOLS_BINARY_DIR}/mlir-opt -llvm-request-c-wrappers --test-lower-to-nvvm=${LOWER_TO_NVVM_OPTION} | +# ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | +# ${LLVM_TOOLS_BINARY_DIR}/llvm-as | +# ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${CMAKE_CURRENT_BINARY_DIR}/subgraph1.o +# DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/subgraph1.mlir +# COMMENT "Building subgraph1.o" +# VERBATIM) + +add_library(LENET_HETER0 STATIC subgraph0.o forward0.o) +add_library(LENET_HETER1 STATIC subgraph1.o forward1.o) + +SET_TARGET_PROPERTIES(LENET_HETER0 LENET_HETER1 PROPERTIES LINKER_LANGUAGE C) + +add_executable(buddy-lenet-run-heter buddy-lenet-main.cpp) +target_link_directories(buddy-lenet-run-heter PRIVATE ${LLVM_LIBRARY_DIR}) + +set(BUDDY_LENET_LIBS_GPU LENET_HETER0 LENET_HETER1 mlir_c_runner_utils mlir_async_runtime mlir_runner_utils ${PNG_LIBRARIES}) + +target_link_libraries(buddy-lenet-run-heter ${BUDDY_LENET_LIBS_GPU}) + +target_compile_definitions(buddy-lenet-run-heter PRIVATE + LENET_EXAMPLE_PATH="${LENET_EXAMPLE_PATH}" + LENET_EXAMPLE_BUILD_PATH="${LENET_EXAMPLE_BUILD_PATH}" +) diff --git a/examples/HeterLeNet/README.md b/examples/HeterLeNet/README.md new file mode 100644 index 00000000..15528451 --- /dev/null +++ b/examples/HeterLeNet/README.md @@ -0,0 +1,104 @@ +# Buddy Compiler LeNet Example + +## Train the LeNet Model + +Activate your python environment. + +```bash +$ cd buddy-mlir +$ cd examples/BuddyLeNet +$ python pytorch-lenet-train.py +``` + +## LeNet Model Inference + +### Activate your python environment. + +```bash +$ conda activate +``` + +### Build LLVM + +```bash +$ cd buddy-mlir +$ mkdir llvm/build +$ cd llvm/build + +// CPU +$ cmake -G Ninja ../llvm \ + -DLLVM_ENABLE_PROJECTS="mlir;clang;openmp" \ + -DLLVM_TARGETS_TO_BUILD="host;RISCV" \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DOPENMP_ENABLE_LIBOMPTARGET=OFF \ + -DCMAKE_BUILD_TYPE=RELEASE \ + -DMLIR_ENABLE_BINDINGS_PYTHON=ON \ + -DPython3_EXECUTABLE=$(which python3) + +// GPU +$ cmake -G Ninja ../llvm \ + -DLLVM_ENABLE_PROJECTS="mlir;clang;openmp" \ + -DLLVM_TARGETS_TO_BUILD="host;RISCV;NVPTX" \ + -DMLIR_ENABLE_CUDA_RUNNER=ON \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DOPENMP_ENABLE_LIBOMPTARGET=OFF \ + -DCMAKE_BUILD_TYPE=RELEASE \ + -DMLIR_ENABLE_BINDINGS_PYTHON=ON \ + -DPython3_EXECUTABLE=$(which python3) + +$ ninja check-clang check-mlir omp +``` + +### Build buddy-mlir + +```bash +$ cd buddy-mlir +$ mkdir build && cd build +$ cmake -G Ninja .. \ + -DMLIR_DIR=$PWD/../llvm/build/lib/cmake/mlir \ + -DLLVM_DIR=$PWD/../llvm/build/lib/cmake/llvm \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DCMAKE_BUILD_TYPE=RELEASE \ + -DBUDDY_MLIR_ENABLE_PYTHON_PACKAGES=ON \ + -DPython3_EXECUTABLE=$(which python3) \ + -DBUDDY_MLIR_ENABLE_DIP_LIB=ON \ + -DBUDDY_ENABLE_PNG=ON +$ ninja +$ ninja check-buddy +``` + +### Set the `PYTHONPATH` environment variable. + +Make sure you are in the build directory. + +```bash +$ export BUDDY_MLIR_BUILD_DIR=$PWD +$ export LLVM_MLIR_BUILD_DIR=$PWD/../llvm/build +$ export PYTHONPATH=${LLVM_MLIR_BUILD_DIR}/tools/mlir/python_packages/mlir_core:${BUDDY_MLIR_BUILD_DIR}/python_packages:${PYTHONPATH} +``` + +### Build and run the LeNet example + +```bash +$ cmake -G Ninja .. -DBUDDY_LENET_EXAMPLES=ON + +// CPU +$ ninja buddy-lenet-run +$ cd bin +$ ./buddy-lenet-run + +// GPU +$ ninja buddy-lenet-run-gpu +$ cd bin +$ ./buddy-lenet-run-gpu +``` + +## Debug the Lowering Pass Pipeline with Fake Parameters. + +```bash +$ cd buddy-mlir +$ cd examples/BuddyLeNet +$ make buddy-lenet-lower +$ make buddy-lenet-translate +$ make buddy-lenet-run +``` diff --git a/examples/HeterLeNet/buddy-lenet-import.py b/examples/HeterLeNet/buddy-lenet-import.py new file mode 100644 index 00000000..6117e385 --- /dev/null +++ b/examples/HeterLeNet/buddy-lenet-import.py @@ -0,0 +1,126 @@ +# ===- buddy-lenet-import.py --------------------------------------------------- +# +# Licensed 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 is the LeNet model AOT importer. +# +# ===--------------------------------------------------------------------------- + +import os +from pathlib import Path +import argparse + +import numpy as np +import torch +from buddy.compiler.frontend import DynamoCompiler +from buddy.compiler.graph import GraphDriver +from buddy.compiler.graph.type import DeviceType +from buddy.compiler.graph.transform import simply_fuse, apply_classic_fusion +from buddy.compiler.ops import tosa +from buddy.compiler.graph.operation import * +from model import LeNet + +# Parse command-line arguments. +parser = argparse.ArgumentParser(description="LeNet model AOT importer") +parser.add_argument( + "--output-dir", + type=str, + default="./", + help="Directory to save output files." +) +args = parser.parse_args() + +# Ensure output directory exists. +output_dir = Path(args.output_dir) +output_dir.mkdir(parents=True, exist_ok=True) + +# Retrieve the LeNet model path. +model_path = os.path.dirname(os.path.abspath(__file__)) + +model = LeNet() +model = torch.load(model_path + "/lenet-model.pth", weights_only=False) +model = model.eval() + +# Initialize Dynamo Compiler with specific configurations as an importer. +dynamo_compiler = DynamoCompiler( + primary_registry=tosa.ops_registry, +) + +data = torch.randn([1, 1, 28, 28]) +# Import the model into MLIR module and parameters. +with torch.no_grad(): + graphs = dynamo_compiler.importer(model, data) + +graph = graphs[0] +params = dynamo_compiler.imported_params[graph] +group = [] +for i, op in enumerate(graph._body): + if isinstance(op, PlaceholderOp) or isinstance(op, OutputOp) or i == 25: + continue + group.append(op) + subgraph_name = "subgraph0" + graph.group_map_device[subgraph_name] = DeviceType.CPU + graph.op_groups[subgraph_name] = group +new_group = [graph._body[25]] +subgraph_name = "subgraph1" +graph.group_map_device[subgraph_name] = DeviceType.GPU +graph.op_groups[subgraph_name] = new_group + +# pattern_list = [simply_fuse] +# graphs[0].fuse_ops(pattern_list) +driver = GraphDriver(graphs[0]) +for i in range(len(driver.subgraphs)): + driver.subgraphs[i].lower_to_top_level_ir() +# driver.subgraphs[0].lower_to_top_level_ir() +driver.construct_main_graph(True) +# Save the generated files to the specified output directory. +for i in range(len(driver.modules)): + with open(os.path.join(output_dir, f"subgraph{i}.mlir"), "w") as module_file: + print(driver.subgraphs[i]._imported_module, file=module_file) + with open(os.path.join(output_dir, f"forward{i}.mlir"), "w") as module_file: + print(driver.modules[i], file=module_file) + # 从 GraphDriver 中获取该子图收集到的参数索引列表 + param_indices = driver.subgraph_param_indices[i] + + # 根据参数索引从 loaded_params 中提取参数,并拼接为一维数组 + selected_arrays = [] + js = 0 + for idx in param_indices: + # 注意:loaded_params 中的每个参数都是一个 tensor + arr = params[idx].detach().cpu().numpy().reshape(-1) + print(len(arr)) + js = js + len(arr) + selected_arrays.append(arr) + print(js) + if selected_arrays: + concat_arr = np.concatenate(selected_arrays) + else: + concat_arr = np.array([]) + + # 定义输出文件名,数字 i 与子图对应 + filename = os.path.join(output_dir, f"arg{i}.data") + concat_arr.tofile(filename) +# with open(output_dir / "subgraph0.mlir", "w") as module_file: +# print(driver.subgraphs[0]._imported_module, file=module_file) +# with open(output_dir / "forward.mlir", "w") as module_file: +# print(driver.construct_main_graph(True), file=module_file) + +# params = dynamo_compiler.imported_params[graph] + +# float32_param = np.concatenate( +# [param.detach().numpy().reshape([-1]) for param in params] +# ) + +# float32_param.tofile(output_dir / "arg0.data") diff --git a/examples/HeterLeNet/buddy-lenet-main.cpp b/examples/HeterLeNet/buddy-lenet-main.cpp new file mode 100644 index 00000000..708f83b6 --- /dev/null +++ b/examples/HeterLeNet/buddy-lenet-main.cpp @@ -0,0 +1,150 @@ +//===- buddy-lenet-main.cpp -----------------------------------------------===// +// +// Licensed 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. +// +//===----------------------------------------------------------------------===// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +constexpr size_t ParamsSize0 = 44416; +constexpr size_t ParamsSize1 = 10; + +const std::string ImgName = "1-28*28.png"; + +/// Declare LeNet forward function. +extern "C" void _mlir_ciface_forward0(MemRef *output0, + MemRef *output1, + MemRef *arg0, + dip::Image *input); +extern "C" void _mlir_ciface_forward1(MemRef *output, + MemRef *arg1, + MemRef *output0, + MemRef *output1); +/// Print [Log] label in bold blue format. +void printLogLabel() { std::cout << "\033[34;1m[Log] \033[0m"; } + +/// Load parameters into data container. +void loadParameters(const std::string ¶mFilePath, + MemRef ¶ms) { + const auto loadStart = std::chrono::high_resolution_clock::now(); + // Open the parameter file in binary mode. + std::ifstream paramFile(paramFilePath, std::ios::in | std::ios::binary); + if (!paramFile.is_open()) { + throw std::runtime_error("[Error] Failed to open params file!"); + } + printLogLabel(); + std::cout << "Loading params..." << std::endl; + printLogLabel(); + // Print the canonical path of the parameter file. + std::cout << "Params file: " << std::filesystem::canonical(paramFilePath) + << std::endl; + // Read the parameter data into the provided memory reference. + paramFile.read(reinterpret_cast(params.getData()), + sizeof(float) * (params.getSize())); + if (paramFile.fail()) { + throw std::runtime_error("Error occurred while reading params file!"); + } + paramFile.close(); + const auto loadEnd = std::chrono::high_resolution_clock::now(); + const std::chrono::duration loadTime = + loadEnd - loadStart; + printLogLabel(); + std::cout << "Params load time: " << (double)(loadTime.count()) / 1000 + << "s\n" + << std::endl; +} + +/// Softmax function to convert logits to probabilities. +void softmax(float *input, size_t size) { + size_t i; + float max_value = -INFINITY; + double sum = 0.0; + // Find the maximum value in the input array for numerical stability. + for (i = 0; i < size; ++i) { + if (max_value < input[i]) { + max_value = input[i]; + } + } + // Calculate the sum of the exponentials of the input elements, normalized by + // the max value. + for (i = 0; i < size; ++i) { + sum += exp(input[i] - max_value); + } + // Normalize the input array with the softmax calculation. + for (i = 0; i < size; ++i) { + input[i] = exp(input[i] - max_value) / sum; + } +} + +int main() { + // Print the title of this example. + const std::string title = "LeNet Inference Powered by Buddy Compiler"; + std::cout << "\033[33;1m" << title << "\033[0m" << std::endl; + + // Define the sizes of the output tensors. + intptr_t sizesOutput[2] = {1, 10}; + intptr_t sizesOutput0[2] = {1, 84}; + intptr_t sizesOutput1[2] = {84, 10}; + + // Create input and output containers for the image and model output. + std::string lenetDir = LENET_EXAMPLE_PATH; + std::string lenetBuildDir = LENET_EXAMPLE_BUILD_PATH; + std::string imgPath = lenetDir + "/images/" + ImgName; + dip::Image input(imgPath, dip::DIP_GRAYSCALE, true /* norm */); + MemRef output(sizesOutput); + MemRef output0(sizesOutput0); + MemRef output1(sizesOutput1); + // Load model parameters from the specified file. + + std::string paramsDir0 = lenetBuildDir + "/arg0.data"; + std::cout << paramsDir0 << std::endl; + MemRef paramsContainer0({ParamsSize0}); + loadParameters(paramsDir0, paramsContainer0); + std::string paramsDir1 = lenetBuildDir + "/arg1.data"; + MemRef paramsContainer1({ParamsSize1}); + loadParameters(paramsDir1, paramsContainer1); + std::cout << "++++++++++" << std::endl; + // Call the forward function of the model. + _mlir_ciface_forward0(&output0, &output1, ¶msContainer0, &input); + std::cout << "++++++++++" << std::endl; + _mlir_ciface_forward1(&output, ¶msContainer1, &output0, &output1); + std::cout << "++++++++++" << std::endl; + // Apply softmax to the output logits to get probabilities. + auto out = output.getData(); + softmax(out, 10); + + // Find the classification and print the result. + float maxVal = 0; + float maxIdx = 0; + for (int i = 0; i < 10; ++i) { + if (out[i] > maxVal) { + maxVal = out[i]; + maxIdx = i; + } + } + + std::cout << "Classification: " << maxIdx << std::endl; + std::cout << "Probability: " << maxVal << std::endl; + + return 0; +} diff --git a/examples/HeterLeNet/images/0-28*28.png b/examples/HeterLeNet/images/0-28*28.png new file mode 100644 index 0000000000000000000000000000000000000000..a7a3b2a327dfaa54515fe5b24ac6c1261745ca75 GIT binary patch literal 1850 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

I>`2dl?12p!qjvcqKqjz~GwVbaB~k{i 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 P00000NkvXXu0mjf!Hx_( literal 0 HcmV?d00001 diff --git a/examples/HeterLeNet/images/1-28*28.png b/examples/HeterLeNet/images/1-28*28.png new file mode 100644 index 0000000000000000000000000000000000000000..0f25e8b026430e44d856a01bbc97b862fdd3f2b0 GIT binary patch literal 1439 zcmV;Q1z`G#P)4Tx0C=2jkWWhjQ540`s3nvOqX?1~vk0QFkkKgGO%@fn7_{gQv>4x*3OYT; ziD(mjfR@pwee?~a2 zjJmqEuKHi#K?p%iq0?j~t{X;zM)0leRlSEI^=?f5^?V*m<)?41_cpu(Pp`h?zw>R? zWo1f?^n+Ss+;IUVLTv1~T=G6~pF>9xA4<+P_*8Pb!58(JrDUA=mN>|ArbYZn98S0R z*%mGqw%OMW^7=r=UQUtrQx9Smb4burVL-zqwT1=C=>MHqeJ74BaO}cC9$Dnz(zZ?x zM*$h)Mc7~%N0?YcggPd({+(gdvnlHdouJb6tYP3R3iO7X-Voi?a{ye9a?>$?l2xj{ z(q>d^aCaH#I1=J*1@MmmwTck$Wg%)OfcF8os(u0AtklSyJoR0MISaOJxT|A9Zny?@W83qi7VBW}fohz3H87|b}Cetiq6wr7&u z+c2By$EiAX>LCV$K`_REmkoMFDFq>bj0++i!U9 z;k`$v(*Xd~bq(d5TYK0!7cYkpKt#y048|A;A<*e`pp-&YRZvPr20{p^>pI@e^E?{p zoP+lsLTepTkJyWJ2_c}hh7bbQ+J+ZODFA>mrr{wQz@g#0s!iRd#gB&&V2r`p*%>Y_ zE-)AjaCLQso0}UbrNCNf1E(QTQp)(V4Z@3Q$@3iF-`_YoI>P1UCA!@%y4^1B?(VQy zEE)it91%i5Zrf;!#~2d@QkEs2pP#W@E^&T-j?>fA7zU2NlydDIB7$5)O8|KhQA2e^ zgu!3{?>(l|DXOZ1wKjg<`ST7dd8^vWYD<{`t+kL+VmKV)pP!t7>F(}It4-XHhsw!5SO=U4%4M4Uc^){u*T8pA6u)DhpBEoDo!~Oj|h$sSX z%j-z#)}7X3t9!j3Mxzm=lqky*@9*!Zs;WWZw!3Q{Zac&ld+$*c1^WFy>bk~au|Qqd zu-2}fZ!4YmRqFmW?!EUh@wL{-^BmS%OePc5b&XD^vqs~l@PrT`(~bXHTm;f~^YQV4 zx~`$MhSoZslTtRkYrMlXkiARWR7wrUi2rG=WAd+7D>&yG^|Re)*_i(oO-cvLKKOvu zY8Cgr_i)br(v}$4eyc%gyV$b#+_{MedwYA(na1nuE3U7vW7p?en&u(X+Q3LH*cMNv z6oe2MjYc^A=M;IKV=|dwJRUa`+U_viWg2g_!O|MaQyEWUd7k6Xzkhy`+y^N2Q%j|k zab{_c7O5fD+Fwdp9Gld|g7Dr)p$I7;g^b;S2P`(e-F!J*GIgJbpp=T%5fS?RKC&!} zk4~pk%w{t@K0e}W`4xfKOCbcZEQ?BQ=c3}tE9E+^?kU|wgr}z`yu7^N_VyNKS;iQ1 zze|m`);7is06$}5T6Fng1_IECN59|4!NCFE-ri7ERRr|j!&)1`oO4l7sd7cP+YL-b t+Q+uFCysMEg0O*{hn$-{!}1;x;V-Fn0I?km*yI2J002ovPDHLkV1l^Fsqg>* literal 0 HcmV?d00001 diff --git a/examples/HeterLeNet/images/1.png b/examples/HeterLeNet/images/1.png new file mode 100644 index 0000000000000000000000000000000000000000..2fb37eb64fca3445f017fc9893a5d50089d9961a GIT binary patch literal 4597 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 literal 0 HcmV?d00001 diff --git a/examples/HeterLeNet/images/2.png b/examples/HeterLeNet/images/2.png new file mode 100644 index 0000000000000000000000000000000000000000..b4191b9677d70f9e62350e42a1bf41de50a0c678 GIT binary patch literal 7304 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 b#y%$O3$W9oCL!^^pOyA){ablAABX%O5us?{ literal 0 HcmV?d00001 diff --git a/examples/HeterLeNet/images/3.png b/examples/HeterLeNet/images/3.png new file mode 100644 index 0000000000000000000000000000000000000000..0402de25e8c47ea3c2583c63d985cc967e729e3f GIT binary patch literal 6847 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 z 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 JPDHLkV1oBkzn%a9 literal 0 HcmV?d00001 diff --git a/examples/HeterLeNet/images/6.png b/examples/HeterLeNet/images/6.png new file mode 100644 index 0000000000000000000000000000000000000000..3dcfa7f4d1023ed8c0b3a2a8f79c9e3d6eaad3d3 GIT binary patch literal 6500 zcmV-q8Jp&bP)4Tx04R}dkWWhjQ540`s3nvOqX?1~vk0QFkkKgGO%@fn7_{gQv>4x*3OYT; ziD(mjfR@pwee?~a2 zjJmqEuKHi#K?p%iq0?j~t{X;zM)0leRlSEI^=?f5^?V*m<)?41_cpu(Pp`h?zw>R? zWo1f?^n+Ss+;IUVLTv1~T=G6~pF>9xA4<+P_*8Pb!58(JrDUA=mN>|ArbYZn98S0R z*%mGqw%OMW^7=r=UQUtrQx9Smb4burVL-zqwT1=C=>MHqeJ74BaO}cC9$Dnz(zZ?x zM*$h)Mc7~%N0?YcggPd({+(gdvnlHdouJb6tYP3R3iO7X-Voi?a{ye9a?>$?l2xj{ z(q>d^aCaH#I1=J*1@MmmwTck$Wg%)OfcF8os(u00sVjN>5*gB&>0U$h85#^p4keUg}M~1<*;H`Yd%q=<+NgS6VXghcAY|j7j z#~&>XrQ*4B=ek|Hc6ARt@IZIy(4p?mJMV1s{r&gf-K(#@+Wqv?Pi+pM#g6n7dFZj9 zJ>g@I=h&&AsEbXJz4_*wyD0(@#;n$oF_ZPjD$Q6X%>-3!>%ekW1hon3uyo%P-?=V5@mG^ zEnvjBw8l(m;uu3V{BfY_v$`VBL6)t-GhI7&?C1_3KHNR_*kj$HgNM4&4&3eAx3AFw zhDTcd`s=Svo*ioJNYt6nJoRv@HVpNLY^{7(AvPqykV?-pTIlI(GoCgRR-Q`B!f{l+ z<(6C80U>S47oAO=*ZsQY(g&4S)1R zPOG?z*xR0c_Sps=;G{5J_8ckbAkqHz+i%_HpMT!{_~Vb=@o$fJ$G$k$A~Md`d8_@# z*|C~Zbqw(@0T9EG09tC4FoLr&HnLTok@lMuycJ*zW}iEA=1kl40i?K=I3&oMLu3Nj zGab>1=9!MuXHIvg{yf!P_~*iSvGKD9*Z{;!ADX#6FITEB`gCaH1KFzpTux!eC{P)w zjq*A{CJ8TN;}E_SeGw(fTutZ_bq5X{XwlS8x)D(5N&vS%9zTA(`~LgyyPtplxt+YO zH?woIjgMaQDWcaiz*T*fP0`yJ%b!ZuSII0XBa^NRKr5?cg8qJ&$vC1~bw-3gbTr`I zbI(1^Df`~;-Md>&l>hV3KkfeKilVwOA3b`s`{tW(#`ibHQ3Yc80rf@1ig{G~B0?vh4 zilV#cJ^l34?a*-ww^W;5Oc}aF*NGD+y3aoQtVNvb3SfZ)T;l#r7J?tXXNaYwgx>(=hQ z_ugx~^ji@7W9E>yz%?HleeQ{Ls%R>|tL=25D*=#>@C1j(Q2tC23S*R;NC{m(WBRp( zM;imQ(NTHzqenYEJ>A`Q+ii^|%@~`5iM(egtO&ygDC3^Z2Yk;Q*4M`QIxmp3Xn<4A zucb$gZPgF7jEAQ&mOs~=!bQh;60{1Qeu_RPI3q#;=ED5UGtad2yZ`?C#~=U>kI3YaDqX%XqdEQJFy-2jv390YK`m>0N-KI4h1Y9D&Q3&0rkPg1zA)N_nw3`2q7u&|doaRK5AgU>rZz~K{_QuT{3zUbb3 z^Ud)qD&tbx^#!mN0ZkQ!suJe|Qsy^iQ4`(9%@;o7`t=!YrP2V*O7tg>aOio~qGjU- zP9~>Ibj2ypA^#o+{vu95Okv{P4r}TK?N_zinXAE&WBK+X8*` zi_`#;h&P9tv^Bry0HdE0(DSSfU!^VAAMb%xaTQpO&NxP7Wy6b(<{6lxCDE2Q$_^1# z!S7^!|NZwHV7}9EVFnmL=^~dxCt3~@@|hC=`T*3%CbAVA{XB;!&)U#3=cM+!QaHeA z6$WR&(HC{@Z}vR^b#zv}J2#ZEn=1p|xE=x`| z4hU60bhf772P$+t{V}wD83Wi~tv+M_*+hxHjM0(Q;S>2S-$9J0VaVt zl@*QiLrMcslu*nVAjBy0SzUXY%5h)%sQB!M(vlu~*ohxcw5SuQ(ik6*Vv|EADIB}# zi9NsxK-#1{c~MIjn_P7wM`!G(ldkxM$JkoR_@^B!37I4yGb#qhFk^9?!N3EIB5IVp zJ>eJtz0dPT8Qq%}2TBea^X1?{6V2vOGiSiVs}D4DdCvV1Ab?G_=%WS1Nq~ii-SnwL z<+@ThD;5VhVPeK|6o8@*5DYgCd_YS>Y3X#;x*$81MI61rpdd~xeL>_|;fMkha`rq9ixiPZ9vzVS0W3gr zUTWgmxnpPNlgz&T``TQO|283SmNltiL7{fwmzom?UX4LBm>@S(%q zgAYE~fI_q9sel$qK$Tu1LxcsufX6uii7NU4E{y@Jp9sHe^tsx%crNY6jjdm|zB~8# zx%TqH-U>*+S^zM8_FOelpD2q@d`v*Z-$`u)FoN3j`vR4oekM-KX%1}PvAx@K+n%;3 z(F0`Q#bA64^z0ipEnu=3WD*^s&nFqLzUaWWb<5Un_nzGiSkVVeQEX3hQMW+Tv(xPk z2|S0B)83Y0fqWGTz}TIZO+&u1XHpqQ;3S4gbd#D;%Bs>z5lvQF)Nw??%P>ZZIv@Zj zQGfZzw1Alq)<*7m=3>qmR!=;I*p&1YUU5o~UeYj0FUr^Cj! z;A?`&8Dm>2Tj^MBSrdR+ohSz&Ab@A(^`&OO1c(A)Wo~xyHNE$Oczx1{u|U;F7gf8a zcXbyoUT7cxq#eD@xe;jVZy3!xHM)ub@n4xX!RU{O6V(8-hym8V`0&FIck^@e-6x-X z(q5k#vvB5C_0<&ftyIPU_Q4@oS7k_%2{>%EMa_mA7r&|mEXO!Ohp|>h_5h88Ke!}Yotmxq+eZFwNcz*GhsxISbBGh@X5UN(o6017R~fJtbpvW zVLQ-dN_^JFSGKISOvPaeqRfP~1jqnr3@;N zqQrqAf;j9H6=hCj;8_?t$pexubn{sh^LUf(x6*)0?c;!)xoJ?v2W zV`$-P{ZWpzFV^FPmVz*8Yu|X3P@XCkTqQVe<8FJ{2ndc!Rhzcg^&-V-_}zEkwJ4R! zbdo1$F#tC+y35)3fMXHZqymhLMQ{P9%h#NMwiroOQReif*Zk}R3SaWl!U81S@r2Jj z`tiFtJo?jr4!xyt01P-`4n3fTu4NQ}tR%k2AAh{P^K<18g&bF;u~+q0UW9mY>P{vy zq!n3vlC<+Zu_*N&vEK)B5TJk!fTB@US_Bv4*I$3VZ42}O%%1t&bI*0Jyz{?A> zZ+xG`zXZU(K>xX~q>k$YG<#kgV63~BXyXhpMHz>sEx>{3;PA1Goai-9AHaboRsBlA zLRb`hfOP0cSF--yi0E~9RPX@q*s)^`JT}-)WCeSNiXcgbWxVJ>kS%?n78BwYb0I_UwJ?}z=E(%~TTI7mkHi8|LD zKM{HP<(Hcd;}$B5XRq`vA6@KFWl0MDTFkpzEXDv*Fa#o6CeY^?!%bi%rHjwJ?rw1& zzX+0ke%IoR$yQkkphufQ-!P>Ru*&I4^3@ITU$di#}C^ zDrk75u>(Q`))fZ?=TH82vVGzJg2_!I;cNM7#$EI%|0aBd{h%TK58+9Gg6sD`btuVvA_fvUH}75-#=Xd zfGBZ#+XIc!AyVjbz=&8;?DVz;-~lM004MeBn{<<<&m!x`9`n`WnJ@gqujo%IR{>a= zYkx?Aad$PV>)z(GE915HA9O}=io*&3(X!eAu@D@R)@mY$jOdZZiBh0TbD-tAs;7ZI@F(5dVlTNhc5Xlt-hzz9{O`q|Aa`zKSHgy#!#ze5xw697}C$mMe z#{n6DBHG1!W@e^=?e2K={iE&Uo9Gh7NqaVvV*|j9vy&|r%i>KctHEOlfJ2HBX^9}M zNjc5gT%G|6Oye8?m@1vnfI<#X_B}wLbL#S?#qWYSN}o?5#-%Ao_1zgcWPhT^vjq^X z-;F+%A)l9{kyBHa0BC|bh{-c>LdU}}EfBMUj8r)#lAO+> zj3b`O#{vCBqcH%|gDyJkr{*Lt+USzTc(Q*18xYbIfc8pTiSd4kjiC?mWGpRPmDn75 zZAVaE{iRX_Iio5upgu=2fPB(8{nzOKC>Z@rLwdT>=nGds@fqg~2c@pp>#i?}Kx3Q) zCcuDWPeaEeJ*720bg23kOLU1k07+l+whKj{yhFy`=W}lM*T!%ifBHVIM%6?B33Est zQk*gAEIROT96%ZKEG6x0KC1##u?IRNv;nsbjQ-Fi3XRb%O6kl!5TC_xPjtug8QEba zTFv{vE~^4?$S^d~lE~q7z~hXl)Jj#an54RoRb)h-{S7#P2bKb`?3p4DZ(4N!lr{ev z)2l3(Y^`WCK4j`391R$pl&&^(Z#_hYuMdrLE~zCFy@}4dKbLTaf#(<= zo$ikGhzRofq8xa6r|0xVGe6*C(^>&&g4gk93?SpxT9z{=&f>B0dr>J`e0&pmq7J~P z{y5d5O4PZ_Wxtck00EYi1&qDSz9^cF(JMj|sm8Nipj#k%W4C$JuYL^C`o6^QkLdD0cQ0P`#&v*(FCk<8&C@Yu!H*c%_wYYC5*&dA~E^Hw=y;|Qz+wNEL= z09DgPABbAfB2wJRq$MC62n$yhKVi5d`q9sog)80p3+LPA7a;VDN|BhiH*}d3xOf7b zs5Pb)c@{(KIW+oKTg=ht_spM4$EOaJC5H&1Dp&>jV-!kRE#vJ;oD&Uiz4cc6r&`ic zWH?xI2c!oLH~|U>07SDd(ixycn|VAd#w?l=c@8JC+d%J+Imr!`&=U-KuDocWC%uiM zwG{Ty2PiacR)m0lil|g5wKt`RBvqj|B}RDGR}f{`;=z&!@HI?y3+Rbd+s}m7cK43_*!hJ zywRI^`?@Qye(atIU>N#>L0)*9q)t?2D!s46v+?k2Q!8&@e`G>W8$F5Cs$;EvI^!GJ z=#HLhr~dd~tY@Gv5J7E}>zgEZuewh~KD?q7U)@j0E8*4WeDt7`uf=m{Y3sN?xvDec zm0v$R$)N19p~qId>C=U;Ufey8uQ3>-Fp6TpP>WX$uQnCG$zwoT^vYvSV~T!iqCC2d zhcEs9GkWaTSMY>ys733~(dWx}ZPRDxk`xvxQ4l88 literal 0 HcmV?d00001 diff --git a/examples/HeterLeNet/images/7.png b/examples/HeterLeNet/images/7.png new file mode 100644 index 0000000000000000000000000000000000000000..ed2dc2b26c462692e01805fc847d79eec5dc1863 GIT binary patch literal 6377 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 literal 0 HcmV?d00001 diff --git a/examples/HeterLeNet/images/8-16bit-565-28*28.bmp b/examples/HeterLeNet/images/8-16bit-565-28*28.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d4a43393d3d4cef12158ea6fe509105114635736 GIT binary patch literal 1634 zcmZuxKWG|J9Db$J-jLyj3^xe90|y0%2o4^kLxchfG{!|{i)U+)?FAS|ZbR}4vITM|v|46!$5Q&w3x4Pk{{ z6&P4exh`)>*aJsa@_=9Agg4;GN_(JytIJ1;$HGRn=b@R>RoGAwk_=Xk??1+_o#I%izvN!Q9zUh`diz|bxQYA%agj1I|*a9?Tw%%^} z0+nyB74J*DTlVJ8eF@PAvA>S1q@NyYVbC64TZj7S9Z9U1i3K)s~1ia`C@=}*KE-XF~aqZ-`6L}Hg*xAWZUVsg8 z&_~s$)1ySXF?YW4^+qLycxScG%UV!eLG36qV#cQ-+4{!CM{m<@x8}~K`&d9H8jDV( zTcm7}l0{ZvB_%QKp<4EQf8uvW@hp4=TyzJq{);1T$>Q0t$IISx*Vb1vLZ|RTxIlp+ zBJV3ZxxLHI$QPqC+C9NLBOR0pVtwdzYDk zC8~#4e>U7bxhh$_-P%qd60B7m@L+_Bx-4a9wa#el+=yBvi!qINH{FNoR9U^X${Fta zN+snAjYkRWu3HvA7$P^+bwP|TzY%fh*^pd4-yAzXsu7Jk256kWMBx_{2NN&f)gKGC S9(prg!Tj$99)g!0c>4=#?3xPz literal 0 HcmV?d00001 diff --git a/examples/HeterLeNet/images/8-24bit-28*28.bmp b/examples/HeterLeNet/images/8-24bit-28*28.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6591e87be83c29c3fcf0a50b150496650e6fb3e8 GIT binary patch literal 2406 zcmZ{lX(+E*7{D*a{O$XmxUxic3KtP2#3&!!8cGsF^2IGTpOg}Ad_$756j>5wYpzhX z2qm&*SISbB>|4x_XXZ_2=G6Z;Q5 zAip;OlZlCmm6er&fq|x`rk0kLwzjseuC9)bj!LCsft=aY)YQnx=$E&FnhX^5^z=|* zV2DsdLjxfLrn$K}D0OvpK848w1sK3#iZ5aQ`Zieemo2ai)G&O-sZ_WS2?QJ=VG9@D z-rmW-C+Fqm<>%+8q@)A}2I}kUqrk2(S+ii4ft&%EPm+Se?yCcpig?V-%tAv$tE#Ft zH#g7E&o3`8cXxN&+uIWo5>O@pi5Xj2V@o`0YHFkjlTY9Z4P_+G&dwzzC8wvS_xJYz z_xJZ%UtC;_jg5WF`{v{0gQ3_GIVPCH7p7DRp~wY}ub`ly{=WW~mlrr~ZEb03X{0|i zG<0@$w!OXmJ^#CZ-$45qoboC7#bQ<=ccA63Nkr4NqqO= zp-5mzM2J%*RFcig%9@#(A^q|3@yyIjYisMzpFh{u*2<~H$H!v@6DwxIBNB!}AaWFp zjg3KxM`jM9w6qigr$0D27#kbw=H}MX(eeEJytcL$6B7dg;Qukn7c7mT^czgPczJoX zwzh6+-jyoa0y8j0wb6YOj?dym?@OLfj;Ddf&y$QU_(PgNJxmEpC4DUu&}Vc zp}x1bcX4rXXJ@CVsE7nXNp=d8Q1Qan`}<2XdwP13HM!s3-jXl17EwTsQ)UV81M2*4?a literal 0 HcmV?d00001 diff --git a/examples/HeterLeNet/images/8.bmp b/examples/HeterLeNet/images/8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..7a9e02a2957ac4ce3267830b2bb6c29bcbb66968 GIT binary patch literal 3190 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 RD{}w<002ovPDHLkV1m|ht`h(N literal 0 HcmV?d00001 diff --git a/examples/HeterLeNet/images/9.png b/examples/HeterLeNet/images/9.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ac82a252b274c3701314c53cbc345656117899 GIT binary patch literal 5031 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 literal 0 HcmV?d00001 diff --git a/examples/HeterLeNet/model.py b/examples/HeterLeNet/model.py new file mode 100644 index 00000000..c0173661 --- /dev/null +++ b/examples/HeterLeNet/model.py @@ -0,0 +1,41 @@ +# ===- model.py ---------------------------------------------------------------- +# +# Licensed 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. +# +# ===--------------------------------------------------------------------------- +# +# LeNet model definition. +# +# ===--------------------------------------------------------------------------- + +import torch +import torch.nn as nn + +class LeNet(nn.Module): + def __init__(self): + super(LeNet, self).__init__() + self.conv1 = nn.Conv2d(1, 6, 5) + self.pool = nn.MaxPool2d(2, 2) + self.conv2 = nn.Conv2d(6, 16, 5) + self.fc1 = nn.Linear(16 * 4 * 4, 120) + self.fc2 = nn.Linear(120, 84) + self.fc3 = nn.Linear(84, 10) + + def forward(self, x): + x = self.pool(torch.relu(self.conv1(x))) + x = self.pool(torch.relu(self.conv2(x))) + x = x.view(-1, 16 * 4 * 4) + x = torch.relu(self.fc1(x)) + x = torch.relu(self.fc2(x)) + x = self.fc3(x) + return x diff --git a/examples/lit.cfg.py b/examples/lit.cfg.py index 7282a5bd..efbb7c0f 100644 --- a/examples/lit.cfg.py +++ b/examples/lit.cfg.py @@ -46,6 +46,7 @@ 'BuddyDeepSeekR1' 'BuddyResNet18', 'BuddyGPU', + 'HeterLeNet', 'ConvOpt', 'DAPDialect', 'DIPDialect', From c6db7fe8dd069d91fac2a04e1e6a3abd239967cd Mon Sep 17 00:00:00 2001 From: WuXintong123 <13683168028@163.com> Date: Fri, 30 May 2025 05:07:03 +0000 Subject: [PATCH 2/2] wuxintong --- examples/HeterLeNet/CMakeCache.txt | 379 +++++++++ .../CMakeFiles/3.22.1/CMakeCCompiler.cmake | 72 ++ .../CMakeFiles/3.22.1/CMakeCXXCompiler.cmake | 83 ++ .../3.22.1/CMakeDetermineCompilerABI_C.bin | Bin 0 -> 15968 bytes .../3.22.1/CMakeDetermineCompilerABI_CXX.bin | Bin 0 -> 15992 bytes .../CMakeFiles/3.22.1/CMakeSystem.cmake | 15 + .../3.22.1/CompilerIdC/CMakeCCompilerId.c | 803 ++++++++++++++++++ .../CMakeFiles/3.22.1/CompilerIdC/a.out | Bin 0 -> 16088 bytes .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 791 +++++++++++++++++ .../CMakeFiles/3.22.1/CompilerIdCXX/a.out | Bin 0 -> 16096 bytes .../HeterLeNet/CMakeFiles/CMakeOutput.log | 451 ++++++++++ .../HeterLeNet/CMakeFiles/cmake.check_cache | 1 + examples/HeterLeNet/CMakeLists.txt | 272 ++++-- .../HeterLeNet/buddy-lenet-import-test.py | 147 ++++ examples/HeterLeNet/buddy-lenet-import.py | 33 +- examples/HeterLeNet/buddy-lenet-main-test.cpp | 212 +++++ examples/HeterLeNet/buddy-lenet-main.cpp | 79 +- examples/HeterLeNet/fake-lenet.mlir | 97 +++ examples/HeterLeNet/makefile | 116 +++ .../HeterLeNet/pytorch-lenet-inference.py | 66 ++ examples/HeterLeNet/pytorch-lenet-train.py | 59 ++ frontend/Python/graph/transform/fuse_ops.py | 16 +- 22 files changed, 3587 insertions(+), 105 deletions(-) create mode 100644 examples/HeterLeNet/CMakeCache.txt create mode 100644 examples/HeterLeNet/CMakeFiles/3.22.1/CMakeCCompiler.cmake create mode 100644 examples/HeterLeNet/CMakeFiles/3.22.1/CMakeCXXCompiler.cmake create mode 100755 examples/HeterLeNet/CMakeFiles/3.22.1/CMakeDetermineCompilerABI_C.bin create mode 100755 examples/HeterLeNet/CMakeFiles/3.22.1/CMakeDetermineCompilerABI_CXX.bin create mode 100644 examples/HeterLeNet/CMakeFiles/3.22.1/CMakeSystem.cmake create mode 100644 examples/HeterLeNet/CMakeFiles/3.22.1/CompilerIdC/CMakeCCompilerId.c create mode 100755 examples/HeterLeNet/CMakeFiles/3.22.1/CompilerIdC/a.out create mode 100644 examples/HeterLeNet/CMakeFiles/3.22.1/CompilerIdCXX/CMakeCXXCompilerId.cpp create mode 100755 examples/HeterLeNet/CMakeFiles/3.22.1/CompilerIdCXX/a.out create mode 100644 examples/HeterLeNet/CMakeFiles/CMakeOutput.log create mode 100644 examples/HeterLeNet/CMakeFiles/cmake.check_cache create mode 100644 examples/HeterLeNet/buddy-lenet-import-test.py create mode 100644 examples/HeterLeNet/buddy-lenet-main-test.cpp create mode 100644 examples/HeterLeNet/fake-lenet.mlir create mode 100644 examples/HeterLeNet/makefile create mode 100644 examples/HeterLeNet/pytorch-lenet-inference.py create mode 100644 examples/HeterLeNet/pytorch-lenet-train.py diff --git a/examples/HeterLeNet/CMakeCache.txt b/examples/HeterLeNet/CMakeCache.txt new file mode 100644 index 00000000..08fcd743 --- /dev/null +++ b/examples/HeterLeNet/CMakeCache.txt @@ -0,0 +1,379 @@ +# This is the CMakeCache file. +# For build in directory: /home/wuxintong/heter/LlaMa/examples/HeterLeNet +# It was generated by CMake: /usr/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//Path to a program. +CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line + +//Path to a program. +CMAKE_AR:FILEPATH=/usr/bin/ar + +//For backwards compatibility, what version of CMake commands and +// syntax should this version of CMake try to support. +CMAKE_BACKWARDS_COMPATIBILITY:STRING=2.4 + +//Choose the type of build, options are: None Debug Release RelWithDebInfo +// MinSizeRel ... +CMAKE_BUILD_TYPE:STRING= + +//Enable/Disable color output during build. +CMAKE_COLOR_MAKEFILE:BOOL=ON + +//CXX compiler +CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++ + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-11 + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-11 + +//Flags used by the CXX compiler during all build types. +CMAKE_CXX_FLAGS:STRING= + +//Flags used by the CXX compiler during DEBUG builds. +CMAKE_CXX_FLAGS_DEBUG:STRING=-g + +//Flags used by the CXX compiler during MINSIZEREL builds. +CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the CXX compiler during RELEASE builds. +CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the CXX compiler during RELWITHDEBINFO builds. +CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//C compiler +CMAKE_C_COMPILER:FILEPATH=/usr/bin/cc + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_C_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-11 + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_C_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-11 + +//Flags used by the C compiler during all build types. +CMAKE_C_FLAGS:STRING= + +//Flags used by the C compiler during DEBUG builds. +CMAKE_C_FLAGS_DEBUG:STRING=-g + +//Flags used by the C compiler during MINSIZEREL builds. +CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the C compiler during RELEASE builds. +CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the C compiler during RELWITHDEBINFO builds. +CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Path to a program. +CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND + +//Flags used by the linker during all build types. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during DEBUG builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during MINSIZEREL builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during RELEASE builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during RELWITHDEBINFO builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL= + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/usr/local + +//Path to a program. +CMAKE_LINKER:FILEPATH=/usr/bin/ld + +//Path to a program. +CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/gmake + +//Flags used by the linker during the creation of modules during +// all build types. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of modules during +// DEBUG builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of modules during +// MINSIZEREL builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of modules during +// RELEASE builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of modules during +// RELWITHDEBINFO builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_NM:FILEPATH=/usr/bin/nm + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump + +//Value Computed by CMake +CMAKE_PROJECT_DESCRIPTION:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_HOMEPAGE_URL:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=Project + +//Path to a program. +CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib + +//Path to a program. +CMAKE_READELF:FILEPATH=/usr/bin/readelf + +//Flags used by the linker during the creation of shared libraries +// during all build types. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of shared libraries +// during DEBUG builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of shared libraries +// during MINSIZEREL builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELEASE builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELWITHDEBINFO builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries +// during all build types. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of static libraries +// during DEBUG builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of static libraries +// during MINSIZEREL builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELEASE builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELWITHDEBINFO builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=/usr/bin/strip + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//Single output directory for building all executables. +EXECUTABLE_OUTPUT_PATH:PATH= + +//Single output directory for building all libraries. +LIBRARY_OUTPUT_PATH:PATH= + +//Value Computed by CMake +Project_BINARY_DIR:STATIC=/home/wuxintong/heter/LlaMa/examples/HeterLeNet + +//Value Computed by CMake +Project_IS_TOP_LEVEL:STATIC=ON + +//Value Computed by CMake +Project_SOURCE_DIR:STATIC=/home/wuxintong/heter/LlaMa/examples + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: CMAKE_ADDR2LINE +CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_AR +CMAKE_AR-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/home/wuxintong/heter/LlaMa/examples/HeterLeNet +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=22 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=1 +//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE +CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/usr/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest +//ADVANCED property for variable: CMAKE_CXX_COMPILER +CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR +CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB +CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS +CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG +CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL +CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE +CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO +CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER +CMAKE_C_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_AR +CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB +CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS +CMAKE_C_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG +CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL +CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE +CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO +CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_DLLTOOL +CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Name of external makefile project generator. +CMAKE_EXTRA_GENERATOR:INTERNAL= +//Name of generator. +CMAKE_GENERATOR:INTERNAL=Unix Makefiles +//Generator instance identifier. +CMAKE_GENERATOR_INSTANCE:INTERNAL= +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/home/wuxintong/heter/LlaMa/examples +//Install .so files without execute permission. +CMAKE_INSTALL_SO_NO_EXE:INTERNAL=1 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_NM +CMAKE_NM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//Platform information initialized +CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RANLIB +CMAKE_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_READELF +CMAKE_READELF-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/usr/share/cmake-3.22 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//uname command +CMAKE_UNAME:INTERNAL=/usr/bin/uname +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 + diff --git a/examples/HeterLeNet/CMakeFiles/3.22.1/CMakeCCompiler.cmake b/examples/HeterLeNet/CMakeFiles/3.22.1/CMakeCCompiler.cmake new file mode 100644 index 00000000..488ad375 --- /dev/null +++ b/examples/HeterLeNet/CMakeFiles/3.22.1/CMakeCCompiler.cmake @@ -0,0 +1,72 @@ +set(CMAKE_C_COMPILER "/usr/bin/cc") +set(CMAKE_C_COMPILER_ARG1 "") +set(CMAKE_C_COMPILER_ID "GNU") +set(CMAKE_C_COMPILER_VERSION "11.4.0") +set(CMAKE_C_COMPILER_VERSION_INTERNAL "") +set(CMAKE_C_COMPILER_WRAPPER "") +set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "17") +set(CMAKE_C_EXTENSIONS_COMPUTED_DEFAULT "ON") +set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert;c_std_17;c_std_23") +set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes") +set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros") +set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert") +set(CMAKE_C17_COMPILE_FEATURES "c_std_17") +set(CMAKE_C23_COMPILE_FEATURES "c_std_23") + +set(CMAKE_C_PLATFORM_ID "Linux") +set(CMAKE_C_SIMULATE_ID "") +set(CMAKE_C_COMPILER_FRONTEND_VARIANT "") +set(CMAKE_C_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_C_COMPILER_AR "/usr/bin/gcc-ar-11") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_C_COMPILER_RANLIB "/usr/bin/gcc-ranlib-11") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_MT "") +set(CMAKE_COMPILER_IS_GNUCC 1) +set(CMAKE_C_COMPILER_LOADED 1) +set(CMAKE_C_COMPILER_WORKS TRUE) +set(CMAKE_C_ABI_COMPILED TRUE) + +set(CMAKE_C_COMPILER_ENV_VAR "CC") + +set(CMAKE_C_COMPILER_ID_RUN 1) +set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) +set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_C_LINKER_PREFERENCE 10) + +# Save compiler ABI information. +set(CMAKE_C_SIZEOF_DATA_PTR "8") +set(CMAKE_C_COMPILER_ABI "ELF") +set(CMAKE_C_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_C_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_C_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_C_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") +endif() + +if(CMAKE_C_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/11/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") +set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "gcc;gcc_s;c;gcc;gcc_s") +set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/examples/HeterLeNet/CMakeFiles/3.22.1/CMakeCXXCompiler.cmake b/examples/HeterLeNet/CMakeFiles/3.22.1/CMakeCXXCompiler.cmake new file mode 100644 index 00000000..345e9307 --- /dev/null +++ b/examples/HeterLeNet/CMakeFiles/3.22.1/CMakeCXXCompiler.cmake @@ -0,0 +1,83 @@ +set(CMAKE_CXX_COMPILER "/usr/bin/c++") +set(CMAKE_CXX_COMPILER_ARG1 "") +set(CMAKE_CXX_COMPILER_ID "GNU") +set(CMAKE_CXX_COMPILER_VERSION "11.4.0") +set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "") +set(CMAKE_CXX_COMPILER_WRAPPER "") +set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "17") +set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "ON") +set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") +set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17") +set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20") +set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23") + +set(CMAKE_CXX_PLATFORM_ID "Linux") +set(CMAKE_CXX_SIMULATE_ID "") +set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "") +set(CMAKE_CXX_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_CXX_COMPILER_AR "/usr/bin/gcc-ar-11") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/gcc-ranlib-11") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_MT "") +set(CMAKE_COMPILER_IS_GNUCXX 1) +set(CMAKE_CXX_COMPILER_LOADED 1) +set(CMAKE_CXX_COMPILER_WORKS TRUE) +set(CMAKE_CXX_ABI_COMPILED TRUE) + +set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") + +set(CMAKE_CXX_COMPILER_ID_RUN 1) +set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm) +set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) + +foreach (lang C OBJC OBJCXX) + if (CMAKE_${lang}_COMPILER_ID_RUN) + foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS) + list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension}) + endforeach() + endif() +endforeach() + +set(CMAKE_CXX_LINKER_PREFERENCE 30) +set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) + +# Save compiler ABI information. +set(CMAKE_CXX_SIZEOF_DATA_PTR "8") +set(CMAKE_CXX_COMPILER_ABI "ELF") +set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_CXX_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_CXX_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_CXX_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") +endif() + +if(CMAKE_CXX_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/11;/usr/include/x86_64-linux-gnu/c++/11;/usr/include/c++/11/backward;/usr/lib/gcc/x86_64-linux-gnu/11/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") +set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc") +set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/examples/HeterLeNet/CMakeFiles/3.22.1/CMakeDetermineCompilerABI_C.bin b/examples/HeterLeNet/CMakeFiles/3.22.1/CMakeDetermineCompilerABI_C.bin new file mode 100755 index 0000000000000000000000000000000000000000..59672f58544a0d3fa118329bec892cc5d8608ac8 GIT binary patch literal 15968 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 Z0>QaorNy;#ZU061!veG*;1CeSKLPgAN{|2m literal 0 HcmV?d00001 diff --git a/examples/HeterLeNet/CMakeFiles/3.22.1/CMakeDetermineCompilerABI_CXX.bin b/examples/HeterLeNet/CMakeFiles/3.22.1/CMakeDetermineCompilerABI_CXX.bin new file mode 100755 index 0000000000000000000000000000000000000000..cfa527b53452d63fe64b6a8e2d060ddc5e29a3a6 GIT binary patch literal 15992 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 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 +# define COMPILER_ID "XL" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__BCC__) +# define COMPILER_ID "Bruce" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + +#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC) +# define COMPILER_ID "SDCC" +# if defined(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR) +# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH) +# else + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#if !defined(__STDC__) && !defined(__clang__) +# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__) +# define C_VERSION "90" +# else +# define C_VERSION +# endif +#elif __STDC_VERSION__ > 201710L +# define C_VERSION "23" +#elif __STDC_VERSION__ >= 201710L +# define C_VERSION "17" +#elif __STDC_VERSION__ >= 201000L +# define C_VERSION "11" +#elif __STDC_VERSION__ >= 199901L +# define C_VERSION "99" +#else +# define C_VERSION "90" +#endif +const char* info_language_standard_default = + "INFO" ":" "standard_default[" C_VERSION "]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +/* !defined(_MSC_VER) to exclude Clang's MSVC compatibility mode. */ +#if (defined(__clang__) || defined(__GNUC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) && !defined(_MSC_VER) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +# if defined(__CLASSIC_C__) +int main(argc, argv) int argc; char *argv[]; +# else +int main(int argc, char* argv[]) +# endif +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} +#endif diff --git a/examples/HeterLeNet/CMakeFiles/3.22.1/CompilerIdC/a.out b/examples/HeterLeNet/CMakeFiles/3.22.1/CompilerIdC/a.out new file mode 100755 index 0000000000000000000000000000000000000000..c786756abbd10a6ac500dd20933efa409d328d0c GIT binary patch literal 16088 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 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) || defined(__GNUG__) +# define COMPILER_ID "GNU" +# if defined(__GNUC__) +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# else +# define COMPILER_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L +# if defined(__INTEL_CXX11_MODE__) +# if defined(__cpp_aggregate_nsdmi) +# define CXX_STD 201402L +# else +# define CXX_STD 201103L +# endif +# else +# define CXX_STD 199711L +# endif +#elif defined(_MSC_VER) && defined(_MSVC_LANG) +# define CXX_STD _MSVC_LANG +#else +# define CXX_STD __cplusplus +#endif + +const char* info_language_standard_default = "INFO" ":" "standard_default[" +#if CXX_STD > 202002L + "23" +#elif CXX_STD > 201703L + "20" +#elif CXX_STD >= 201703L + "17" +#elif CXX_STD >= 201402L + "14" +#elif CXX_STD >= 201103L + "11" +#else + "98" +#endif +"]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +/* !defined(_MSC_VER) to exclude Clang's MSVC compatibility mode. */ +#if (defined(__clang__) || defined(__GNUC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) && !defined(_MSC_VER) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} diff --git a/examples/HeterLeNet/CMakeFiles/3.22.1/CompilerIdCXX/a.out b/examples/HeterLeNet/CMakeFiles/3.22.1/CompilerIdCXX/a.out new file mode 100755 index 0000000000000000000000000000000000000000..9944be481759fba2110a3ba6af6d9c647c7ea1a9 GIT binary patch literal 16096 zcmeHOYit}>6~4Pk8izc*NgEQ9(k!K|5?W7e$4O0)$vXBrV`Rr^;*>yYMq}^VyJ8<^ zcb3`_v_XMllLR#a0Y8FNwGv1mBoL^m6)jE+MX3r(evwKDg-6vOrLB3J5@k8(-t(=; z({&KgAN-hOdCooGdE7ha-kH5KbMM2+zMg0#qCiX32Ng?+m_ZVvcWxzsPG~kpstHS4Y=HSiBDIEP@vn!MR4MzaMs zmpzsykrF)Ols&iPIe9l*P%LwPcd31Sy?eWyR;$(8Su5{oQ%>(-zmrOr(qq}Omo5$V zcjbzO^q@PO<8Wj7VnM<=#>XE37wOix8f=JsN|R5oQ-aMpSJG4_KqU!gQd>5gXz z*Dc;A8@r7Gyd-!$fPY@_tpWT?f;R{7?+AWrkJ7|r zhx-b2*@yEO16}dq7~8Cy_2E2jL32J_-*2G^d6Zh5VD z`r^mz>EGHXem{F)FxfKGa^61O@gfDNt}m12Uq-FQEuYo#2tP-NeR|o`%-%oet*5H* z=Q35jqI$V;%W*b*UO3sG(e^vPz--%fdwSMB_xc|D+}sj7@`8Qwx_1i&xKjc&R4>D*I%|O(a~|R;^aAr0DR14igz7-v$1Ec#xDF z=rH+BfBLFDUAg?Tq-uP2CX&2H_|x@pV|aS~PuEa3 zpIjQNS)Z+EO;JwO!%rr!4N>>h`mWYn+@z4g41^g7GZ1DV%s`ldFau!*!VH8N2s037 zAk4s9Gr-@!ZbZHNdj@uo6!YWRT)K3WzDf=)v|gZhKAA3+v&F*EW=$CyjF6!#1R$u+S@qFt+RicV3@41^SBAk09RfiMGM2Eq)483;2FW+2Q!n1Q!9 z16Z$!^@&&ms2^Uas#T~?)-SFW`A4$O@m(Tg9pq+_@d&d?WUPne=N=~L|9ZVzWcjmr-Q9p8F*xKi*caeC0FC;X*PZ)&T$Hc3#BlL8Sajii* ze2V_LUR+ner>GE7H!EBxz`sd_dhLH!+s9NQZY*03qX_lwFAyG~mE2SB5knuV7ysAV zp01X_czIR(t*x!YN0>LY{X1*d5%3r#WE}(_Zz4SIlTkdP@eN8PfEeCOcuZ}mD%@{?-!JyTI3qeftmb)%@U_tm3ga4@hZ(1uRoozQnW`^pe1i(EzdkE?a6R=i zgvV%{Boc^h_ydHmqw$cC@uuG)k?J{#6BB#f4=zX?j5kF4mBiU5_g($Yh?KwKICNe? z``0A?)-aJ}p!d@c1?JYnq6esyT117v0QQ3%{eKrSSmYiWkT^g#$4Jy4s z7QA;L>$s(oJL#kgUTIQ|mfU>WNmcUsNpkT?4q18&OuPEskEgqi9O;rbnY}4%WPDsX zAMI;t%@#(Bcymc{dJcB>C!OT}Zin^}bbn-jXMb-O!Sw3WN!p^dyALX7U*Evq&OT?L zr{_>|&>8I9+m|Gd;J$_gb~F6D9SrG|>$yswB}HMuY-b>0;ob%(RW3RidOgbf9(o7J zDwQobm2x_z^r_(8s*!STVXWegrJc9FH&v8J@xdEjs%*GimWuVZ49B637LpDfz7{a} ziuMM(E*5V7sHKEAc<8<|P38B$N?GN}yyp%R_ezFmP|6l)-^aMJ3Pmq%jTI`^c&Rv^ zE_staXt~N z!1(vr?~nNacpQepgZ>{T{BJY|L;ErB1V{atch>G}63->hb58hUUJCxG*l`;F8CDb{1nXpCrHV2O!#A736A+X+7CPMhsdAjtdKEp1#gzhgY8F~PE&z% z3V+O_!7-0U{lWA9D*5s`L0|h_k>3|QKah#0VE=ucP``g%{J=#N@A;oC;ExCVn?(T* zI|P6X{_TK&LKNV~0v!fF#QR>rAM+Y;JYT^+c>X^Wf8<}q#Zvfr5y1q8sD4Z(ZX*0& z5(DsiYL=!DtpDc(`~By{AN9sQv|#u27)> literal 0 HcmV?d00001 diff --git a/examples/HeterLeNet/CMakeFiles/CMakeOutput.log b/examples/HeterLeNet/CMakeFiles/CMakeOutput.log new file mode 100644 index 00000000..4d07a439 --- /dev/null +++ b/examples/HeterLeNet/CMakeFiles/CMakeOutput.log @@ -0,0 +1,451 @@ +The system is: Linux - 5.15.0-130-generic - x86_64 +Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. +Compiler: /usr/bin/cc +Build flags: +Id flags: + +The output was: +0 + + +Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out" + +The C compiler identification is GNU, found in "/home/wuxintong/heter/LlaMa/examples/HeterLeNet/CMakeFiles/3.22.1/CompilerIdC/a.out" + +Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. +Compiler: /usr/bin/c++ +Build flags: +Id flags: + +The output was: +0 + + +Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" + +The CXX compiler identification is GNU, found in "/home/wuxintong/heter/LlaMa/examples/HeterLeNet/CMakeFiles/3.22.1/CompilerIdCXX/a.out" + +Detecting C compiler ABI info compiled with the following output: +Change Dir: /home/wuxintong/heter/LlaMa/examples/HeterLeNet/CMakeFiles/CMakeTmp + +Run Build Command(s):/usr/bin/gmake -f Makefile cmTC_0aee0/fast && /usr/bin/gmake -f CMakeFiles/cmTC_0aee0.dir/build.make CMakeFiles/cmTC_0aee0.dir/build +gmake[1]: Entering directory '/home/wuxintong/heter/LlaMa/examples/HeterLeNet/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_0aee0.dir/CMakeCCompilerABI.c.o +/usr/bin/cc -v -o CMakeFiles/cmTC_0aee0.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.22/Modules/CMakeCCompilerABI.c +Using built-in specs. +COLLECT_GCC=/usr/bin/cc +OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 +Thread model: posix +Supported LTO compression algorithms: zlib zstd +gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0aee0.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0aee0.dir/' + /usr/lib/gcc/x86_64-linux-gnu/11/cc1 -quiet -v -imultiarch x86_64-linux-gnu /usr/share/cmake-3.22/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_0aee0.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccgsxlAy.s +GNU C17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) + compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 +ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include" +#include "..." search starts here: +#include <...> search starts here: + /usr/lib/gcc/x86_64-linux-gnu/11/include + /usr/local/include + /usr/include/x86_64-linux-gnu + /usr/include +End of search list. +GNU C17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) + compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 +Compiler executable checksum: 50eaa2331df977b8016186198deb2d18 +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0aee0.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0aee0.dir/' + as -v --64 -o CMakeFiles/cmTC_0aee0.dir/CMakeCCompilerABI.c.o /tmp/ccgsxlAy.s +GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38 +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0aee0.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0aee0.dir/CMakeCCompilerABI.c.' +Linking C executable cmTC_0aee0 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_0aee0.dir/link.txt --verbose=1 +/usr/bin/cc -v -rdynamic CMakeFiles/cmTC_0aee0.dir/CMakeCCompilerABI.c.o -o cmTC_0aee0 +Using built-in specs. +COLLECT_GCC=/usr/bin/cc +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 +Thread model: posix +Supported LTO compression algorithms: zlib zstd +gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_0aee0' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_0aee0.' + /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccCv1j4e.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_0aee0 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. CMakeFiles/cmTC_0aee0.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o +COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_0aee0' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_0aee0.' +gmake[1]: Leaving directory '/home/wuxintong/heter/LlaMa/examples/HeterLeNet/CMakeFiles/CMakeTmp' + + + +Parsed C implicit include dir info from above output: rv=done + found start of include info + found start of implicit include info + add: [/usr/lib/gcc/x86_64-linux-gnu/11/include] + add: [/usr/local/include] + add: [/usr/include/x86_64-linux-gnu] + add: [/usr/include] + end of search list found + collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/11/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/11/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/lib/gcc/x86_64-linux-gnu/11/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] + + +Parsed C implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /home/wuxintong/heter/LlaMa/examples/HeterLeNet/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command(s):/usr/bin/gmake -f Makefile cmTC_0aee0/fast && /usr/bin/gmake -f CMakeFiles/cmTC_0aee0.dir/build.make CMakeFiles/cmTC_0aee0.dir/build] + ignore line: [gmake[1]: Entering directory '/home/wuxintong/heter/LlaMa/examples/HeterLeNet/CMakeFiles/CMakeTmp'] + ignore line: [Building C object CMakeFiles/cmTC_0aee0.dir/CMakeCCompilerABI.c.o] + ignore line: [/usr/bin/cc -v -o CMakeFiles/cmTC_0aee0.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.22/Modules/CMakeCCompilerABI.c] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0aee0.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0aee0.dir/'] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/cc1 -quiet -v -imultiarch x86_64-linux-gnu /usr/share/cmake-3.22/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_0aee0.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccgsxlAy.s] + ignore line: [GNU C17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include/x86_64-linux-gnu] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [GNU C17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [Compiler executable checksum: 50eaa2331df977b8016186198deb2d18] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0aee0.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0aee0.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_0aee0.dir/CMakeCCompilerABI.c.o /tmp/ccgsxlAy.s] + ignore line: [GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0aee0.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0aee0.dir/CMakeCCompilerABI.c.'] + ignore line: [Linking C executable cmTC_0aee0] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_0aee0.dir/link.txt --verbose=1] + ignore line: [/usr/bin/cc -v -rdynamic CMakeFiles/cmTC_0aee0.dir/CMakeCCompilerABI.c.o -o cmTC_0aee0 ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_0aee0' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_0aee0.'] + link line: [ /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccCv1j4e.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_0aee0 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. CMakeFiles/cmTC_0aee0.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccCv1j4e.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_0aee0] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] + arg [CMakeFiles/cmTC_0aee0.dir/CMakeCCompilerABI.c.o] ==> ignore + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [-lc] ==> lib [c] + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> [/usr/lib/x86_64-linux-gnu/Scrt1.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> [/usr/lib/x86_64-linux-gnu/crti.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> [/usr/lib/x86_64-linux-gnu/crtn.o] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11] ==> [/usr/lib/gcc/x86_64-linux-gnu/11] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> [/usr/lib] + implicit libs: [gcc;gcc_s;c;gcc;gcc_s] + implicit objs: [/usr/lib/x86_64-linux-gnu/Scrt1.o;/usr/lib/x86_64-linux-gnu/crti.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o;/usr/lib/x86_64-linux-gnu/crtn.o] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + +Detecting CXX compiler ABI info compiled with the following output: +Change Dir: /home/wuxintong/heter/LlaMa/examples/HeterLeNet/CMakeFiles/CMakeTmp + +Run Build Command(s):/usr/bin/gmake -f Makefile cmTC_e7e6d/fast && /usr/bin/gmake -f CMakeFiles/cmTC_e7e6d.dir/build.make CMakeFiles/cmTC_e7e6d.dir/build +gmake[1]: Entering directory '/home/wuxintong/heter/LlaMa/examples/HeterLeNet/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_e7e6d.dir/CMakeCXXCompilerABI.cpp.o +/usr/bin/c++ -v -o CMakeFiles/cmTC_e7e6d.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.22/Modules/CMakeCXXCompilerABI.cpp +Using built-in specs. +COLLECT_GCC=/usr/bin/c++ +OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 +Thread model: posix +Supported LTO compression algorithms: zlib zstd +gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e7e6d.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e7e6d.dir/' + /usr/lib/gcc/x86_64-linux-gnu/11/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.22/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_e7e6d.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccLdpDaS.s +GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) + compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 +ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/11" +ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include" +#include "..." search starts here: +#include <...> search starts here: + /usr/include/c++/11 + /usr/include/x86_64-linux-gnu/c++/11 + /usr/include/c++/11/backward + /usr/lib/gcc/x86_64-linux-gnu/11/include + /usr/local/include + /usr/include/x86_64-linux-gnu + /usr/include +End of search list. +GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) + compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 +Compiler executable checksum: d591828bb4d392ae8b7b160e5bb0b95f +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e7e6d.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e7e6d.dir/' + as -v --64 -o CMakeFiles/cmTC_e7e6d.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccLdpDaS.s +GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38 +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e7e6d.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e7e6d.dir/CMakeCXXCompilerABI.cpp.' +Linking CXX executable cmTC_e7e6d +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_e7e6d.dir/link.txt --verbose=1 +/usr/bin/c++ -v -rdynamic CMakeFiles/cmTC_e7e6d.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_e7e6d +Using built-in specs. +COLLECT_GCC=/usr/bin/c++ +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 +Thread model: posix +Supported LTO compression algorithms: zlib zstd +gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_e7e6d' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_e7e6d.' + /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccmnzE1C.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_e7e6d /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. CMakeFiles/cmTC_e7e6d.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o +COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_e7e6d' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_e7e6d.' +gmake[1]: Leaving directory '/home/wuxintong/heter/LlaMa/examples/HeterLeNet/CMakeFiles/CMakeTmp' + + + +Parsed CXX implicit include dir info from above output: rv=done + found start of include info + found start of implicit include info + add: [/usr/include/c++/11] + add: [/usr/include/x86_64-linux-gnu/c++/11] + add: [/usr/include/c++/11/backward] + add: [/usr/lib/gcc/x86_64-linux-gnu/11/include] + add: [/usr/local/include] + add: [/usr/include/x86_64-linux-gnu] + add: [/usr/include] + end of search list found + collapse include dir [/usr/include/c++/11] ==> [/usr/include/c++/11] + collapse include dir [/usr/include/x86_64-linux-gnu/c++/11] ==> [/usr/include/x86_64-linux-gnu/c++/11] + collapse include dir [/usr/include/c++/11/backward] ==> [/usr/include/c++/11/backward] + collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/11/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/11/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/include/c++/11;/usr/include/x86_64-linux-gnu/c++/11;/usr/include/c++/11/backward;/usr/lib/gcc/x86_64-linux-gnu/11/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] + + +Parsed CXX implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /home/wuxintong/heter/LlaMa/examples/HeterLeNet/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command(s):/usr/bin/gmake -f Makefile cmTC_e7e6d/fast && /usr/bin/gmake -f CMakeFiles/cmTC_e7e6d.dir/build.make CMakeFiles/cmTC_e7e6d.dir/build] + ignore line: [gmake[1]: Entering directory '/home/wuxintong/heter/LlaMa/examples/HeterLeNet/CMakeFiles/CMakeTmp'] + ignore line: [Building CXX object CMakeFiles/cmTC_e7e6d.dir/CMakeCXXCompilerABI.cpp.o] + ignore line: [/usr/bin/c++ -v -o CMakeFiles/cmTC_e7e6d.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.22/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e7e6d.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e7e6d.dir/'] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.22/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_e7e6d.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccLdpDaS.s] + ignore line: [GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/11"] + ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/include/c++/11] + ignore line: [ /usr/include/x86_64-linux-gnu/c++/11] + ignore line: [ /usr/include/c++/11/backward] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include/x86_64-linux-gnu] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [Compiler executable checksum: d591828bb4d392ae8b7b160e5bb0b95f] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e7e6d.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e7e6d.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_e7e6d.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccLdpDaS.s] + ignore line: [GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e7e6d.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e7e6d.dir/CMakeCXXCompilerABI.cpp.'] + ignore line: [Linking CXX executable cmTC_e7e6d] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_e7e6d.dir/link.txt --verbose=1] + ignore line: [/usr/bin/c++ -v -rdynamic CMakeFiles/cmTC_e7e6d.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_e7e6d ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_e7e6d' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_e7e6d.'] + link line: [ /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccmnzE1C.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_e7e6d /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. CMakeFiles/cmTC_e7e6d.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccmnzE1C.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_e7e6d] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] + arg [CMakeFiles/cmTC_e7e6d.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [-lc] ==> lib [c] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> [/usr/lib/x86_64-linux-gnu/Scrt1.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> [/usr/lib/x86_64-linux-gnu/crti.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> [/usr/lib/x86_64-linux-gnu/crtn.o] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11] ==> [/usr/lib/gcc/x86_64-linux-gnu/11] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> [/usr/lib] + implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc] + implicit objs: [/usr/lib/x86_64-linux-gnu/Scrt1.o;/usr/lib/x86_64-linux-gnu/crti.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o;/usr/lib/x86_64-linux-gnu/crtn.o] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + diff --git a/examples/HeterLeNet/CMakeFiles/cmake.check_cache b/examples/HeterLeNet/CMakeFiles/cmake.check_cache new file mode 100644 index 00000000..3dccd731 --- /dev/null +++ b/examples/HeterLeNet/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/examples/HeterLeNet/CMakeLists.txt b/examples/HeterLeNet/CMakeLists.txt index 6e3c3db7..5de77a1c 100644 --- a/examples/HeterLeNet/CMakeLists.txt +++ b/examples/HeterLeNet/CMakeLists.txt @@ -1,20 +1,81 @@ add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/forward0.mlir ${CMAKE_CURRENT_BINARY_DIR}/forward1.mlir + ${CMAKE_CURRENT_BINARY_DIR}/forward2.mlir + ${CMAKE_CURRENT_BINARY_DIR}/forward3.mlir ${CMAKE_CURRENT_BINARY_DIR}/subgraph0.mlir ${CMAKE_CURRENT_BINARY_DIR}/subgraph1.mlir + ${CMAKE_CURRENT_BINARY_DIR}/subgraph2.mlir + ${CMAKE_CURRENT_BINARY_DIR}/subgraph3.mlir ${CMAKE_CURRENT_BINARY_DIR}/arg0.data + ${CMAKE_CURRENT_BINARY_DIR}/arg1.data + ${CMAKE_CURRENT_BINARY_DIR}/arg2.data + ${CMAKE_CURRENT_BINARY_DIR}/arg3.data COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/buddy-lenet-import.py --output-dir ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating forward.mlir, subgraph0.mlir and parameter files" ) +set(ONE_SHOT_BUFFERIZE_OPTION "bufferize-function-boundaries=1 function-boundary-type-conversion=identity-layout-map") +set(LOWER_TO_NVVM_OPTION "cubin-chip=sm_80 cubin-features=+ptx71 cubin-format=fatbin") +set(CONVERT_MEMCPY_TO_GPU_OPTION "process-args=1") +set(CONVERT_MEMCPY_TO_GPU_OPTION_DISABLE_PROCESS_ARG "process-args=0") + +# foreach(i RANGE 0 3) +# add_custom_command( +# OUTPUT forward${i}.o +# COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${CMAKE_CURRENT_BINARY_DIR}/forward${i}.mlir +# -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith), empty-tensor-to-alloc-tensor, convert-elementwise-to-linalg, arith-bufferize, func.func(linalg-bufferize, tensor-bufferize), func-bufferize)" | +# ${LLVM_TOOLS_BINARY_DIR}/mlir-opt +# -pass-pipeline "builtin.module(func.func(buffer-deallocation-simplification, convert-linalg-to-loops), eliminate-empty-tensors, func.func(llvm-request-c-wrappers),convert-math-to-llvm, convert-math-to-libm, convert-scf-to-cf, convert-arith-to-llvm, expand-strided-metadata, finalize-memref-to-llvm, convert-func-to-llvm, reconcile-unrealized-casts)" | +# ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | +# ${LLVM_TOOLS_BINARY_DIR}/llvm-as | +# ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${CMAKE_CURRENT_BINARY_DIR}/forward${i}.o +# DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/forward${i}.mlir +# COMMENT "Building forward${i}.o" +# VERBATIM) +# +# add_custom_command( +# OUTPUT subgraph${i}.o +# COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${CMAKE_CURRENT_BINARY_DIR}/subgraph${i}.mlir +# -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith))" | +# ${BUDDY_BINARY_DIR}/buddy-opt +# -eliminate-empty-tensors +# -convert-tensor-to-linalg +# -linalg-bufferize +# -batchmatmul-optimize +# -convert-linalg-to-affine-loops +# -lower-affine +# -func-bufferize-dynamic-offset +# -arith-bufferize +# -tensor-bufferize +# -buffer-deallocation +# -finalizing-bufferize +# -convert-vector-to-scf +# -expand-strided-metadata +# -convert-vector-to-llvm +# -convert-arith-to-llvm +# -finalize-memref-to-llvm +# -convert-scf-to-cf +# -llvm-request-c-wrappers +# -convert-arith-to-llvm +# -convert-func-to-llvm +# -reconcile-unrealized-casts | +# ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | +# ${LLVM_TOOLS_BINARY_DIR}/llvm-as | +# ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${CMAKE_CURRENT_BINARY_DIR}/subgraph${i}.o +# DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/subgraph${i}.mlir +# COMMENT "Building subgraph${i}.o" +# VERBATIM) +# endforeach() + + add_custom_command( OUTPUT forward0.o - COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${CMAKE_CURRENT_BINARY_DIR}/forward0.mlir - -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith), empty-tensor-to-alloc-tensor, convert-elementwise-to-linalg, arith-bufferize, func.func(linalg-bufferize, tensor-bufferize), func-bufferize)" | - ${LLVM_TOOLS_BINARY_DIR}/mlir-opt - -pass-pipeline "builtin.module(func.func(buffer-deallocation-simplification, convert-linalg-to-loops), eliminate-empty-tensors, func.func(llvm-request-c-wrappers),convert-math-to-llvm, convert-math-to-libm, convert-scf-to-cf, convert-arith-to-llvm, expand-strided-metadata, finalize-memref-to-llvm, convert-func-to-llvm, reconcile-unrealized-casts)" | + COMMAND ${BUDDY_BINARY_DIR}/buddy-opt ${CMAKE_CURRENT_BINARY_DIR}/forward0.mlir + -buffer-deallocation + -canonicalize -cse -expand-strided-metadata -convert-memcpy-to-gpu -gpu-async-region | + ${LLVM_TOOLS_BINARY_DIR}/mlir-opt -llvm-request-c-wrappers --gpu-to-llvm | ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | ${LLVM_TOOLS_BINARY_DIR}/llvm-as | ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${CMAKE_CURRENT_BINARY_DIR}/forward0.o @@ -27,27 +88,18 @@ add_custom_command( COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${CMAKE_CURRENT_BINARY_DIR}/subgraph0.mlir -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith))" | ${BUDDY_BINARY_DIR}/buddy-opt - -eliminate-empty-tensors - -convert-tensor-to-linalg - -linalg-bufferize - -batchmatmul-optimize - -convert-linalg-to-affine-loops - -lower-affine - -func-bufferize-dynamic-offset - -arith-bufferize - -tensor-bufferize - -buffer-deallocation - -finalizing-bufferize - -convert-vector-to-scf - -expand-strided-metadata - -convert-vector-to-llvm - -convert-arith-to-llvm - -finalize-memref-to-llvm - -convert-scf-to-cf - -llvm-request-c-wrappers - -convert-arith-to-llvm - -convert-func-to-llvm - -reconcile-unrealized-casts | + -one-shot-bufferize + -func-bufferize-dynamic-offset + -convert-linalg-to-parallel-loops + -canonicalize + -gpu-map-parallel-loops + -convert-parallel-loops-to-gpu + -gpu-kernel-outlining + -buffer-deallocation + -canonicalize + -cse | + ${BUDDY_BINARY_DIR}/buddy-opt -convert-memcpy-to-gpu=${CONVERT_MEMCPY_TO_GPU_OPTION_DISABLE_PROCESS_ARG} -gpu-async-region -canonicalize | + ${LLVM_TOOLS_BINARY_DIR}/mlir-opt -llvm-request-c-wrappers --test-lower-to-nvvm=${LOWER_TO_NVVM_OPTION} | ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | ${LLVM_TOOLS_BINARY_DIR}/llvm-as | ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${CMAKE_CURRENT_BINARY_DIR}/subgraph0.o @@ -55,6 +107,42 @@ add_custom_command( COMMENT "Building subgraph0.o" VERBATIM) +# add_custom_command( +# OUTPUT forward1.o +# COMMAND ${BUDDY_BINARY_DIR}/buddy-opt ${CMAKE_CURRENT_BINARY_DIR}/forward1.mlir +# -buffer-deallocation +# -canonicalize -cse -expand-strided-metadata -convert-memcpy-to-gpu -gpu-async-region | +# ${LLVM_TOOLS_BINARY_DIR}/mlir-opt -llvm-request-c-wrappers --gpu-to-llvm | +# ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | +# ${LLVM_TOOLS_BINARY_DIR}/llvm-as | +# ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${CMAKE_CURRENT_BINARY_DIR}/forward1.o +# DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/forward1.mlir +# COMMENT "Building forward1.o" +# VERBATIM) + +# add_custom_command( +# OUTPUT subgraph1.o +# COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${CMAKE_CURRENT_BINARY_DIR}/subgraph1.mlir +# -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith))" | +# ${BUDDY_BINARY_DIR}/buddy-opt +# -one-shot-bufferize +# -func-bufferize-dynamic-offset +# -convert-linalg-to-parallel-loops +# -canonicalize +# -gpu-map-parallel-loops +# -convert-parallel-loops-to-gpu +# -gpu-kernel-outlining +# -buffer-deallocation +# -canonicalize +# -cse | +# ${BUDDY_BINARY_DIR}/buddy-opt -convert-memcpy-to-gpu=${CONVERT_MEMCPY_TO_GPU_OPTION_DISABLE_PROCESS_ARG} -gpu-async-region -canonicalize | +# ${LLVM_TOOLS_BINARY_DIR}/mlir-opt -llvm-request-c-wrappers --test-lower-to-nvvm=${LOWER_TO_NVVM_OPTION} | +# ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | +# ${LLVM_TOOLS_BINARY_DIR}/llvm-as | +# ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${CMAKE_CURRENT_BINARY_DIR}/subgraph1.o +# DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/subgraph1.mlir +# COMMENT "Building subgraph1.o" +# VERBATIM) add_custom_command( OUTPUT forward1.o COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${CMAKE_CURRENT_BINARY_DIR}/forward1.mlir @@ -100,62 +188,106 @@ add_custom_command( DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/subgraph1.mlir COMMENT "Building subgraph1.o" VERBATIM) -set(LENET_EXAMPLE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) -set(LENET_EXAMPLE_BUILD_PATH ${CMAKE_CURRENT_BINARY_DIR}) -# set(ONE_SHOT_BUFFERIZE_OPTION "bufferize-function-boundaries=1 function-boundary-type-conversion=identity-layout-map") -# set(LOWER_TO_NVVM_OPTION "cubin-chip=sm_80 cubin-features=+ptx71 cubin-format=fatbin") -# set(CONVERT_MEMCPY_TO_GPU_OPTION "process-args=1") -# set(CONVERT_MEMCPY_TO_GPU_OPTION_DISABLE_PROCESS_ARG "process-args=0") +add_custom_command( + OUTPUT forward2.o + COMMAND ${BUDDY_BINARY_DIR}/buddy-opt ${CMAKE_CURRENT_BINARY_DIR}/forward2.mlir + -buffer-deallocation + -canonicalize -cse -expand-strided-metadata -convert-memcpy-to-gpu -gpu-async-region | + ${LLVM_TOOLS_BINARY_DIR}/mlir-opt -llvm-request-c-wrappers --gpu-to-llvm | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${CMAKE_CURRENT_BINARY_DIR}/forward2.o + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/forward2.mlir + COMMENT "Building forward2.o" + VERBATIM) -# add_custom_command( -# OUTPUT forward1.o -# COMMAND ${BUDDY_BINARY_DIR}/buddy-opt ${CMAKE_CURRENT_BINARY_DIR}/forward1.mlir -# -buffer-deallocation -# -canonicalize -cse -expand-strided-metadata -convert-memcpy-to-gpu -gpu-async-region | -# ${LLVM_TOOLS_BINARY_DIR}/mlir-opt -llvm-request-c-wrappers --gpu-to-llvm | -# ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | -# ${LLVM_TOOLS_BINARY_DIR}/llvm-as | -# ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${CMAKE_CURRENT_BINARY_DIR}/forward1.o -# DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/forward1.mlir -# COMMENT "Building forward1.o" -# VERBATIM) + add_custom_command( + OUTPUT subgraph2.o + COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${CMAKE_CURRENT_BINARY_DIR}/subgraph2.mlir + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith))" | + ${BUDDY_BINARY_DIR}/buddy-opt + -one-shot-bufferize + -func-bufferize-dynamic-offset + -convert-linalg-to-parallel-loops + -canonicalize + -gpu-map-parallel-loops + -convert-parallel-loops-to-gpu + -gpu-kernel-outlining + -buffer-deallocation + -canonicalize + -cse | + ${BUDDY_BINARY_DIR}/buddy-opt -convert-memcpy-to-gpu=${CONVERT_MEMCPY_TO_GPU_OPTION_DISABLE_PROCESS_ARG} -gpu-async-region -canonicalize | + ${LLVM_TOOLS_BINARY_DIR}/mlir-opt -llvm-request-c-wrappers --test-lower-to-nvvm=${LOWER_TO_NVVM_OPTION} | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${CMAKE_CURRENT_BINARY_DIR}/subgraph2.o + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/subgraph2.mlir + COMMENT "Building subgraph2.o" + VERBATIM) -# add_custom_command( -# OUTPUT subgraph1.o -# COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${CMAKE_CURRENT_BINARY_DIR}/subgraph1.mlir -# -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith))" | -# ${BUDDY_BINARY_DIR}/buddy-opt -# -one-shot-bufferize -# -func-bufferize-dynamic-offset -# -convert-linalg-to-parallel-loops -# -canonicalize -# -gpu-map-parallel-loops -# -convert-parallel-loops-to-gpu -# -gpu-kernel-outlining -# -buffer-deallocation -# -canonicalize -# -cse | -# ${BUDDY_BINARY_DIR}/buddy-opt -convert-memcpy-to-gpu=${CONVERT_MEMCPY_TO_GPU_OPTION_DISABLE_PROCESS_ARG} -gpu-async-region -canonicalize | -# ${LLVM_TOOLS_BINARY_DIR}/mlir-opt -llvm-request-c-wrappers --test-lower-to-nvvm=${LOWER_TO_NVVM_OPTION} | -# ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | -# ${LLVM_TOOLS_BINARY_DIR}/llvm-as | -# ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${CMAKE_CURRENT_BINARY_DIR}/subgraph1.o -# DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/subgraph1.mlir -# COMMENT "Building subgraph1.o" -# VERBATIM) + add_custom_command( + OUTPUT forward3.o + COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${CMAKE_CURRENT_BINARY_DIR}/forward3.mlir + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith), empty-tensor-to-alloc-tensor, convert-elementwise-to-linalg, arith-bufferize, func.func(linalg-bufferize, tensor-bufferize), func-bufferize)" | + ${LLVM_TOOLS_BINARY_DIR}/mlir-opt + -pass-pipeline "builtin.module(func.func(buffer-deallocation-simplification, convert-linalg-to-loops), eliminate-empty-tensors, func.func(llvm-request-c-wrappers),convert-math-to-llvm, convert-math-to-libm, convert-scf-to-cf, convert-arith-to-llvm, expand-strided-metadata, finalize-memref-to-llvm, convert-func-to-llvm, reconcile-unrealized-casts)" | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${CMAKE_CURRENT_BINARY_DIR}/forward3.o + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/forward3.mlir + COMMENT "Building forward3.o" + VERBATIM) + +add_custom_command( + OUTPUT subgraph3.o + COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${CMAKE_CURRENT_BINARY_DIR}/subgraph3.mlir + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith))" | + ${BUDDY_BINARY_DIR}/buddy-opt + -eliminate-empty-tensors + -convert-tensor-to-linalg + -linalg-bufferize + -batchmatmul-optimize + -convert-linalg-to-affine-loops + -lower-affine + -func-bufferize-dynamic-offset + -arith-bufferize + -tensor-bufferize + -buffer-deallocation + -finalizing-bufferize + -convert-vector-to-scf + -expand-strided-metadata + -convert-vector-to-llvm + -convert-arith-to-llvm + -finalize-memref-to-llvm + -convert-scf-to-cf + -llvm-request-c-wrappers + -convert-arith-to-llvm + -convert-func-to-llvm + -reconcile-unrealized-casts | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${CMAKE_CURRENT_BINARY_DIR}/subgraph3.o + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/subgraph3.mlir + COMMENT "Building subgraph3.o" + VERBATIM) + +set(LENET_EXAMPLE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) +set(LENET_EXAMPLE_BUILD_PATH ${CMAKE_CURRENT_BINARY_DIR}) add_library(LENET_HETER0 STATIC subgraph0.o forward0.o) add_library(LENET_HETER1 STATIC subgraph1.o forward1.o) +add_library(LENET_HETER2 STATIC subgraph2.o forward2.o) +add_library(LENET_HETER3 STATIC subgraph3.o forward3.o) -SET_TARGET_PROPERTIES(LENET_HETER0 LENET_HETER1 PROPERTIES LINKER_LANGUAGE C) +SET_TARGET_PROPERTIES(LENET_HETER0 LENET_HETER1 LENET_HETER2 LENET_HETER3 PROPERTIES LINKER_LANGUAGE C) add_executable(buddy-lenet-run-heter buddy-lenet-main.cpp) target_link_directories(buddy-lenet-run-heter PRIVATE ${LLVM_LIBRARY_DIR}) -set(BUDDY_LENET_LIBS_GPU LENET_HETER0 LENET_HETER1 mlir_c_runner_utils mlir_async_runtime mlir_runner_utils ${PNG_LIBRARIES}) - -target_link_libraries(buddy-lenet-run-heter ${BUDDY_LENET_LIBS_GPU}) +set(BUDDY_LENET_LIBS_GPU LENET_HETER0 LENET_HETER2 mlir_c_runner_utils mlir_async_runtime mlir_runner_utils mlir_cuda_runtime ${PNG_LIBRARIES}) +set(BUDDY_LENET_LIBS_CPU LENET_HETER1 LENET_HETER3 mlir_c_runner_utils mlir_async_runtime mlir_runner_utils ${PNG_LIBRARIES}) +target_link_libraries(buddy-lenet-run-heter ${BUDDY_LENET_LIBS_CPU} ${BUDDY_LENET_LIBS_GPU}) target_compile_definitions(buddy-lenet-run-heter PRIVATE LENET_EXAMPLE_PATH="${LENET_EXAMPLE_PATH}" diff --git a/examples/HeterLeNet/buddy-lenet-import-test.py b/examples/HeterLeNet/buddy-lenet-import-test.py new file mode 100644 index 00000000..5d976b1a --- /dev/null +++ b/examples/HeterLeNet/buddy-lenet-import-test.py @@ -0,0 +1,147 @@ +# ===- buddy-lenet-import.py --------------------------------------------------- +# +# Licensed 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 is the LeNet model AOT importer. +# +# ===--------------------------------------------------------------------------- + +import os +from pathlib import Path +import argparse + +import numpy as np +import torch +from buddy.compiler.frontend import DynamoCompiler +from buddy.compiler.graph import GraphDriver +from buddy.compiler.graph.type import DeviceType +from buddy.compiler.graph.transform import simply_fuse, apply_classic_fusion +from buddy.compiler.ops import tosa +from buddy.compiler.graph.operation import * +from model import LeNet + +# Parse command-line arguments. +parser = argparse.ArgumentParser(description="LeNet model AOT importer") +parser.add_argument( + "--output-dir", + type=str, + default="./", + help="Directory to save output files." +) +args = parser.parse_args() + +# Ensure output directory exists. +output_dir = Path(args.output_dir) +output_dir.mkdir(parents=True, exist_ok=True) + +# Retrieve the LeNet model path. +model_path = os.path.dirname(os.path.abspath(__file__)) + +model = LeNet() +model = torch.load(model_path + "/lenet-model.pth", weights_only=False) +model = model.eval() + +# Initialize Dynamo Compiler with specific configurations as an importer. +dynamo_compiler = DynamoCompiler( + primary_registry=tosa.ops_registry, +) + +data = torch.randn([1, 1, 28, 28]) +# Import the model into MLIR module and parameters. +with torch.no_grad(): + graphs = dynamo_compiler.importer(model, data) + +pattern_list = [apply_classic_fusion] +graphs[0].fuse_ops(pattern_list) + +graph = graphs[0] +params = dynamo_compiler.imported_params[graph] +new_group = [graph._body[11]] +subgraph_name = "subgraph0" +graph.group_map_device[subgraph_name] = DeviceType.CPU +graph.op_groups[subgraph_name] = new_group + +params = dynamo_compiler.imported_params[graph] +new_group = [graph._body[12],graph._body[13]] +subgraph_name = "subgraph1" +graph.group_map_device[subgraph_name] = DeviceType.CPU +graph.op_groups[subgraph_name] = new_group + +params = dynamo_compiler.imported_params[graph] +new_group = [graph._body[14], graph._body[15], graph._body[16],graph._body[17]] +subgraph_name = "subgraph2" +graph.group_map_device[subgraph_name] = DeviceType.CPU +graph.op_groups[subgraph_name] = new_group + +params = dynamo_compiler.imported_params[graph] +new_group = [graph._body[18],graph._body[19]] +subgraph_name = "subgraph3" +graph.group_map_device[subgraph_name] = DeviceType.CPU +graph.op_groups[subgraph_name] = new_group +group = [] + +for i, op in enumerate(graph._body): + if isinstance(op, PlaceholderOp) or isinstance(op, OutputOp) or i < 20: + continue + print(i, op) + group.append(op) + subgraph_name = "subgraph4" + graph.group_map_device[subgraph_name] = DeviceType.CPU + graph.op_groups[subgraph_name] = group + +# pattern_list = [simply_fuse] +# graphs[0].fuse_ops(pattern_list) +driver = GraphDriver(graphs[0]) +for i in range(len(driver.subgraphs)): + driver.subgraphs[i].lower_to_top_level_ir() +# driver.subgraphs[0].lower_to_top_level_ir() +driver.construct_main_graph(True) +# Save the generated files to the specified output directory. +for i in range(len(driver.modules)): + with open(os.path.join(output_dir, f"subgraph{i}.mlir"), "w") as module_file: + print(driver.subgraphs[i]._imported_module, file=module_file) + with open(os.path.join(output_dir, f"forward{i}.mlir"), "w") as module_file: + print(driver.modules[i], file=module_file) + # 从 GraphDriver 中获取该子图收集到的参数索引列表 + param_indices = driver.subgraph_param_indices[i] + + # 根据参数索引从 loaded_params 中提取参数,并拼接为一维数组 + selected_arrays = [] + js = 0 + for idx in param_indices: + # 注意:loaded_params 中的每个参数都是一个 tensor + arr = params[idx].detach().cpu().numpy().reshape(-1) + js = js + len(arr) + selected_arrays.append(arr) + if selected_arrays: + concat_arr = np.concatenate(selected_arrays) + else: + concat_arr = np.array([]) + + # 定义输出文件名,数字 i 与子图对应 + filename = os.path.join(output_dir, f"arg{i}.data") + concat_arr.tofile(filename) +# with open(output_dir / "subgraph0.mlir", "w") as module_file: +# print(driver.subgraphs[0]._imported_module, file=module_file) +# with open(output_dir / "forward.mlir", "w") as module_file: +# print(driver.construct_main_graph(True), file=module_file) + +# params = dynamo_compiler.imported_params[graph] + +# float32_param = np.concatenate( +# [param.detach().numpy().reshape([-1]) for param in params] +# ) + +# float32_param.tofile(output_dir / "arg0.data") diff --git a/examples/HeterLeNet/buddy-lenet-import.py b/examples/HeterLeNet/buddy-lenet-import.py index 6117e385..1641bb1f 100644 --- a/examples/HeterLeNet/buddy-lenet-import.py +++ b/examples/HeterLeNet/buddy-lenet-import.py @@ -56,6 +56,7 @@ # Initialize Dynamo Compiler with specific configurations as an importer. dynamo_compiler = DynamoCompiler( primary_registry=tosa.ops_registry, + verbose = True, ) data = torch.randn([1, 1, 28, 28]) @@ -63,20 +64,38 @@ with torch.no_grad(): graphs = dynamo_compiler.importer(model, data) +graph = graphs[0] +for i, op in enumerate(graph._body): + print(i, op) +params = dynamo_compiler.imported_params[graph] +new_group = [graph._body[11]] +subgraph_name = "subgraph0" +graph.group_map_device[subgraph_name] = DeviceType.CPU +graph.op_groups[subgraph_name] = new_group + +graph = graphs[0] +params = dynamo_compiler.imported_params[graph] +new_group = [graph._body[12], graph._body[13]] +subgraph_name = "subgraph1" +graph.group_map_device[subgraph_name] = DeviceType.CPU +graph.op_groups[subgraph_name] = new_group + graph = graphs[0] params = dynamo_compiler.imported_params[graph] +new_group = [graph._body[14]] +subgraph_name = "subgraph2" +graph.group_map_device[subgraph_name] = DeviceType.CPU +graph.op_groups[subgraph_name] = new_group group = [] + for i, op in enumerate(graph._body): - if isinstance(op, PlaceholderOp) or isinstance(op, OutputOp) or i == 25: + if isinstance(op, PlaceholderOp) or isinstance(op, OutputOp) or i == 11 or i == 12 or i == 13 or i == 14: continue + print(i, op) group.append(op) - subgraph_name = "subgraph0" + subgraph_name = "subgraph3" graph.group_map_device[subgraph_name] = DeviceType.CPU graph.op_groups[subgraph_name] = group -new_group = [graph._body[25]] -subgraph_name = "subgraph1" -graph.group_map_device[subgraph_name] = DeviceType.GPU -graph.op_groups[subgraph_name] = new_group # pattern_list = [simply_fuse] # graphs[0].fuse_ops(pattern_list) @@ -100,10 +119,8 @@ for idx in param_indices: # 注意:loaded_params 中的每个参数都是一个 tensor arr = params[idx].detach().cpu().numpy().reshape(-1) - print(len(arr)) js = js + len(arr) selected_arrays.append(arr) - print(js) if selected_arrays: concat_arr = np.concatenate(selected_arrays) else: diff --git a/examples/HeterLeNet/buddy-lenet-main-test.cpp b/examples/HeterLeNet/buddy-lenet-main-test.cpp new file mode 100644 index 00000000..b286fddf --- /dev/null +++ b/examples/HeterLeNet/buddy-lenet-main-test.cpp @@ -0,0 +1,212 @@ +//===- buddy-lenet-main.cpp -----------------------------------------------===// +// +// Licensed 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. +// +//===----------------------------------------------------------------------===// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +constexpr size_t ParamsSize0 = 156; +constexpr size_t ParamsSize1 = 0; +constexpr size_t ParamsSize2 = 2416; +constexpr size_t ParamsSize3 = 30840; +constexpr size_t ParamsSize4 = 11014; + +const std::string ImgName = "1-28*28.png"; + +/// Declare LeNet forward function. +extern "C" void _mlir_ciface_forward0(MemRef *output0, + MemRef *arg0, + dip::Image *input); +extern "C" void _mlir_ciface_forward1(MemRef *output1, + MemRef *output0); +extern "C" void _mlir_ciface_forward2(MemRef *output2, + MemRef *arg2, + MemRef *output1); +extern "C" void _mlir_ciface_forward3(MemRef *output3, + MemRef *arg3, + MemRef *output2); +extern "C" void _mlir_ciface_forward4(MemRef *output, + MemRef *arg4, + MemRef *output3); +/// Print [Log] label in bold blue format. +void printLogLabel() { std::cout << "\033[34;1m[Log] \033[0m"; } + +/// Load parameters into data container. +void loadParameters(const std::string ¶mFilePath, + MemRef ¶ms) { + const auto loadStart = std::chrono::high_resolution_clock::now(); + // Open the parameter file in binary mode. + std::ifstream paramFile(paramFilePath, std::ios::in | std::ios::binary); + if (!paramFile.is_open()) { + throw std::runtime_error("[Error] Failed to open params file!"); + } + printLogLabel(); + std::cout << "Loading params..." << std::endl; + printLogLabel(); + // Print the canonical path of the parameter file. + std::cout << "Params file: " << std::filesystem::canonical(paramFilePath) + << std::endl; + // Read the parameter data into the provided memory reference. + paramFile.read(reinterpret_cast(params.getData()), + sizeof(float) * (params.getSize())); + if (paramFile.fail()) { + throw std::runtime_error("Error occurred while reading params file!"); + } + paramFile.close(); + const auto loadEnd = std::chrono::high_resolution_clock::now(); + const std::chrono::duration loadTime = + loadEnd - loadStart; + printLogLabel(); + std::cout << "Params load time: " << (double)(loadTime.count()) / 1000 + << "s\n" + << std::endl; +} + +/// Softmax function to convert logits to probabilities. +void softmax(float *input, size_t size) { + size_t i; + float max_value = -INFINITY; + double sum = 0.0; + // Find the maximum value in the input array for numerical stability. + for (i = 0; i < size; ++i) { + if (max_value < input[i]) { + max_value = input[i]; + } + } + // Calculate the sum of the exponentials of the input elements, normalized by + // the max value. + for (i = 0; i < size; ++i) { + sum += exp(input[i] - max_value); + } + // Normalize the input array with the softmax calculation. + for (i = 0; i < size; ++i) { + input[i] = exp(input[i] - max_value) / sum; + } +} + +int main() { + // Print the title of this example. + const std::string title = "LeNet Inference Powered by Buddy Compiler"; + std::cout << "\033[33;1m" << title << "\033[0m" << std::endl; + + // Define the sizes of the output tensors. + intptr_t sizesOutput[2] = {1, 10}; + intptr_t sizesOutput0[4] = {1, 6, 24, 24}; + intptr_t sizesOutput1[4] = {1, 6, 12, 12}; + intptr_t sizesOutput2[4] = {1, 16, 4, 4}; + intptr_t sizesOutput3[2] = {1, 120}; + + + // Create input and output containers for the image and model output. + std::string lenetDir = LENET_EXAMPLE_PATH; + std::string lenetBuildDir = LENET_EXAMPLE_BUILD_PATH; + std::string imgPath = lenetDir + "/images/" + ImgName; + dip::Image input(imgPath, dip::DIP_GRAYSCALE, true /* norm */); + MemRef output(sizesOutput); + MemRef output0(sizesOutput0, 0.0f); + MemRef output1(sizesOutput1, 0.0f); + MemRef output2(sizesOutput2, 0.0f); + MemRef output3(sizesOutput3, 0.0f); + + + // Load model parameters from the specified file. + + std::string paramsDir0 = lenetBuildDir + "/arg0.data"; + std::cout << paramsDir0 << std::endl; + MemRef paramsContainer0({ParamsSize0}); + loadParameters(paramsDir0, paramsContainer0); + // std::string paramsDir1 = lenetBuildDir + "/arg1.data"; + // MemRef paramsContainer1({ParamsSize1}); + // loadParameters(paramsDir1, paramsContainer1); + std::string paramsDir2 = lenetBuildDir + "/arg2.data"; + MemRef paramsContainer2({ParamsSize2}); + loadParameters(paramsDir2, paramsContainer2); + std::string paramsDir3 = lenetBuildDir + "/arg3.data"; + MemRef paramsContainer3({ParamsSize3}); + loadParameters(paramsDir3, paramsContainer3); + std::string paramsDir4 = lenetBuildDir + "/arg4.data"; + MemRef paramsContainer4({ParamsSize4}); + loadParameters(paramsDir4, paramsContainer4); + + // Timing forward0 + auto t0_start = std::chrono::high_resolution_clock::now(); + _mlir_ciface_forward0(&output0, ¶msContainer0, &input); + auto t0_end = std::chrono::high_resolution_clock::now(); + std::cout << "[Time] forward0: " + << std::chrono::duration(t0_end - t0_start).count() + << " ms" << std::endl; + + // Timing forward1 + auto t1_start = std::chrono::high_resolution_clock::now(); + _mlir_ciface_forward1(&output1, &output0); + auto t1_end = std::chrono::high_resolution_clock::now(); + std::cout << "[Time] forward1: " + << std::chrono::duration(t1_end - t1_start).count() + << " ms" << std::endl; + + // Timing forward2 + auto t2_start = std::chrono::high_resolution_clock::now(); + _mlir_ciface_forward2(&output2, ¶msContainer2, &output1); + auto t2_end = std::chrono::high_resolution_clock::now(); + std::cout << "[Time] forward2: " + << std::chrono::duration(t2_end - t2_start).count() + << " ms" << std::endl; + + + // Timing forward4 + auto t4_start = std::chrono::high_resolution_clock::now(); + _mlir_ciface_forward3(&output3, ¶msContainer3, &output2); + auto t4_end = std::chrono::high_resolution_clock::now(); + std::cout << "[Time] forward4: " + << std::chrono::duration(t4_end - t4_start).count() + << " ms" << std::endl; + + // Timing forward5 + auto t5_start = std::chrono::high_resolution_clock::now(); + _mlir_ciface_forward4(&output, ¶msContainer4, &output3); + auto t5_end = std::chrono::high_resolution_clock::now(); + std::cout << "[Time] forward5: " + << std::chrono::duration(t5_end - t5_start).count() + << " ms" << std::endl; + + + // Apply softmax to the output logits to get probabilities. + auto out = output.getData(); + softmax(out, 10); + + // Find the classification and print the result. + float maxVal = 0; + float maxIdx = 0; + for (int i = 0; i < 10; ++i) { + if (out[i] > maxVal) { + maxVal = out[i]; + maxIdx = i; + } + } + + std::cout << "Classification: " << maxIdx << std::endl; + std::cout << "Probability: " << maxVal << std::endl; + + return 0; +} diff --git a/examples/HeterLeNet/buddy-lenet-main.cpp b/examples/HeterLeNet/buddy-lenet-main.cpp index 708f83b6..7fc53e00 100644 --- a/examples/HeterLeNet/buddy-lenet-main.cpp +++ b/examples/HeterLeNet/buddy-lenet-main.cpp @@ -26,20 +26,25 @@ #include #include -constexpr size_t ParamsSize0 = 44416; -constexpr size_t ParamsSize1 = 10; +constexpr size_t ParamsSize0 = 156; +constexpr size_t ParamsSize1 = 0; +constexpr size_t ParamsSize2 = 2416; +constexpr size_t ParamsSize3 = 41854; const std::string ImgName = "1-28*28.png"; /// Declare LeNet forward function. -extern "C" void _mlir_ciface_forward0(MemRef *output0, - MemRef *output1, +extern "C" void _mlir_ciface_forward0(MemRef *output0, MemRef *arg0, dip::Image *input); -extern "C" void _mlir_ciface_forward1(MemRef *output, +extern "C" void _mlir_ciface_forward1(MemRef *output1, + MemRef *output0); +extern "C" void _mlir_ciface_forward2(MemRef *output2, + MemRef *arg2, + MemRef *output1); +extern "C" void _mlir_ciface_forward3(MemRef *output, MemRef *arg1, - MemRef *output0, - MemRef *output1); + MemRef *output2); /// Print [Log] label in bold blue format. void printLogLabel() { std::cout << "\033[34;1m[Log] \033[0m"; } @@ -103,8 +108,9 @@ int main() { // Define the sizes of the output tensors. intptr_t sizesOutput[2] = {1, 10}; - intptr_t sizesOutput0[2] = {1, 84}; - intptr_t sizesOutput1[2] = {84, 10}; + intptr_t sizesOutput0[4] = {1, 6, 24, 24}; + intptr_t sizesOutput1[4] = {1, 6, 12, 12}; + intptr_t sizesOutput2[4] = {1, 16, 8, 8}; // Create input and output containers for the image and model output. std::string lenetDir = LENET_EXAMPLE_PATH; @@ -112,23 +118,58 @@ int main() { std::string imgPath = lenetDir + "/images/" + ImgName; dip::Image input(imgPath, dip::DIP_GRAYSCALE, true /* norm */); MemRef output(sizesOutput); - MemRef output0(sizesOutput0); - MemRef output1(sizesOutput1); + MemRef output0(sizesOutput0, 0.0f); + MemRef output1(sizesOutput1, 0.0f); + MemRef output2(sizesOutput2, 0.0f); + + // Load model parameters from the specified file. std::string paramsDir0 = lenetBuildDir + "/arg0.data"; std::cout << paramsDir0 << std::endl; MemRef paramsContainer0({ParamsSize0}); loadParameters(paramsDir0, paramsContainer0); - std::string paramsDir1 = lenetBuildDir + "/arg1.data"; - MemRef paramsContainer1({ParamsSize1}); - loadParameters(paramsDir1, paramsContainer1); - std::cout << "++++++++++" << std::endl; + // std::string paramsDir1 = lenetBuildDir + "/arg1.data"; + // MemRef paramsContainer1({ParamsSize1}); + // loadParameters(paramsDir1, paramsContainer1); + std::string paramsDir2 = lenetBuildDir + "/arg2.data"; + MemRef paramsContainer2({ParamsSize2}); + loadParameters(paramsDir2, paramsContainer2); + std::string paramsDir3 = lenetBuildDir + "/arg3.data"; + MemRef paramsContainer3({ParamsSize3}); + loadParameters(paramsDir3, paramsContainer3); + // Call the forward function of the model. - _mlir_ciface_forward0(&output0, &output1, ¶msContainer0, &input); - std::cout << "++++++++++" << std::endl; - _mlir_ciface_forward1(&output, ¶msContainer1, &output0, &output1); - std::cout << "++++++++++" << std::endl; + const auto forward0Start = std::chrono::high_resolution_clock::now(); + _mlir_ciface_forward0(&output0, ¶msContainer0, &input); + const auto forward0End = std::chrono::high_resolution_clock::now(); + const std::chrono::duration forward0Time = forward0End - forward0Start; + printLogLabel(); + std::cout << "Forward0 execution time: " << forward0Time.count() << " ms\n"; + + const auto forward1Start = std::chrono::high_resolution_clock::now(); + _mlir_ciface_forward1(&output1, &output0); + const auto forward1End = std::chrono::high_resolution_clock::now(); + const std::chrono::duration forward1Time = forward1End - forward1Start; + printLogLabel(); + std::cout << "Forward1 execution time: " << forward1Time.count() << " ms\n"; + + const auto forward2Start = std::chrono::high_resolution_clock::now(); + _mlir_ciface_forward2(&output2, ¶msContainer2, &output1); + const auto forward2End = std::chrono::high_resolution_clock::now(); + const std::chrono::duration forward2Time = forward2End - forward2Start; + printLogLabel(); + std::cout << "Forward2 execution time: " << forward2Time.count() << " ms\n"; + + const auto forward3Start = std::chrono::high_resolution_clock::now(); + _mlir_ciface_forward3(&output, ¶msContainer3, &output2); + const auto forward3End = std::chrono::high_resolution_clock::now(); + const std::chrono::duration forward3Time = forward3End - forward3Start; + printLogLabel(); + std::cout << "Forward3 execution time: " << forward3Time.count() << " ms\n"; + + std::cout << forward0Time.count()+forward1Time.count()+forward2Time.count()+forward3Time.count() << " ms\n"; + // Apply softmax to the output logits to get probabilities. auto out = output.getData(); softmax(out, 10); diff --git a/examples/HeterLeNet/fake-lenet.mlir b/examples/HeterLeNet/fake-lenet.mlir new file mode 100644 index 00000000..d7d80a53 --- /dev/null +++ b/examples/HeterLeNet/fake-lenet.mlir @@ -0,0 +1,97 @@ +module { + func.func private @printMemrefF32(%ptr : tensor<*xf32>) + func.func private @rtclock() -> f64 + + func.func @forward(%arg0: tensor<44426xf32>, %arg1: tensor<1x1x28x28xf32>) -> tensor<1x10xf32> { + %extracted_slice = tensor.extract_slice %arg0[0] [150] [1] : tensor<44426xf32> to tensor<150xf32> + %expanded = tensor.expand_shape %extracted_slice [[0, 1, 2, 3]] : tensor<150xf32> into tensor<6x1x5x5xf32> + %extracted_slice_0 = tensor.extract_slice %arg0[150] [6] [1] : tensor<44426xf32> to tensor<6xf32> + %extracted_slice_1 = tensor.extract_slice %arg0[156] [2400] [1] : tensor<44426xf32> to tensor<2400xf32> + %expanded_2 = tensor.expand_shape %extracted_slice_1 [[0, 1, 2, 3]] : tensor<2400xf32> into tensor<16x6x5x5xf32> + %extracted_slice_3 = tensor.extract_slice %arg0[2556] [16] [1] : tensor<44426xf32> to tensor<16xf32> + %extracted_slice_4 = tensor.extract_slice %arg0[2572] [30720] [1] : tensor<44426xf32> to tensor<30720xf32> + %expanded_5 = tensor.expand_shape %extracted_slice_4 [[0, 1]] : tensor<30720xf32> into tensor<120x256xf32> + %extracted_slice_6 = tensor.extract_slice %arg0[33292] [120] [1] : tensor<44426xf32> to tensor<120xf32> + %extracted_slice_7 = tensor.extract_slice %arg0[33412] [10080] [1] : tensor<44426xf32> to tensor<10080xf32> + %expanded_8 = tensor.expand_shape %extracted_slice_7 [[0, 1]] : tensor<10080xf32> into tensor<84x120xf32> + %extracted_slice_9 = tensor.extract_slice %arg0[43492] [84] [1] : tensor<44426xf32> to tensor<84xf32> + %extracted_slice_10 = tensor.extract_slice %arg0[43576] [840] [1] : tensor<44426xf32> to tensor<840xf32> + %expanded_11 = tensor.expand_shape %extracted_slice_10 [[0, 1]] : tensor<840xf32> into tensor<10x84xf32> + %extracted_slice_12 = tensor.extract_slice %arg0[44416] [10] [1] : tensor<44426xf32> to tensor<10xf32> + %0 = "tosa.const"() <{value = dense<[0, 2, 3, 1]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1 = tosa.transpose %arg1, %0 : (tensor<1x1x28x28xf32>, tensor<4xi32>) -> tensor<1x28x28x1xf32> + %2 = "tosa.const"() <{value = dense<[0, 2, 3, 1]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3 = tosa.transpose %expanded, %2 : (tensor<6x1x5x5xf32>, tensor<4xi32>) -> tensor<6x5x5x1xf32> + %4 = tosa.conv2d %1, %3, %extracted_slice_0 {dilation = array, pad = array, stride = array} : (tensor<1x28x28x1xf32>, tensor<6x5x5x1xf32>, tensor<6xf32>) -> tensor<1x24x24x6xf32> + %5 = "tosa.const"() <{value = dense<[0, 3, 1, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %6 = tosa.transpose %4, %5 : (tensor<1x24x24x6xf32>, tensor<4xi32>) -> tensor<1x6x24x24xf32> + %7 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x6x24x24xf32>}> : () -> tensor<1x6x24x24xf32> + %8 = tosa.maximum %6, %7 : (tensor<1x6x24x24xf32>, tensor<1x6x24x24xf32>) -> tensor<1x6x24x24xf32> + %9 = "tosa.const"() <{value = dense<[0, 2, 3, 1]> : tensor<4xi32>}> : () -> tensor<4xi32> + %10 = tosa.transpose %8, %9 : (tensor<1x6x24x24xf32>, tensor<4xi32>) -> tensor<1x24x24x6xf32> + %11 = tosa.max_pool2d %10 {kernel = array, pad = array, stride = array} : (tensor<1x24x24x6xf32>) -> tensor<1x12x12x6xf32> + %12 = "tosa.const"() <{value = dense<[0, 3, 1, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %13 = tosa.transpose %11, %12 : (tensor<1x12x12x6xf32>, tensor<4xi32>) -> tensor<1x6x12x12xf32> + %14 = "tosa.const"() <{value = dense<[0, 2, 3, 1]> : tensor<4xi32>}> : () -> tensor<4xi32> + %15 = tosa.transpose %13, %14 : (tensor<1x6x12x12xf32>, tensor<4xi32>) -> tensor<1x12x12x6xf32> + %16 = "tosa.const"() <{value = dense<[0, 2, 3, 1]> : tensor<4xi32>}> : () -> tensor<4xi32> + %17 = tosa.transpose %expanded_2, %16 : (tensor<16x6x5x5xf32>, tensor<4xi32>) -> tensor<16x5x5x6xf32> + %18 = tosa.conv2d %15, %17, %extracted_slice_3 {dilation = array, pad = array, stride = array} : (tensor<1x12x12x6xf32>, tensor<16x5x5x6xf32>, tensor<16xf32>) -> tensor<1x8x8x16xf32> + %19 = "tosa.const"() <{value = dense<[0, 3, 1, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %20 = tosa.transpose %18, %19 : (tensor<1x8x8x16xf32>, tensor<4xi32>) -> tensor<1x16x8x8xf32> + %21 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x16x8x8xf32>}> : () -> tensor<1x16x8x8xf32> + %22 = tosa.maximum %20, %21 : (tensor<1x16x8x8xf32>, tensor<1x16x8x8xf32>) -> tensor<1x16x8x8xf32> + %23 = "tosa.const"() <{value = dense<[0, 2, 3, 1]> : tensor<4xi32>}> : () -> tensor<4xi32> + %24 = tosa.transpose %22, %23 : (tensor<1x16x8x8xf32>, tensor<4xi32>) -> tensor<1x8x8x16xf32> + %25 = tosa.max_pool2d %24 {kernel = array, pad = array, stride = array} : (tensor<1x8x8x16xf32>) -> tensor<1x4x4x16xf32> + %26 = "tosa.const"() <{value = dense<[0, 3, 1, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %27 = tosa.transpose %25, %26 : (tensor<1x4x4x16xf32>, tensor<4xi32>) -> tensor<1x16x4x4xf32> + %28 = tosa.reshape %27 {new_shape = array} : (tensor<1x16x4x4xf32>) -> tensor<1x256xf32> + %29 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %30 = tosa.transpose %expanded_5, %29 : (tensor<120x256xf32>, tensor<2xi32>) -> tensor<256x120xf32> + %31 = tosa.reshape %28 {new_shape = array} : (tensor<1x256xf32>) -> tensor<1x1x256xf32> + %32 = tosa.reshape %30 {new_shape = array} : (tensor<256x120xf32>) -> tensor<1x256x120xf32> + %33 = tosa.matmul %31, %32 : (tensor<1x1x256xf32>, tensor<1x256x120xf32>) -> tensor<1x1x120xf32> + %34 = tosa.reshape %33 {new_shape = array} : (tensor<1x1x120xf32>) -> tensor<1x120xf32> + %35 = tosa.reshape %extracted_slice_6 {new_shape = array} : (tensor<120xf32>) -> tensor<1x120xf32> + %36 = tosa.add %35, %34 : (tensor<1x120xf32>, tensor<1x120xf32>) -> tensor<1x120xf32> + %37 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x120xf32>}> : () -> tensor<1x120xf32> + %38 = tosa.maximum %36, %37 : (tensor<1x120xf32>, tensor<1x120xf32>) -> tensor<1x120xf32> + %39 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %40 = tosa.transpose %expanded_8, %39 : (tensor<84x120xf32>, tensor<2xi32>) -> tensor<120x84xf32> + %41 = tosa.reshape %38 {new_shape = array} : (tensor<1x120xf32>) -> tensor<1x1x120xf32> + %42 = tosa.reshape %40 {new_shape = array} : (tensor<120x84xf32>) -> tensor<1x120x84xf32> + %43 = tosa.matmul %41, %42 : (tensor<1x1x120xf32>, tensor<1x120x84xf32>) -> tensor<1x1x84xf32> + %44 = tosa.reshape %43 {new_shape = array} : (tensor<1x1x84xf32>) -> tensor<1x84xf32> + %45 = tosa.reshape %extracted_slice_9 {new_shape = array} : (tensor<84xf32>) -> tensor<1x84xf32> + %46 = tosa.add %45, %44 : (tensor<1x84xf32>, tensor<1x84xf32>) -> tensor<1x84xf32> + %47 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x84xf32>}> : () -> tensor<1x84xf32> + %48 = tosa.maximum %46, %47 : (tensor<1x84xf32>, tensor<1x84xf32>) -> tensor<1x84xf32> + %49 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %50 = tosa.transpose %expanded_11, %49 : (tensor<10x84xf32>, tensor<2xi32>) -> tensor<84x10xf32> + %51 = tosa.reshape %48 {new_shape = array} : (tensor<1x84xf32>) -> tensor<1x1x84xf32> + %52 = tosa.reshape %50 {new_shape = array} : (tensor<84x10xf32>) -> tensor<1x84x10xf32> + %53 = tosa.matmul %51, %52 : (tensor<1x1x84xf32>, tensor<1x84x10xf32>) -> tensor<1x1x10xf32> + %54 = tosa.reshape %53 {new_shape = array} : (tensor<1x1x10xf32>) -> tensor<1x10xf32> + %55 = tosa.reshape %extracted_slice_12 {new_shape = array} : (tensor<10xf32>) -> tensor<1x10xf32> + %56 = tosa.add %55, %54 : (tensor<1x10xf32>, tensor<1x10xf32>) -> tensor<1x10xf32> + return %56 : tensor<1x10xf32> + } + + func.func @main() { + %fake_params = arith.constant dense<1.0> : tensor<44426xf32> + %fake_input = arith.constant dense<2.0> : tensor<1x1x28x28xf32> + + %t_start = call @rtclock() : () -> f64 + %fake_output = call @forward(%fake_params, %fake_input) : (tensor<44426xf32>, tensor<1x1x28x28xf32>) -> tensor<1x10xf32> + %t_end = call @rtclock() : () -> f64 + + %tensor_unranked = tensor.cast %fake_output : tensor<1x10xf32> to tensor<*xf32> + call @printMemrefF32(%tensor_unranked) : (tensor<*xf32>) -> () + + %time = arith.subf %t_end, %t_start : f64 + vector.print %time : f64 + + return + } +} diff --git a/examples/HeterLeNet/makefile b/examples/HeterLeNet/makefile new file mode 100644 index 00000000..c8b53c01 --- /dev/null +++ b/examples/HeterLeNet/makefile @@ -0,0 +1,116 @@ +#!/bin/bash +BUDDY_BUILD_DIR := ../../build/ +LLVM_BUILD_DIR := ../../llvm/build/ +BUDDY_OPT := ${BUDDY_BUILD_DIR}/bin/buddy-opt +MLIR_OPT := ${LLVM_BUILD_DIR}/bin/mlir-opt +MLIR_TRANSLATE := ${LLVM_BUILD_DIR}/bin/mlir-translate +MLIR_CPU_RUNNER := ${LLVM_BUILD_DIR}/bin/mlir-cpu-runner +LLC := ${LLVM_BUILD_DIR}/bin/llc +OPT_FLAG := -O3 + +ifeq ($(shell uname),Linux) +MLIR_RUNNER_UTILS := ${LLVM_BUILD_DIR}/lib/libmlir_runner_utils.so +MLIR_C_RUNNER_UTILS := ${LLVM_BUILD_DIR}/lib/libmlir_c_runner_utils.so +MLIR_ASYNC_RUNTIME := ${LLVM_BUILD_DIR}/lib/libmlir_async_runtime.so +MTRIPLE := x86_64-unknown-linux-gnu +else ifeq ($(shell uname),Darwin) +MLIR_RUNNER_UTILS := ${LLVM_BUILD_DIR}/lib/libmlir_runner_utils.dylib +MLIR_C_RUNNER_UTILS := ${LLVM_BUILD_DIR}/lib/libmlir_c_runner_utils.dylib +MLIR_ASYNC_RUNTIME := ${LLVM_BUILD_DIR}/lib/libmlir_async_runtime.dylib +MTRIPLE := x86_64-apple-darwin +endif + +buddy-lenet-lower: + @${BUDDY_OPT} ./subgraph0.mlir \ + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith))" | \ + ${BUDDY_OPT} \ + -one-shot-bufferize\ + -func-bufferize-dynamic-offset\ + -convert-linalg-to-parallel-loops\ + -canonicalize\ + -gpu-map-parallel-loops\ + -convert-parallel-loops-to-gpu\ + -gpu-kernel-outlining\ + -buffer-deallocation\ + -canonicalize\ + -cse\ + -o ./log.mlir + +buddy-lenet-translate: + @${BUDDY_OPT} ./fake-lenet.mlir \ + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith))" | \ + ${BUDDY_OPT} \ + -eliminate-empty-tensors \ + -convert-tensor-to-linalg \ + -linalg-bufferize \ + -convert-linalg-to-affine-loops \ + -lower-affine \ + -func-bufferize \ + -arith-bufferize \ + -tensor-bufferize \ + -buffer-deallocation \ + -finalizing-bufferize \ + -convert-vector-to-scf \ + -expand-strided-metadata \ + -convert-vector-to-llvm \ + -convert-arith-to-llvm \ + -finalize-memref-to-llvm \ + -convert-scf-to-cf \ + -convert-arith-to-llvm \ + -convert-func-to-llvm \ + -reconcile-unrealized-casts | \ + ${MLIR_TRANSLATE} -mlir-to-llvmir -o log.ll + + +buddy-lenet-run: + @${BUDDY_OPT} ./fake-lenet.mlir \ + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith))" | \ + ${BUDDY_OPT} \ + -eliminate-empty-tensors \ + -convert-tensor-to-linalg \ + -linalg-bufferize \ + -convert-linalg-to-affine-loops \ + -lower-affine \ + -func-bufferize \ + -arith-bufferize \ + -tensor-bufferize \ + -buffer-deallocation \ + -finalizing-bufferize \ + -convert-vector-to-scf \ + -expand-strided-metadata \ + -convert-vector-to-llvm \ + -convert-arith-to-llvm \ + -finalize-memref-to-llvm \ + -convert-scf-to-cf \ + -convert-arith-to-llvm \ + -convert-func-to-llvm \ + -reconcile-unrealized-casts | \ + ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=void \ + -shared-libs=${MLIR_RUNNER_UTILS} -shared-libs=${MLIR_C_RUNNER_UTILS} + +buddy-lenet-opt-run: + @${BUDDY_OPT} ./fake-lenet.mlir \ + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith))" | \ + ${BUDDY_OPT} \ + -eliminate-empty-tensors \ + -convert-tensor-to-linalg \ + -linalg-bufferize \ + -batchmatmul-optimize \ + -convert-linalg-to-affine-loops \ + -lower-affine \ + -func-bufferize \ + -arith-bufferize \ + -tensor-bufferize \ + -buffer-deallocation \ + -finalizing-bufferize \ + -convert-vector-to-scf \ + -expand-strided-metadata \ + -convert-vector-to-llvm \ + -convert-arith-to-llvm \ + -finalize-memref-to-llvm \ + -convert-scf-to-cf \ + -convert-arith-to-llvm \ + -convert-func-to-llvm \ + -reconcile-unrealized-casts | \ + ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=void \ + -shared-libs=${MLIR_RUNNER_UTILS} -shared-libs=${MLIR_C_RUNNER_UTILS} diff --git a/examples/HeterLeNet/pytorch-lenet-inference.py b/examples/HeterLeNet/pytorch-lenet-inference.py new file mode 100644 index 00000000..772262b2 --- /dev/null +++ b/examples/HeterLeNet/pytorch-lenet-inference.py @@ -0,0 +1,66 @@ +# ===- pytorch-lenet-inference.py ---------------------------------------------- +# +# Licensed 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. +# +# ===--------------------------------------------------------------------------- +# +# LeNet inference with PyTorch runtime. +# +# ===--------------------------------------------------------------------------- + +import torch +from torchvision import transforms +from PIL import Image + +from model import LeNet + +# Load model +model = LeNet() +torch.load("./lenet-model.pth") +# Set the model to evaluation mode +model.eval() + +# Prepare image and convert to grayscale +image_path = "./images/3.png" +image = Image.open(image_path).convert("L") + +# Resize image to match the model's expected input dimensions +# Convert to tensor +# - This conversion is achieved by dividing the original pixel values by 255. +# - Before: An image with pixel values typically in the range [0, 255]. +# - After: A PyTorch tensor with the shape (C, H, W) and pixel values +# normalized to [0.0, 1.0]. +# Normalize +# - This step normalizes each channel of the tensor to have a mean of 0.5 and +# a standard deviation of 0.5. +# - Before: A tensor with pixel values in the range [0.0, 1.0]. +# - After: A tensor with pixel values normalized to the range [-1.0, 1.0], +# making the network training process more stable and faster by +# standardizing the range of input values. +transform = transforms.Compose( + [ + transforms.Resize((28, 28)), + transforms.ToTensor(), + transforms.Normalize((0.5,), (0.5,)), + ] +) +# Add batch dimension: [CHW] -> [NCHW] +image = transform(image).unsqueeze(0) + +# Perform inference +# No gradient tracking in this block +with torch.no_grad(): + output = model(image) + prediction = output.argmax() + +print(f"Classification: {prediction.item()}") diff --git a/examples/HeterLeNet/pytorch-lenet-train.py b/examples/HeterLeNet/pytorch-lenet-train.py new file mode 100644 index 00000000..4ee9e3ed --- /dev/null +++ b/examples/HeterLeNet/pytorch-lenet-train.py @@ -0,0 +1,59 @@ +# ===- pytorch-lenet-train.py -------------------------------------------------- +# +# Licensed 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. +# +# ===--------------------------------------------------------------------------- +# +# LeNet traning with PyTorch runtime. +# +# ===--------------------------------------------------------------------------- + +import torch +import torch.nn as nn +import torch.optim as optim +from torchvision import datasets, transforms +from torch.utils.data import DataLoader + +from model import LeNet + +# Initialize model, loss function, and optimizer +model = LeNet() +criterion = nn.CrossEntropyLoss() +optimizer = optim.Adam(model.parameters()) + +# Prepare data +transform = transforms.Compose( + [transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))] +) +train_dataset = datasets.MNIST( + root="./data", train=True, download=True, transform=transform +) +train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True) + +# Train model +epochs = 150 +for epoch in range(epochs): + model.train() + running_loss = 0.0 + for images, labels in train_loader: + optimizer.zero_grad() + outputs = model(images) + loss = criterion(outputs, labels) + loss.backward() + optimizer.step() + running_loss += loss.item() + print(f"Epoch {epoch+1}/{epochs} - Loss: {running_loss/len(train_loader)}") + +# Save the complete model +torch.save(model, "lenet-model.pth") +print("Model saved successfully.") diff --git a/frontend/Python/graph/transform/fuse_ops.py b/frontend/Python/graph/transform/fuse_ops.py index 2d22a1f5..f9292349 100644 --- a/frontend/Python/graph/transform/fuse_ops.py +++ b/frontend/Python/graph/transform/fuse_ops.py @@ -45,7 +45,7 @@ def classic_fuse_check(graph: Graph): """ for op in graph.body: pattern = None - if isinstance(op, MatmulOp): + if isinstance(op, (MatmulOp, AddMMOp)): parentop = [graph.node_table[str(i)] for i in op._parents] for target in parentop: if isinstance(target, PermuteOp) and target.args[ @@ -106,13 +106,13 @@ def apply_classic_fusion(graph: Graph): device = DeviceType.CPU # Run the first round of op fusion classic_fuse_check(graph) - for op in graph.body: - if isinstance(op, PlaceholderOp): - continue - new_op_group.append(op) - graph.op_groups = {} - graph.op_groups["subgraph0"] = new_op_group - graph.group_map_device = {"subgraph0": device} + # for op in graph.body: + # if isinstance(op, PlaceholderOp): + # continue + # new_op_group.append(op) + # graph.op_groups = {} + # graph.op_groups["subgraph0"] = new_op_group + # graph.group_map_device = {"subgraph0": device} def simply_fuse(graph: Graph):