CPU和GPU的区别

2024-01-03

CPU的单个处理单元和GPU的单个处理单元有什么区别?
我在互联网上看到的大多数地方都涵盖了两者之间的高级差异。我想知道每条指令可以执行哪些指令,它们的速度有多快,以及这些处理单元如何集成到完整的架构中?
这似乎是一个答案很长的问题。所以很多链接都很好。

edit:
在CPU中,FPU运行实数运算。每个 GPU 核心执行相同操作的速度有多快?如果快的话为什么这么快?
我知道我的问题很笼统,但我的目标是回答这些问题。


简短回答

GPU 和 CPU 之间的主要区别在于 GPU 被设计为在许多独立数据元素上并行执行相同的操作,而 CPU 被设计为尽快执行单个指令流。

详细解答

部分问题提出

在CPU中,FPU运行实数运算。多快都一样 每个 GPU 核心正在执行哪些操作?如果快的话为什么这么快?

这是指 CPU 和 GPU 中使用的浮点 (FP) 执行单元。这主要区别 is not单个 FP 执行单元是如何实现的。相反,区别在于 CPU 核心只有几个 FP 执行单元独立指令,而一个 GPU 将有数百个在其上运行独立数据在平行下。

GPU 最初是为执行图形应用程序的计算而开发的,在这些应用程序中,对数百万个不同的数据点重复执行相同的操作(想象一下应用查看屏幕上每个像素的操作)。通过使用SIMD https://en.wikipedia.org/wiki/SIMD or SIMT https://en.wikipedia.org/wiki/Single_instruction,_multiple_threadsGPU 减少了处理单个指令的开销,但代价是需要多个指令以锁步操作。

Later GPGPU编程 http://gpgpu.org/该模型之所以流行,是因为除了图形之外,还有许多类型的编程问题都适合该模型。主要特点是问题是数据并行的,即相同的操作可以在许多单独的数据元素上独立执行。

与 GPU 相比,CPU 经过优化,可以尽快执行单个指令流。 CPU使用流水线、缓存、分支预测、乱序执行等来实现这一目标。执行单个浮点指令所花费的大部分晶体管和能量都花在管理流经流水线的指令的开销上,而不是花在浮点执行单元上。虽然 GPU 和 CPU 的 FP 单元可能会有所不同,但这并不是两种架构之间的主要区别。主要区别在于指令流的处理方式。 CPU 还往往在不同的内核之间拥有高速缓存一致性内存,而 GPU 则不然。

当然,特定 CPU 和 GPU 的实现方式有很多变化。但高级编程的区别在于 GPU 针对数据并行工作负载进行了优化,而 CPU 内核针对尽快执行单个指令流进行了优化。

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

CPU和GPU的区别 的相关文章

  • 为什么64位cpu不存在高端内存?

    当我试图了解 32 位 cpu 和 Linux 的高内存问题时 为什么没有高内存问题 https en wikipedia org wiki High memory对于64位CPU 特别是 虚拟内存分为内核空间和用户空间的划分是如何改变的
  • Xcode 9 - CPU 使用率高 - 风扇最大速度

    自从我升级到 Xcode 9 后 当我在 Xcode 上工作时 我的粉丝就变得疯狂了 当我使用 Storyboards 和 Interface Builder 时 尤其会发生这种情况 Xcode有时会占用100 的CPU 并且名为 Inte
  • MIPS 中的影子寄存器是什么以及它们如何使用?

    当我了解 MIPS 架构时 我遇到了影子寄存器 据说它们是通用寄存器的副本 我无法理解以下内容 何时使用影子寄存器 MIPS 影子寄存器用于减少处理中断时的寄存器加载 存储开销 分配了影子寄存器组的中断不需要保存任何现有上下文来提供空闲寄存
  • 使用“boot”包进行引导的 GPU 计算

    我想使用引导程序进行大型分析 我发现使用并行计算提高了引导速度 如以下代码所示 并行计算 detect number of cpu library parallel detectCores library boot boot functio
  • Aarch64 什么是延迟转发?

    中提到了 延迟转发 Arm Neoverse E1核心软件优化指南 https developer arm com documentation swog466751 a 以及其他一些 CPU 型号的优化指南 Instruction Grou
  • C 易失性变量和高速缓存

    缓存是由缓存硬件对处理器透明地控制的 因此如果我们在C程序中使用易失性变量 如何保证我的程序每次都从指定的实际内存地址读取数据而不是缓存 我的理解是 Volatile 关键字告诉编译器不应优化变量引用 而应按照代码中的编程方式读取变量引用
  • 某些子网格未使用 CUDA 动态并行执行

    我正在尝试 CUDA 5 0 GTK 110 中的新动态并行功能 我遇到了一个奇怪的行为 即我的程序没有返回某些配置的预期结果 不仅是意外的 而且每次启动都会出现不同的结果 现在我想我找到了问题的根源 似乎当生成太多子网格时 某些子网格 由
  • Tensorflow 2:如何在 GPU 和 CPU 之间切换执行?

    In tensorflow1 X 独立keras2 X 中 我曾经使用以下代码片段在 GPU 上的训练和 CPU 上运行推理之间切换 由于某种原因 我的 RNN 模型速度要快得多 keras backend clear session de
  • 手臂“版本”之间的差异? (仅限 ARMv7)

    基本上我想知道ARMv7l和ARMv7之间的区别hl 我有一个带有armv7l的arm处理器 并且有很多armv7的rpmhl 我完全不知道我必须搜索什么才能获得相关信息 这个 后缀 叫什么 还有其他类型吗 他们的做法有何不同 我假设它指示
  • 同时使用 2 个 GPU 调用 cudaMalloc 时性能较差

    我有一个应用程序 可以在用户系统上的 GPU 之间分配处理负载 基本上 每个 GPU 都有一个 CPU 线程来启动一个GPU处理间隔当由主应用程序线程定期触发时 考虑以下图像 使用 NVIDIA 的 CUDA 分析器工具生成 作为示例GPU
  • 现代缓存中的方式预测

    我们知道 就缓存命中时间而言 直接映射缓存优于集合关联缓存 因为不涉及特定标签的搜索 另一方面 组关联缓存通常比直接映射缓存具有更好的命中率 我读到 现代处理器试图通过使用一种称为路径预测的技术来结合两者的优点 他们预测给定集合中最有可能发
  • 设置最大 CUDA 资源

    我想知道是否可以设置 CUDA 应用程序的最大 GPU 资源 例如 如果我有一个 4GB GPU 但希望给定的应用程序只能访问 2GB 如果它尝试分配更多 就会失败 理想情况下 这可以在进程级别或 CUDA 上下文级别上设置 不 目前没有允
  • iOS 上的 OpenCV - GPU 使用情况?

    我正在尝试开发一个 iOS 应用程序 可以对来自相机的视频执行实时效果 就像 iPad 上的 Photobooth 一样 我熟悉 OpenCV 的 API 但如果大多数处理是在 CPU 上完成而不是在 GPU 上完成 我担心 iOS 上的性
  • CPU缓存:两个地址之间的距离是否需要小于8字节才能具有缓存优势?

    这似乎是一个奇怪的问题 假设缓存行的大小为 64 字节 此外 假设 L1 L2 L3 具有相同的缓存行大小 this https stackoverflow com a 15333156 8385554帖子说英特尔酷睿 i7 就是这种情况
  • 为什么x86分页没有特权环的概念?

    早在 1982 年 当 Intel 发布 80286 时 他们在分段方案中添加了 4 个特权级别 环 0 3 由全局描述符表 GDT 和局部描述符表 LDT 中的 2 位指定 在 80386 处理器中 Intel 添加了分页功能 但令人惊讶
  • 从 CUDA 设备写入输出文件

    我是 CUDA 编程的新手 正在将 C 代码重写为并行 CUDA 新代码 有没有一种方法可以直接从设备写入输出数据文件 而无需将数组从设备复制到主机 我假设如果cuPrintf存在 一定有地方可以写一个cuFprintf 抱歉 如果答案已经
  • 无法满足显式设备规范“/device:GPU:0”,因为没有匹配的设备

    我想在我的 Ubuntu 14 04 机器上使用 TensorFlow 0 12 作为 GPU 但是 当将设备分配给节点时 我收到以下错误 InvalidArgumentError see above for traceback Canno
  • 没有 FPU 的处理器中的浮点计算

    是否可以在没有浮点单元的嵌入式处理器中执行浮点运算 是的 您只需要在软件中完成即可 你的编译器可能会提供支持 http gcc gnu org onlinedocs gccint Soft float library routines ht
  • 为什么如果内存组织为字,则程序计数器加 1;如果内存组织为字节,则程序计数器加 2?

    如果在计算机中一条指令是 16 位 并且如果存储器被组织为 16 位字 则通过在当前指令的地址中加 1 来计算下一条指令的地址 如果内存是按字节组织的 可以单独寻址 那么我们需要在当前指令地址上加二 得到顺序执行的下一条指令的地址 为什么会
  • 如何读取 GPU 负载?

    我正在编写一个程序 用于监控计算机的各种资源 例如CPU使用率等 我还想监控 GPU 使用情况 GPU 负载 而不是温度 using System using System Collections Generic using System

随机推荐

  • Ipython Notebook:Mac 中的 jupyter_notebook_config.py 在哪里?

    我刚刚开始使用 Mac 所以如果这听起来太天真 请原谅我 我正在尝试安装Interactive Parallel From https github com ipython ipyparallel https github com ipyt
  • VueJS 中只有在调度和提交完成后才触发路由

    我确实有一个表单提交 它需要电子邮件和密码 然后将它们传递到商店中名为的操作中userSignIn 登录 vue onSubmit if this refs form validate const user email this email
  • oink 日志命令在 Heroku 上不起作用

    我最近开始使用oink gem https github com noahd1 oink在我的 Heroku 应用程序上 因为我注意到一些控制器操作出现了小内存泄漏 oink log 命令在本地工作正常 但我无法弄清楚让它在我的生产站点上工
  • 如何将图像添加到 DataGridView 中的单个特定单元格?

    使用 C 和 Visual Studio 我有一个DataGridView有 2 列 对于每一行 第一列将显示文本 对于除特定行之外的每一行 第二列将显示文本 在第二列的一个特定单元格中 我需要显示一张图像 例如 Row 0 Cell 0
  • GoogleSheets google.script.run 总是去 FailureHandler

    我正在使用 GoogleSheets HTMLService 我正在从我的 Html 页面的脚本中调用 google script run 但它总是会去 FailureHandler 这其中有什么问题吗 请参阅下面的代码 当我运行它时 它总
  • 调整 Java 7 中默认文件系统的行为

    Java 7 引入了一个用于编写自定义文件系统的出色 API 考虑一个用例 我不想实现新的文件系统 我只想调整现有文件系统的行为 例如 翻转从中写入 读取的每一位 在我看来 当前的jdk并没有为此提供适当的设施 AbstractFileSy
  • 想要了解 Haskell 中的递归吗?

    我现在已经使用了许多递归函数 但仍然无法理解这样的函数到底是如何工作的 我熟悉第二行 即 n 0 1 但我不太熟悉最后一行 即 n gt 0 fac n 1 n fac Int gt Int fac n n 0 1 n gt 0 fac n
  • 如何连接蓝牙 a2dp 设备?

    我正在尝试将运行 android 4 1 的 Android 设备与支持 a2dp 的音频接收器配对 我可以在蓝牙设置屏幕上毫无问题地做到这一点 但我很难在代码中做到这一点 基本上我能够发现该设备 但无法通过套接字连接到它 也许我使用了错误
  • 将 cookie 从第一个响应复制到下一个请求

    我使用 HttpRequest gt send 发送第一个 HTTP 请求 并收到带有以下 Set Cookie 标头的 302 响应 设置 Cookie SESSION SCOPE 1 路径 设置 Cookie III EXPT FILE
  • 同一 WAR 中的多个 JAX-RS 应用程序

    I have ApplicationPath resourcesP public class RestfulPrediction extends Application Override public Set
  • Postgresql regexp_matches 语法未按预期工作

    我使用 Postgres正则表达式 匹配提取数字的函数 我使用的正则表达式是 4 s 0 3 s 12 1 s d 4 如果我使用像这样的工具https regexr com https regexr com 验证它是否正常工作 我应用了以
  • NHibernate:映射列表字典

    我的班级有一个类型字段Dictionary
  • Jetty嵌入和JSP编译到1.7?

    我可以以某种方式指定jsp编译的vm的目标版本吗 我需要 1 7 而不是默认的 1 5 我有一个Web应用程序上下文 代码中的一些过滤器等 webapp 本身就是一场爆炸性的战争 因此没有使用 xml 配置 因为不需要 但似乎 为了做到这一
  • 初始包含块和视口之间的区别

    两者之间有什么区别还是相同 我认为它们指的是同一件事 但在不同的上下文中 但我不确定 所以我在这里问 初始包含块和视口虽然彼此相关 但却是两个不同的概念 视口通常是指浏览器窗口的可视区域 页面在屏幕上呈现在该区域中 初始包含块是页面内的逻辑
  • Python 2.6 聊天循环问题。无法同时接收和发送

    我正在尝试制作一个控制台聊天程序 但我的循环有问题 我无法同时获得输入和接收其他人的输入 如果一端发送了两条或更多消息 则另一端在发送一条消息之前无法接收下一条消息 我对 python 相当陌生 正在寻找正确方向的推动 我考虑过多线程 但这
  • 如何使用非 root 用户创建 postgres 容器?

    我想以非 root 用户身份运行 postgres 容器 默认情况下 该映像具有用户 postgres uid 999 当通过命令访问容器时docker exec it mycontainer bin bash 用户是root 为了使容器更
  • 如何在使用 node_save($node) 创建节点时将图像附加到节点;

    您好 我正在使用 drupal 7 并尝试通过使用 php 解析 xml 来导入数据 然后使用以下命令创建节点node save node 到目前为止 我已经成功地从 xml 创建节点 无需任何图像 我想在导入图像时将图像附加到节点 我知道
  • 将值从页面传递到用户控件

    我将姓名和姓氏存储在主页的两个标签中 我在一个类中也有这些值 类没有做太多事情 但我将它们用于将来的扩展 我有一个用户控件 它将发送一封以姓名和姓氏作为正文的电子邮件 我的问题是如何将标签或类变量值传输到用户控件的主体变量中 使用要传递给它
  • 混合 16 位线性 PCM 流并避免削波/溢出

    我尝试将 2 个 16 位线性 PCM 音频流混合在一起 但似乎无法克服噪音问题 我认为它们是在将样品混合在一起时溢出的 我有以下功能 short int mix sample short int sample1 short int sam
  • CPU和GPU的区别

    CPU的单个处理单元和GPU的单个处理单元有什么区别 我在互联网上看到的大多数地方都涵盖了两者之间的高级差异 我想知道每条指令可以执行哪些指令 它们的速度有多快 以及这些处理单元如何集成到完整的架构中 这似乎是一个答案很长的问题 所以很多链