
PyTorch量化壓縮API:優(yōu)化深度學(xué)習(xí)模型的關(guān)鍵技術(shù)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CROSS_PREFIX arm-linux-gnueabi-)
set(CMAKE_C_COMPILER ${CROSS_PREFIX}gcc)
set(CMAKE_CXX_COMPILER ${CROSS_PREFIX}g++)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
通過(guò)指定CMAKE_TOOLCHAIN_FILE
變量,CMake可以根據(jù)工具鏈文件中的設(shè)置來(lái)進(jìn)行交叉編譯。這種方法使得同一套源碼可以在多個(gè)平臺(tái)之間無(wú)縫移植。
通過(guò)修改user.env
文件中的配置,可以輕松切換不同平臺(tái)的交叉編譯環(huán)境。以下是幾個(gè)常見(jiàn)平臺(tái)的配置示例:
USER_TOOLCHAIN_FILE="/path/to/dv300.toolchain.cmake"
USER_PLATFORM_TYPE="hisi"
USER_PLATFORM_CHIP_TYPE="dv300"
USER_TOOLCHAIN_FILE="/path/to/rv1109.toolchain.cmake"
USER_PLATFORM_TYPE="rockchip"
USER_PLATFORM_CHIP_TYPE="rv1109"
USER_TOOLCHAIN_FILE="/path/to/ssd222d.toolchain.cmake"
USER_PLATFORM_TYPE="sigmastar"
USER_PLATFORM_CHIP_TYPE="ssd222d"
通過(guò)以上配置,開(kāi)發(fā)者可以在不同的硬件平臺(tái)之間快速切換,只需更改工具鏈文件和相關(guān)平臺(tái)參數(shù)。
CMakeLists.txt是CMake項(xiàng)目的核心配置文件,負(fù)責(zé)定義項(xiàng)目的構(gòu)建流程。以下是一個(gè)典型的CMakeLists.txt文件的要點(diǎn):
## 設(shè)置CMake的最低版本要求
cmake_minimum_required(VERSION 3.10)
## 定義項(xiàng)目名稱和版本
project(mymath VERSION 0.1.0 DESCRIPTION "mymath libraries")
## 檢查是否安裝了ccache以加速編譯
find_program(CCACHE_PROGRAM ccache)
if(CCACHE_PROGRAM)
message(STATUS "Set up ccache ...")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
else()
message(WARNING "ccache has not been found")
endif()
## 編譯子目錄
add_subdirectory(src)
add_subdirectory(test)
## 安裝庫(kù)頭文件
install(DIRECTORY include DESTINATION . FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp")
通過(guò)合理配置CMakeLists.txt文件,可以確保項(xiàng)目在不同環(huán)境下的一致性和可移植性。
為了簡(jiǎn)化構(gòu)建流程,通常會(huì)編寫(xiě)一個(gè)build.sh
腳本來(lái)自動(dòng)化執(zhí)行CMake的配置、編譯和安裝過(guò)程。以下是一個(gè)示例腳本:
#!/bin/bash
set -e
source_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
user_env_file="$source_dir/user.env"
if [ ! -f "$user_env_file" ]; then
echo -e "[Warning]: $user_env_file not exists, please copy $user_env_file.sample to $user_env_file and modify it"
else
. $user_env_file
fi
build_root_dir="$source_dir/build"
install_dir="$source_dir/install"
build_type=${USER_BUILD_TYPE:-"Release"}
build_shared_libs=${USER_BUILD_SHARED_LIBS:-"OFF"}
for i in "$@"; do
case $i in
--toolchain_file=*)
toolchain_file="${i#*=}"
shift # past argument=value
;;
--clean)
clean_build="yes"
shift # past argument with no value
;;
*)
# unknown option
;;
esac
done
build_dir=$build_root_dir/$platform_type/$chip_type/$build_type
mkdir -p "$build_dir" || true
mkdir -p "$install_dir/include" || true
mkdir -p "$install_dir/lib" || true
## 清除編譯
if $clean_build == "yes" ; then
echo "clean ..."
rm $build_root_dir -rf
rm $install_dir -rf
else
pushd "$build_dir"
cmake "$source_dir" -G "$cmake_generator"
-DCMAKE_INSTALL_PREFIX="$install_dir"
-DCMAKE_TOOLCHAIN_FILE="$toolchain_file"
-DPLATFORM_TYPE="$platform_type"
-DPLATFORM_CHIP_TYPE="$platform_chip_type"
-DCMAKE_BUILD_TYPE="$build_type"
-DBUILD_SHARED_LIBS="$build_shared_libs"
# 編譯
cmake --build . --parallel
# 安裝
cmake --build . --target install
popd
fi
通過(guò)這個(gè)腳本,開(kāi)發(fā)者可以快速進(jìn)行不同平臺(tái)的交叉編譯,簡(jiǎn)化了手動(dòng)配置的繁瑣步驟。
在跨平臺(tái)編譯中,有幾個(gè)關(guān)鍵點(diǎn)需要注意:
通過(guò)仔細(xì)檢查和配置,可以減少跨平臺(tái)編譯過(guò)程中遇到的問(wèn)題,提高項(xiàng)目的穩(wěn)定性和可移植性。
在CMake項(xiàng)目中,代碼塊是非常重要的組成部分,它們不僅決定了項(xiàng)目的結(jié)構(gòu),還影響到編譯和運(yùn)行的效率。以下是一些常用的代碼塊示例:
autory(. _SRC_FILES)
add_library(${PROJECT_NAME} ${_SRC_FILES})
set_target_properties(
${PROJECT_NAME}
PROPERTIES VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR})
target_include_directories(
${PROJECT_NAME}
PUBLIC $)
install(
TARGETS ${PROJECT_NAME}
EXPORT ${PROJECT_NAME}Targets
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
RUNTIME DESTINATION bin)
通過(guò)以上代碼塊,開(kāi)發(fā)者可以定義項(xiàng)目中各個(gè)庫(kù)的構(gòu)建和安裝規(guī)則。
問(wèn):什么是交叉編譯?
問(wèn):如何在CMake中使用工具鏈文件?
CMAKE_TOOLCHAIN_FILE
變量來(lái)指定工具鏈文件,從而進(jìn)行交叉編譯。問(wèn):CMakeLists.txt中的add_subdirectory
命令有什么作用?
add_subdirectory
用于將子目錄中的CMakeLists.txt文件包含到主構(gòu)建中,實(shí)現(xiàn)模塊化的構(gòu)建管理。問(wèn):如何配置CMake以支持多平臺(tái)構(gòu)建?
問(wèn):CMake如何處理依賴庫(kù)的查找?
find_package
和include_directories
等命令來(lái)查找和包含依賴庫(kù),確保編譯時(shí)能夠正確鏈接。對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力
一鍵對(duì)比試用API 限時(shí)免費(fèi)