- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试找出 GPU 之间的链接拓扑。基本上,执行与 nvidia-smi topo -m
几乎相同的操作。
我找到了一个 CUDA 示例 topologyQuery
,它基本上调用cudaDeviceGetP2PAttribute(&perfRank, cudaDevP2PAttrPerformanceRank, device1, device2)
每对 GPU。
运行这个例子的结果(我稍微修改了输出表示)让我很困惑(在与同一台机器上的 nvidia-smi topo -m
的结果比较之后):
$ ./topologyQuery
X 1 1 0 0 0 0 0
1 X 0 1 0 0 0 0
1 0 X 0 0 0 1 0
0 1 0 X 0 0 0 1
0 0 0 0 X 1 1 0
0 0 0 0 1 X 0 1
0 0 1 0 1 0 X 0
0 0 0 1 0 1 0 X
$ nvidia-smi topo -m
GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7 CPU Affinity
GPU0 X NV1 NV1 NV2 NV2 PHB PHB PHB 0-95
GPU1 NV1 X NV2 NV1 PHB NV2 PHB PHB 0-95
GPU2 NV1 NV2 X NV2 PHB PHB NV1 PHB 0-95
GPU3 NV2 NV1 NV2 X PHB PHB PHB NV1 0-95
GPU4 NV2 PHB PHB PHB X NV1 NV1 NV2 0-95
GPU5 PHB NV2 PHB PHB NV1 X NV2 NV1 0-95
GPU6 PHB PHB NV1 PHB NV1 NV2 X NV2 0-95
GPU7 PHB PHB PHB NV1 NV2 NV1 NV2 X 0-95
来自 https://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__DEVICE.html :
cudaDevP2PAttrPerformanceRank: A relative value indicating the performance of the link between two devices. Lower value means better performance (0 being the value used for most performant link).
为什么 NV1 排名第一?为什么 PHB 排名为 0?我是否误解了 cudaDevP2PAttrPerformanceRank
查询的目的?
最佳答案
我不知道您正在测试哪种系统(它看起来大约像 DGX-1 的输出)。
关于这个问题:
Why PHB got rank 0?
如果您运行原始的 topologyQuery
示例代码,您会看到(至少在类似 DGX-1 的系统上)它不会打印出每个 GPU 对的性能等级。据我所知,它不会为指示 PHB
的地方打印出性能等级。如果您研究原始代码,原因很清楚:这些对组合不支持 P2P。但是,在这些情况下,您的代码似乎打印出一个零。所以我想说,与原始 topologyQuery
代码相比,这是您的代码中的一个缺陷,它导致了这个问题和您的误解。 PHB
未被原始代码分配为 0 级。但是您修改后的代码可以做到这一点。所以这就是你要回答的问题。
Why NV1 got rank 1?
关于其余部分,NV2
连接意味着这 2 个 GPU 之间的双链路 NVLink 连接(每个方向 50GB/s)。这将是性能最高的一种链接(在该特定系统中),因此它被分配了一个链接值 0。
NV1
连接意味着单链路 NVLink 连接(每个方向 25GB/s)。这会比 NV2
性能低,因此它被指定为 1 的链接性能值。性能数字增加表示链接性能降低。
顺便说一句,如果您打算这样做:
Basically, do pretty much the same
nvidia-smi topo -m
does.
您将无法严格使用 CUDA API 调用来做到这一点。
作为引用,这是 DGX-1 的 nvidia-smi topo -m
输出和 ./topologyQuery
输出:
# nvidia-smi topo -m
GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7 CPU Affinity
GPU0 X NV1 NV1 NV2 NV2 PHB PHB PHB 0-79
GPU1 NV1 X NV2 NV1 PHB NV2 PHB PHB 0-79
GPU2 NV1 NV2 X NV2 PHB PHB NV1 PHB 0-79
GPU3 NV2 NV1 NV2 X PHB PHB PHB NV1 0-79
GPU4 NV2 PHB PHB PHB X NV1 NV1 NV2 0-79
GPU5 PHB NV2 PHB PHB NV1 X NV2 NV1 0-79
GPU6 PHB PHB NV1 PHB NV1 NV2 X NV2 0-79
GPU7 PHB PHB PHB NV1 NV2 NV1 NV2 X 0-79
Legend:
X = Self
SYS = Connection traversing PCIe as well as the SMP interconnect between NUMA nodes (e.g., QPI/UPI)
NODE = Connection traversing PCIe as well as the interconnect between PCIe Host Bridges within a NUMA node
PHB = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU)
PXB = Connection traversing multiple PCIe switches (without traversing the PCIe Host Bridge)
PIX = Connection traversing a single PCIe switch
NV# = Connection traversing a bonded set of # NVLinks
# ./topologyQuery
GPU0 <-> GPU1:
* Atomic Supported: yes
* Perf Rank: 1
GPU0 <-> GPU2:
* Atomic Supported: yes
* Perf Rank: 1
GPU0 <-> GPU3:
* Atomic Supported: yes
* Perf Rank: 0
GPU0 <-> GPU4:
* Atomic Supported: yes
* Perf Rank: 0
GPU1 <-> GPU0:
* Atomic Supported: yes
* Perf Rank: 1
GPU1 <-> GPU2:
* Atomic Supported: yes
* Perf Rank: 0
GPU1 <-> GPU3:
* Atomic Supported: yes
* Perf Rank: 1
GPU1 <-> GPU5:
* Atomic Supported: yes
* Perf Rank: 0
GPU2 <-> GPU0:
* Atomic Supported: yes
* Perf Rank: 1
GPU2 <-> GPU1:
* Atomic Supported: yes
* Perf Rank: 0
GPU2 <-> GPU3:
* Atomic Supported: yes
* Perf Rank: 0
GPU2 <-> GPU6:
* Atomic Supported: yes
* Perf Rank: 1
GPU3 <-> GPU0:
* Atomic Supported: yes
* Perf Rank: 0
GPU3 <-> GPU1:
* Atomic Supported: yes
* Perf Rank: 1
GPU3 <-> GPU2:
* Atomic Supported: yes
* Perf Rank: 0
GPU3 <-> GPU7:
* Atomic Supported: yes
* Perf Rank: 1
GPU4 <-> GPU0:
* Atomic Supported: yes
* Perf Rank: 0
GPU4 <-> GPU5:
* Atomic Supported: yes
* Perf Rank: 1
GPU4 <-> GPU6:
* Atomic Supported: yes
* Perf Rank: 1
GPU4 <-> GPU7:
* Atomic Supported: yes
* Perf Rank: 0
GPU5 <-> GPU1:
* Atomic Supported: yes
* Perf Rank: 0
GPU5 <-> GPU4:
* Atomic Supported: yes
* Perf Rank: 1
GPU5 <-> GPU6:
* Atomic Supported: yes
* Perf Rank: 0
GPU5 <-> GPU7:
* Atomic Supported: yes
* Perf Rank: 1
GPU6 <-> GPU2:
* Atomic Supported: yes
* Perf Rank: 1
GPU6 <-> GPU4:
* Atomic Supported: yes
* Perf Rank: 1
GPU6 <-> GPU5:
* Atomic Supported: yes
* Perf Rank: 0
GPU6 <-> GPU7:
* Atomic Supported: yes
* Perf Rank: 0
GPU7 <-> GPU3:
* Atomic Supported: yes
* Perf Rank: 1
GPU7 <-> GPU4:
* Atomic Supported: yes
* Perf Rank: 0
GPU7 <-> GPU5:
* Atomic Supported: yes
* Perf Rank: 1
GPU7 <-> GPU6:
* Atomic Supported: yes
* Perf Rank: 0
GPU0 <-> CPU:
* Atomic Supported: no
GPU1 <-> CPU:
* Atomic Supported: no
GPU2 <-> CPU:
* Atomic Supported: no
GPU3 <-> CPU:
* Atomic Supported: no
GPU4 <-> CPU:
* Atomic Supported: no
GPU5 <-> CPU:
* Atomic Supported: no
GPU6 <-> CPU:
* Atomic Supported: no
GPU7 <-> CPU:
* Atomic Supported: no
关于cuda - 使用 CUDA 以编程方式找出 GPU 链接拓扑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57983382/
谁能解释或指出在多 GPU/多显示器设置中渲染如何工作的解释(或至少一些线索)? 例如,我安装了 5 个 NVIDIA Quadro 4000 视频卡并连接了 9 个显示器。显示不进行任何分组。刚刚在
以下代码报错: import spacy spacy.require_gpu() Traceback (most recent call last): File "/home/user/Pycha
正如问题已经暗示的那样,我是深度学习的新手。我知道模型的学习过程在没有 GPU 的情况下会很慢。如果我愿意等待,如果我只使用CPU可以吗? 最佳答案 在计算深度学习(以及一般的神经网络)中执行的许多操
我知道 Renderscript 的设计是为了掩盖我正在运行的处理器的事实,但是有没有办法编写代码,以便在支持 GPU 计算的设备(目前是 Nexus 10)上运行显卡?有什么方法可以判断脚本的功能正
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 8 年前。 Improv
我想以编程方式找出可用的 GPU 及其当前内存使用情况,并根据内存可用性使用其中一个 GPU。我想在 PyTorch 中执行此操作。 我在这个 post 中看到了以下解决方案: import torc
我喜欢 GPU Gems 的结构化技术摘要。但是自上次发布以来已经过去了很长时间,应该开发新算法来处理新型硬件。 我可以阅读有关最近 GPU 技术成就的哪些信息? 潜伏在编程板上是唯一的方法吗? 最佳
我一直在做一些关于测量数据传输延迟的实验 CPU->GPU 和 GPU->CPU。我发现对于特定消息大小,CPU->GPU 数据传输速率几乎是 GPU->CPU 传输速率的两倍。谁能解释我为什么会这样
当我使用选项 --gres=gpu:1 向具有两个 GPU 的节点提交 SLURM 作业时,如何获取为该作业分配的 GPU ID?是否有用于此目的的环境变量?我使用的 GPU 都是 nvidia GP
我用 gpu、cuda 7.0 和 cudnn 6.5 安装了 tensorflow。当我导入 tensorflow 时,它运行良好。 我正在尝试在 Tensorflow 上运行一个简单的矩阵乘法,但
我们正在寻找有关 slurm salloc gpu 分配的一些建议。目前,给定: % salloc -n 4 -c 2 -gres=gpu:1 % srun env | grep CUDA CUD
我是否必须自定义为非 GPU Tensorflow 库编写的代码以适应tensorflow-gpu 库? 我有一个 GPU,想运行仅为非 GPU tensorflow 库编写的 Python 代码。我
我是否必须自定义为非 GPU Tensorflow 库编写的代码以适应tensorflow-gpu 库? 我有一个 GPU,想运行仅为非 GPU tensorflow 库编写的 Python 代码。我
我正在使用 pytorch 框架训练网络。我的电脑里有 K40 GPU。上周,我在同一台计算机上添加了 1080。 在我的第一个实验中,我在两个 GPU 上观察到相同的结果。然后,我在两个 GPU 上
有没有办法在 Slurm 上超额订阅 GPU,即运行共享一个 GPU 的多个作业/作业步骤?我们只找到了超额订阅 CPU 和内存的方法,但没有找到 GPU。 我们希望在同一 GPU 上并行运行多个作业
我可以访问 4 个 GPU(不是 root 用户)。其中一个 GPU(2 号)表现怪异,它们的一些内存被阻塞但功耗和温度非常低(好像没有任何东西在上面运行)。请参阅下图中 nvidia-smi 的详细
我正在尝试通过 Tensorflow 运行示例 seq2seq,但它不会使用 GPU。以下是我在带有 Tesla K20x 的 Linux 系统上安装 Tensorflow 所采取的步骤 git cl
一位电气工程师最近提醒我不要使用 GPU 进行科学计算(例如,在精度非常重要的地方),因为没有像 CPU 那样的硬件保护措施。这是真的吗?如果是的话,典型硬件中的问题有多普遍/严重? 最佳答案 实际上
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
最近我研究了强化学习,有一个问题困扰着我,我找不到答案:如何使用 GPU 有效地完成训练?据我所知,需要与环境持续交互,这对我来说似乎是一个巨大的瓶颈,因为这项任务通常是非数学的/不可并行化的。然而,
我是一名优秀的程序员,十分优秀!