tensorflow - TensorFlow 是否使用 GPU 上的所有硬件?

标签 tensorflow gpu gpgpu

NVidia GP100拥有 30 个 TPC 电路和 240 个“纹理单元”。 TensorFlow 是否使用了 TPC 和纹理单元,或者这些一次性硅片是否用于机器学习?

我正在运行的神经网络训练 session 中查看 GPU-Z 和 Windows 10 的内置 GPU 性能监视器,我发现各种硬件功能没有得到充分利用。 TensorFlow 使用 CUDA。我认为 CUDA 可以访问所有硬件组件。如果我知道差距在哪里(Tensorflow 和底层 CUDA 之间)以及它是否是物质的(浪费了多少硅),例如,我可以通过制作 TensorFlow 的克隆、修改它,然后提交拉取请求来进行补救。

例如,下面的答案讨论了可从 CUDA 访问的纹理对象。 NVidia 指出这些可用于 speed up latency-sensitive, short-running kernels .如果我用谷歌搜索“TextureObject tensorflow”,我不会得到任何点击。所以我可以假设,除非有相反的证据,TensorFlow 没有利用 TextureObjects。

NVidia 销售用于神经网络训练的 GPGPU。到目前为止,他们似乎已经对他们的电路采取了双重用途的策略,所以他们离开了不用于机器学习的电路。这就引出了一个纯 TensorFlow 电路是否会更高效的问题。 Google is now promoting TPUs for this reason.对于 TensorFlow,TPU 是否真的比 NVidia GPU 便宜,目前尚无定论。 NVidia is challenging Google price/performance claims.

最佳答案

这些东西都不是可以在 CUDA 中单独处理的独立硬件。阅读文件第 10 页上的这段话:

Each GPC inside GP100 has ten SMs. Each SM has 64 CUDA Cores and four texture units. With 60 SMs, GP100 has a total of 3840 single precision CUDA Cores and 240 texture units. Each memory controller is attached to 512 KB of L2 cache, and each HBM2 DRAM stack is controlled by a pair of memory controllers. The full GPU includes a total of 4096 KB of L2 cache.



如果我们在上面读到:

GP100 was built to be the highest performing parallel computing processor in the world to address the needs of the GPU accelerated computing markets serviced by our Tesla P100 accelerator platform. Like previous Tesla-class GPUs, GP100 is composed of an array of Graphics Processing Clusters (GPCs), Texture Processing Clusters (TPCs), Streaming Multiprocessors (SMs), and memory controllers. A full GP100 consists of six GPCs, 60 Pascal SMs, 30 TPCs (each including two SMs), and eight 512-bit memory controllers (4096 bits total).



看看我们看到的图表:

enter image description here

因此,不仅 GPC 和 SMS 不是独立的硬件,甚至 TPC 也只是重组硬件架构和想出一个花哨的营销名称的另一种方式。您可以清楚地看到 TPC 并没有在图中添加任何新内容,它只是看起来像 SM 的容器。它的 [1 GPC]:[5 TPC]:[10 SM]

内存 Controller 是所有硬件为了与 RAM 连接而必须具备的东西,碰巧更多的内存 Controller 可以实现更高的带宽,请参见下图:

enter image description here

其中“高带宽内存”是指HBM2一种像 GDDR5 这样的显存,也就是显存。这不是您在 CUDA 软件中直接解决的问题,而不是在 X86 桌面机器上解决的问题。

所以实际上,我们这里只有 SM,没有 TPC 和 GPC。所以回答你的问题,因为 Tensor flow利用 cuda ,大概它会使用它可以使用的所有可用硬件。

编辑:张贴者将他们的问题编辑为一个完全不同的问题,并且在那里有新的误解,所以这里是答案:

纹理处理集群 (TPC) 和纹理单元不是一回事。 TPC 似乎只是一个流式多处理器 (SM) 的组织,并带有一点营销魔力。

纹理单元不是一个具体的术语,不同 GPU 的特性也不同,但基本上你可以将它们视为纹理内存或对纹理内存的随时访问的组合,它采用空间相干性,而不是 L1、L2、L3...缓存采用时间连贯性,结合一些固定的功能功能。固定功能可能包括插值访问过滤器(通常至少是线性插值)、不同的坐标模式、mipmapping 控制和各向异性纹理过滤。见Cuda 9.0 Guide关于这个主题,以了解纹理单元功能以及您可以使用 CUDA 控制的内容。在图表中,我们可以看到底部的纹理单元。

enter image description here

显然,这些与我发布的第一张图片中显示的 TPC 完全不同,至少根据图表,它们没有与之关联的额外功能,并且只是两个 SM 的容器。

现在,尽管您可以在 cuda 中处理纹理功能,但您通常不需要这样做。纹理单元固定函数功能对神经网络来说并不是那么有用,但是,即使您没有明确地尝试访问它,CUDA 通常也会自动使用空间相干纹理内存作为优化。这样一来,TensorFlow 仍然不会“浪费”芯片。

关于tensorflow - TensorFlow 是否使用 GPU 上的所有硬件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50777871/

相关文章:

CUDA 或可用于英特尔图形卡的相同功能?

python - 使用 TensorFlow 使用三个或更多输入数字来预测数字

python - 尝试导入 Tensorflow 时出现 ModuleNotFoundError

python - Tensorflow:非常大的估计器日志与 Dataset.from_tensor_slices()

OpenCL - 如何在每个核心上生成单独的数学过程

mpi - GPU可以在CPU的多个核心之间共享吗?

python - 尝试训练 Keras 模型时出现“资源耗尽”内存错误

tensorflow - 在 tensorflow v.1.15 sess=tf.Session() - 无法加载动态库 'cudnn64_7.dll' ; dlerror : cudnn64_7. 找不到 dll

c++ - CUDA 线程在全局内存中的私有(private)位置写入错误结果

cuda - CUDA中的累积求和