将 CPU 与 GPU 进行比较——总是有意义吗?

Posted

技术标签:

【中文标题】将 CPU 与 GPU 进行比较——总是有意义吗?【英文标题】:Comparing CPUs to GPUs - does it always make sense? 【发布时间】:2012-03-02 14:43:02 【问题描述】:

我正在阅读this article 关于 GPU 速度与 CPU 速度的对比。既然 CPU 有很多 GPU 不需要的职责,我们为什么还要像这样比较它们呢?引用“我不记得有什么时候我看到一家公司推广慢一个数量级的竞争基准”这句话听起来像是英特尔和英伟达都在制造 GPU。

显然,从程序员的角度来看,您想知道将您的应用程序移植到 GPU 上是否值得您花时间和精力,在这种情况下,(公平的)比较是有用的。但是比较它们是否总是有意义?

我所追求的是一个技术解释,说明为什么英特尔推广其慢于 NVIDIA-GPU 的基准测试可能很奇怪,正如 Andy Keane 所想的那样。

【问题讨论】:

【参考方案1】:

由于 CPU 有很多职责,GPU 不需要 有,为什么我们一开始还要这样比较它们?

好吧,如果 CPU 提供比 GPU 更好的性能,人们会使用额外的 CPU 作为协处理器,而不是使用 GPU 作为协处理器。这些额外的 CPU 协处理器不一定具有与主主机 CPU 相同的包袱。

显然,从程序员的角度来看,您想知道是否移植您的 将应用程序应用到 GPU 是值得您花费时间和精力的,在这种情况下 (公平的)比较是有用的。但总是有意义吗 比较一下?

我认为比较它们是有道理且公平的;毕竟,它们都是两种处理器,知道在什么情况下使用一种处理器是有益的还是有害的,这可能是非常有用的信息。要记住的重要一点是,在某些情况下使用 CPU 是一种更好的方法,而在某些情况下使用 GPU 更有意义。 GPU 不会加速每个应用程序。

我所追求的是一个技术解释为什么它可能很奇怪 英特尔推广其慢于 NVIDIA-GPU 的基准测试,如 Andy 基恩似乎认为

如果英特尔的唯一观点是 CPU 与 GPU 相比并没有那么糟糕,那么听起来英特尔并没有选择一个特别好的应用示例。他们可能选择了 CPU 确实更快的例子;没有足够的数据并行性或算术强度或 SIMD 程序行为来提高 GPU 的效率。如果你选择一个分形生成程序来显示 CPU 只比 GPU 慢 14 倍,那你就傻了;您应该以一系列方式计算术语,或者运行具有大量分支分歧的并行作业,或者每个线程正在执行完全不同的代码。英特尔本可以做得超过 14 倍; NVIDIA 知道这一点,研究人员和从业者都知道这一点,而撰写 NVIDIA 嘲讽论文的布偶们也应该知道这一点。

【讨论】:

【参考方案2】:

答案取决于要执行的代码类型。 GPU 非常适合高度可并行化的任务或需要高内存带宽的任务,并且加速可能确实非常高。但是,它们不太适合具有大量顺序操作或复杂控制流的应用程序。

这意味着除非您非常确切地知道它们正在对什么应用程序进行基准测试,以及该用例与您想要加速的实际代码有多相似,否则这些数字几乎不会说明什么。根据您让它运行的代码,您的 GPU 可能比 CPU 快 100 倍或慢 100 倍。典型的使用场景需要混合不同类型的操作,因此通用 CPU 还没有死,而且在相当长的一段时间内也不会死。

如果您有特定的任务要解决,那么比较 CPU 与 GPU 在该特定任务中的性能可能很有意义。但是,您从比较中获得的结果通常不会直接转化为不同基准的结果。

【讨论】:

以上是关于将 CPU 与 GPU 进行比较——总是有意义吗?的主要内容,如果未能解决你的问题,请参考以下文章

将 NSString 对象设置为零有意义吗?

在 docker 中运行 c# worker 服务有意义吗?

对动态内存进行操作,重写一个const成员函数有意义吗?

每月拿几百元来买基金,有意义吗?

将导出的 grafana csv 文件导入 python pandas 有意义吗?

如果(!这个)返回; 在 C# 中有意义吗?