25-PDT/PTT基址(实验与分析)

上一篇,我们分析了PDT的基址是 0xc0300000。这个地址拆分成三段式就是300-300-000. 用大白话说就是页目录表的第0x300号PDE指向的页表PTT768中的第0x300号PTE指向的物理页。


这里写图片描述
图1 PTT768

C0300000分析

0xc0300000 拆成三段式300-300-000。所以我们可以在 WinDbg 中查找页目录表的第 0x300 号PDE指向的物理页到底是谁。这里随便选一个进程的的页目录基址来做实验。


这里写图片描述
图2 惊奇的发现0x300号索引指向的PTT还是页目录基址,也PDT

如果再接着分析下去,就是把这个页目录当成PTT来分析,这是第二重身份了。该PTT的第 0x300 号PTE 的值,依然是 0x18caa063

结论就是,0xc0300000就是页目录表的基址。只要知道了这个地址,以后访问页目录表的内容还不是轻而易举。

C0000000 分析

0xc0000000拆成三段式300-000-000。我们已经知道一级索引指向的还是页目录。重点看二级索引,索引号是 0,它指向的普通物理页是谁。


这里写图片描述
图2 二级索引指向的是“普通物理页”

我们知道的一个事实是,二级索查的是 PTT 表,然而我们查的这个 PTT 表却又是 PDT 表。所以,最终的这个普通物理页其实并不普通,它可是一张 PTT。如果你觉得有点混乱,请仔细看图1中的PTT0.

总结

知道了PDT和PTT的基址,那么PDE和PTE的基址就很容易得到,只要加上偏移就行了。

如果一个线性地址被拆分成三段式PDI-PTI-OFFSET,则有:

  • PDE 的基址
// 第 PDI 个 PDE 的基址
PDT[PDI] = 0xc0300000 + PDI * 4
  • PTE 的基址
// 第 PDI 个 PDE 指向的 PTT 中的第 PTI 个 PTE 的基址
PTE[PTI] = 0xc0000000 + PDI * 4096 + PTI*4
<think>嗯,用户正在尝试在Ubuntu系统上安装CUDA 10.1对应的LibTorch版本,但在复制cuDNN文件时遇到了问题。首先,我需要理清楚用户的操作步骤和错误原因。用户执行了nvcc -V,显示CUDA 10.1已安装。然后尝试复制cuDNN的头文件和库文件到CUDA目录,但提示文件不存在。接着在修改权限时同样失败,因为文件不存在。这说明用户在安装cuDNN时可能路径不正确,或者cuDNN没有正确解压到指定位置。 接下来,我需要考虑用户可能的操作流程。通常安装cuDNN需要从NVIDIA官网下载对应版本的压缩包,解压后复制文件到CUDA目录。用户的命令是sudo cp cuda/include/cudnn.h ...,但当前目录下的cuda文件夹可能不存在,或者cuDNN文件没有被正确解压到~/cuda中。这可能是因为用户没有正确解压文件到指定位置,或者路径错误。 然后,用户的问题不仅是cuDNN安装失败,还包括如何安装对应版本的LibTorch。需要确认LibTorch版本是否CUDA 10.1兼容。PyTorch官网通常会提供不同版本的LibTorch,用户需要选择CUDA 10.1匹配的版本。例如,PyTorch 1.8.x可能支持CUDA 10.1,但需要具体查看版本对应关系。 可能用户没有正确下载和解压cuDNN,导致文件缺失。需要指导用户检查下载和解压步骤,确认cudnn.h和libcudnn*文件的存在。另外,用户可能在解压cuDNN时没有使用正确的目录结构,导致文件路径错误。 对于LibTorch的安装,用户可能需要从官网下载对应CUDA 10.1的版本,并设置环境变量如LD_LIBRARY_PATH。同时,用户可能需要配置CMakeLists.txt来正确链接库。 总结下来,解决步骤应该是先解决cuDNN安装的问题,确保文件正确复制到CUDA目录,然后下载对应CUDA 10.1的LibTorch版本,配置环境变量和编译选项。需要逐步引导用户检查cuDNN的安装步骤,确认文件路径,然后处理LibTorch的安装和配置。</think>根据你提供的命令和报错信息,可以看出你在配置CUDA 10.1环境时遇到了cuDNN文件缺失的问题,同时涉及LibTorch版本匹配。以下是分步解决方案: --- ### 一、cuDNN安装问题分析 你遇到的`cp: cannot stat...`错误表明**原始文件路径不存在**,可能原因: 1. cuDNN未正确下载或解压 2. 解压路径命令中的`~/cuda`不匹配 3. 文件层级结构不符合预期 --- ### 二、正确安装cuDNN步骤 1. **下载匹配版本** 需下载**CUDA 10.1**兼容的cuDNN(建议选择[cuDNN v7.6.5](https://developer.nvidia.com/rdp/cudnn-archive)) ``` wget https://developer.nvidia.com/compute/machine-learning/cudnn/secure/7.6.5.32/Production/10.1_20191031/cudnn-10.1-linux-x64-v7.6.5.32.tgz ``` 2. **解压并验证文件** ```bash tar -xzvf cudnn-10.1-linux-x64-v7.6.5.32.tgz ls cuda/include/cudnn.h # 确认文件存在 ls cuda/lib64/libcudnn* # 确认库文件存在 ``` 3. **复制文件到CUDA目录** ```bash sudo cp cuda/include/cudnn.h /usr/local/cuda-10.1/include/ sudo cp cuda/lib64/libcudnn* /usr/local/cuda-10.1/lib64/ ``` 4. **设置权限**(此时文件已存在) ```bash sudo chmod a+r /usr/local/cuda-10.1/include/cudnn.h sudo chmod a+r /usr/local/cuda-10.1/lib64/libcudnn* ``` --- ### 三、LibTorch版本匹配指南 #### 1. 确定版本对应关系 CUDA 10.1建议选择**LibTorch 1.8.x**系列(参考PyTorch官方[版本兼容表](https://pytorch.org/get-started/previous-versions/)): ``` PyTorch 1.8.0 + CUDA 10.1 ``` #### 2. 下载预编译包 ```bash wget https://download.pytorch.org/libtorch/cu101/libtorch-cxx11-abi-shared-with-deps-1.8.0%2Bcu101.zip unzip libtorch-cxx11-abi-shared-with-deps-1.8.0+cu101.zip ``` #### 3. 配置环境变量 在`~/.bashrc`中添加: ```bash export LIBTORCH=/path/to/libtorch export LD_LIBRARY_PATH=$LIBTORCH/lib:$LD_LIBRARY_PATH ``` #### 4. 验证安装 创建`test.cpp`: ```cpp #include <torch/torch.h> int main() { torch::Tensor tensor = torch::rand({2,3}); std::cout << tensor << std::endl; } ``` 编译命令: ```bash g++ test.cpp -o test -I $LIBTORCH/include -L $LIBTORCH/lib -ltorch -lc10 ``` --- ### 四、常见问题排查 1. **cuDNN校验失败** 使用`md5sum`检查下载文件完整性: ```bash md5sum cudnn-10.1-linux-x64-v7.6.5.32.tgz # 对比官网提供的checksum ``` 2. **LibTorch链接错误** 确保使用**cxx11 ABI**版本: ```bash # 查看系统GLIBCXX版本 strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX ``` --- ### 五、版本对照表(关键) | 组件 | 推荐版本 | |-----------|----------------| | CUDA | 10.1 | | cuDNN | v7.6.5 | | LibTorch | 1.8.0+cu101 | | GCC | ≤ 8.3.0 | 通过以上步骤,你应该能成功配置CUDA 10.1环境并安装匹配的LibTorch。如果仍有问题,建议检查文件路径的拼写错误和权限问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值