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

2024-03-28

The 英伟达 GP100 https://images.nvidia.com/content/pdf/tesla/whitepaper/pascal-architecture-whitepaper.pdf有30个TPC电路和240个“纹理单元”。 TPC 和纹理单元是否被 TensorFlow 使用,或者这些是用于机器学习的一次性芯片?

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

例如,下面的答案讨论了可以从 CUDA 访问的纹理对象。 NVidia 指出这些可用于加速对延迟敏感、短时间运行的内核 https://devblogs.nvidia.com/cuda-pro-tip-kepler-texture-objects-improve-performance-and-flexibility/。如果我用谷歌搜索“TextureObject tensorflow”,我不会得到任何结果。因此,除非有相反的证据,我可以假设 TensorFlow 没有利用纹理对象。

NVidia 销售用于神经网络训练的 GPGPU。到目前为止,他们似乎已经对其电路采用了双重用途策略,因此他们保留了不用于机器学习的电路。这就引出了一个问题:纯 TensorFlow 电路是否会更高效。出于这个原因,谷歌现在正在推广 TPU。 https://www.blog.google/topics/google-cloud/google-cloud-offer-tpus-machine-learning/对于 TensorFlow 而言,TPU 是否真的比 NVidia GPU 便宜尚无定论。NVidia 正在挑战 Google 的性价比主张。 https://www.extremetech.com/computing/247403-nvidia-claims-pascal-gpus-challenge-googles-tensorflow-tpu-updated-benchmarks


这些东西都不是可以在 CUDA 中单独寻址的单独硬件。请阅读文档第 10 页上的这段文字:

GP100内的每个GPC有10个SM。每个 SM 有 64 个 CUDA 核心和 4 个纹理单元。拥有 60 个 SM, GP100共有3840个单精度CUDA核心和240个纹理单元。每个内存控制器是 附有 512 KB 的 L2 缓存,每个 HBM2 DRAM 堆栈由一对内存控制 控制器。完整的 GPU 包含总共 4096 KB 的二级缓存。

如果我们在上面读到:

GP100 旨在成为世界上性能最高的并行计算处理器,以解决 我们的 Tesla P100 加速器平台满足 GPU 加速计算市场的需求。喜欢 与之前的 Tesla 级 GPU 相比,GP100 由一系列图形处理集群 (GPC)、纹理 处理集群 (TPC)、流式多处理器 (SM) 和内存控制器。完整的 GP100 由 6 个 GPC、60 个 Pascal SM 组成,30 个 TPC(每个包含 2 个 SM),和八个512位内存 控制器(总共 4096 位)。

看一下图表,我们看到以下内容:

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

内存控制器是一些东西所有硬件为了与 RAM 连接,更多的内存控制器可以实现更高的带宽,请参见此图:

其中“高带宽内存”指的是HBM2 https://en.wikipedia.org/wiki/High_Bandwidth_Memory一种视频内存,例如 GDDR5,即视频 RAM。您不会像在 X86 台式机上那样直接在 CUDA 软件中解决这个问题。

所以实际上,我们这里只有 SM,没有 TPC 和 GPC。所以回答你的问题,因为张量流 https://github.com/tensorflow/tensorflow利用cuda https://github.com/tensorflow/tensorflow/tree/851c28951b7345f303f4ec1d6490e3fadaa0a40e/third_party/toolchains/gpus/cuda,大概它会使用所有可用的硬件。

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

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

纹理单元不是一个具体的术语,不同 GPU 的功能也有所不同,但基本上您可以将它们视为纹理内存或随时访问纹理内存的组合,它采用空间一致性,而不是 L1、L2、L3...缓存采用时间一致性,结合一些固定功能。固定功能可能包括插值访问过滤器(通常至少是线性插值)、不同的坐标模式、mipmapping 控制和各向异性纹理过滤。请参阅Cuda 9.0 指南 https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#texture-and-surface-memory关于此主题,了解纹理单元功能以及可以使用 CUDA 控制的内容。在图表中我们可以看到底部的纹理单元。

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

现在,尽管事实上你can在 cuda 中解决纹理功能,您通常不需要这样做。纹理单元固定功能功能对于神经网络来说并不是那么有用,但是,空间相干纹理内存通常是自动地即使您没有明确尝试访问它,CUDA 也会将其用作优化。这样一来,TensorFlow仍然不会“浪费”硅。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TensorFlow 是否使用 GPU 上的所有硬件? 的相关文章

随机推荐

  • Laravel:每当我返回模型时,总是返回与它的关系

    我有 2 张桌子 User Doctor id id email user id name signature last name photo password description date birth Every Doctor与一个有
  • 如何使用构造函数注入创建对象?

    我如何使用提供 Cat 的组件创建 Dog 的实例 public final class Dog private final Cat mCat public final static String TAG Dog Inject public
  • DataGridView.SelectedCells 中的单元格顺序?

    我想知道 DataGridView SelectedCells 中单元格的顺序是什么 我假设 SelectedCells 0 应返回第一个单元格 最左上角 而 SelectedCells Count 1 应返回最后一个单元格 最右下角 但奇
  • Python 3.6+:嵌套多处理管理器导致 FileNotFoundError

    所以我尝试在字典的字典上使用多处理管理器 这是我最初的尝试 from multiprocessing import Process Manager def task stat test z 1 test y Y0 5 if name mai
  • Mysql 覆盖 vs 复合 vs 列索引

    在下面的查询中 SELECT col1 col2 FROM table1 WHERE col3 value1 AND col4 value2 如果我有 2 个单独的索引 其中一个位于col3另一个在col4 此查询中将使用其中哪一个 我在某
  • 哪些编译器支持 std::filesystem?

    感谢 C 11 在与 boost 长期相处之后 最后一个让我依赖它的组件是文件系统 根据链接 std filesystem 似乎是作为实验实现的 文件系统库 http en cppreference com w cpp experiment
  • 使用 freemarker 重新定位光标

    我正在使用免费标记和java 我必须将结果输出到txt 文件中 假设我必须打印 3 列 A B C 在类似的模式中 所有三个属性均为字符串 条件是 如果引用 A 的字符串长度超过 3 则应在下一行打印 也就是说 如果长度为 8 则前 3 个
  • php.ini - 设置 upload_tmp_dir

    我有一个允许用户上传照片的页面 我认为相当标准的 php 这适用于我迄今为止一直使用的实时服务器 但我最近在我的 Mac 上设置了 php 现在上传已停止工作 我猜这是因为 php ini 文件中的 upload tmp dir 没有正确设
  • 计算每行内字段的累积和

    免责声明 我是新手 我一直在广泛寻找问题的答案 但没有成功 如果我没有找到关于此的帖子 请向我推荐 我一直在尝试使用 awk 计算相当大的数据文件的每一行中每个字段的累积和 任何帮助将非常感激 我的文件包含数十万行 其中行的长度 字段数量
  • 在特定时间运行命令

    我正在尝试在特定时间运行命令 我看过 at 命令 但我不知道如何让它工作 这就是我所做的 at 1843 Enter php run this script php Ctrl D 但如何在 bash 脚本中执行此操作呢 我的意思是 我需要按
  • 从 apache 到 IIS 的反向代理总是失败并显示 404

    我正在尝试设置从 apache 到 IIS 7 服务器的反向代理 我已经设置了非常基本的代理规则
  • 如何在 iPhone Web 应用程序中将方向锁定为纵向模式?

    我正在构建 iPhone Web 应用程序 并希望将方向锁定为纵向模式 这可能吗 有没有任何网络工具包扩展可以做到这一点 请注意 这是一个用 HTML 和 JavaScript 编写的适用于 Mobile Safari 的应用程序 而不是用
  • 如何将变量设为特征的私有变量?

    我想在一个类中多次重用某个功能 此功能依赖于私有变量 trait Address private address public function getAddress return this gt address public functi
  • ASP/ASP.NET 短标签的名称

    有没有一个特定的名字 Scott Gu 将这些称为 代码块 这就是我的看法 http weblogs asp net scottgu archive 2010 04 06 new lt gt syntax for html encoding
  • CSS float 将带有换行文本的 div 折叠到所需的最小值

    示例图片 And the 代码位于 JSBIN http jsbin com ucamOW 1 情况是 我正在尝试创建一个带有标签的复选框列表 每个复选框旁边都有一个 信息图标 这个想法是 如果您单击标签 它将触发复选框 正如它应该的那样
  • 出现故事板之前的选项卡栏项目标题

    我的应用程序从一个有 5 个选项卡的选项卡栏控制器开始 一开始 第一个出现了它的名字 但其他四个没有名字 直到我点击它们 然后根据用户使用的语言显示名称 如何在选项卡栏出现之前设置选项卡的名称 我正在使用故事板 当所有其余的事情都通过情节提
  • 从没有实例的类中获取字段的名称

    因此 我使用以下实用程序从类的实例中获取字段 属性的名称 public static string FieldName
  • 如何避免在 getView() 中设置内联 onClickListener

    我有带有自定义适配器的 ListView 每行都包含可点击的按钮和文本 目前 onClickListeners 已在主体中设置getView 这是一个非常疯狂的想法 因为这个方法被频繁调用 在每个 onClick 函数中 我需要访问私有数据
  • 意外的未定义引用

    我收到未定义的引用错误 不知道原因 所以我有 2 个创建静态库的文件 keyboard input c keyboard input h 这是 h 文件的内容 ifndef MOD KBINPUT define MOD KBINPUT in
  • TensorFlow 是否使用 GPU 上的所有硬件?

    The 英伟达 GP100 https images nvidia com content pdf tesla whitepaper pascal architecture whitepaper pdf有30个TPC电路和240个 纹理单元