写在前面
学习 torch 源码
doc;
#include <torch/torch.h>
#include <iostream>
int main() {
// 创建张量
torch::Tensor tensor = torch::rand({2, 3});
std::cout << "随机张量:\n" << tensor << std::endl;
// 基本运算
torch::Tensor a = torch::ones({2, 2});
torch::Tensor b = torch::eye(2);
torch::Tensor c = a + b;
std::cout << "加法结果:\n" << c << std::endl;
// GPU 张量 (如果有 CUDA)
if (torch::cuda::is_available()) {
std::cout << "CUDA 可用" << std::endl;
torch::Tensor gpu_tensor = tensor.to(torch::kCUDA);
std::cout << "GPU 张量:\n" << gpu_tensor << std::endl;
}
return 0;
}
官方指定 cmake
cmake_minimum_required(VERSION 3.18 FATAL_ERROR)
project(example-app)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# LibTorch 路径 需要用绝对路径
set(LIBTORCH_PATH "/home/disk2/tar_zip_pkg/torch/libtorch/")
# 包含目录
include_directories(${LIBTORCH_PATH}/include)
include_directories(${LIBTORCH_PATH}/include/torch/csrc/api/include)
# 链接目录
link_directories(${LIBTORCH_PATH}/lib)
add_executable(example-app test.cc)
# 链接所有必要的库
target_link_libraries(example-app
PRIVATE
torch
torch_cpu
c10 ## 这个库不指定链接会报错
# 如果需要 CUDA
# torch_cuda
)
# 设置编译选项
target_compile_options(example-app PRIVATE
-D_GLIBCXX_USE_CXX11_ABI=1
)
# 设置链接选项
target_link_options(example-app PRIVATE
-Wl,--no-as-needed
)
$ cmake -Bbuild . -DCMAKE_PREFIX_PATH=/home/disk2/tar_zip_pkg/torch/libtorch/
$ cmake --build build -j
$ ./build/example-app
随机张量:
0.5450 0.8421 0.8744
0.1490 0.8660 0.7899
[ CPUFloatType{2,3} ]
加法结果:
2 1
1 2
[ CPUFloatType{2,2} ]
$ ldd build/example-app
linux-vdso.so.1 (0x00007ffde2bcf000)
libtorch.so => /home/disk2/tar_zip_pkg/torch/libtorch/lib/libtorch.so (0x00007fe0a42f1000)
libtorch_cpu.so => /home/disk2/tar_zip_pkg/torch/libtorch/lib/libtorch_cpu.so (0x00007fe08e5b0000)
libc10.so => /home/disk2/tar_zip_pkg/torch/libtorch/lib/libc10.so (0x00007fe08e48b000)
libstdc++.so.6 => /opt/compiler/gcc-12/lib/libstdc++.so.6 (0x00007fe08e268000)
libm.so.6 => /opt/compiler/gcc-12/lib/libm.so.6 (0x00007fe08e126000)
libgcc_s.so.1 => /opt/compiler/gcc-12/lib/libgcc_s.so.1 (0x00007fe08e105000)
libc.so.6 => /opt/compiler/gcc-12/lib/libc.so.6 (0x00007fe08df41000)
librt.so.1 => /opt/compiler/gcc-12/lib/librt.so.1 (0x00007fe08df35000)
libdl.so.2 => /opt/compiler/gcc-12/lib/libdl.so.2 (0x00007fe08df30000)
libpthread.so.0 => /opt/compiler/gcc-12/lib/libpthread.so.0 (0x00007fe08df10000)
libgomp-98b21ff3.so.1 => /home/disk2/tar_zip_pkg/torch/libtorch/lib/libgomp-98b21ff3.so.1 (0x00007fe08dec7000)
/opt/compiler/gcc-12/lib64/ld-linux-x86-64.so.2 (0x00007fe0a42f6000)