为什么 GPU 在数值计算方面的性能比 CPU 高? 更糟糕的分支? 有人可以给我一个详细的解释吗?

#1楼 票数:3

不知道你在找什么。 假设它是为了一般理解为什么这样做而不是另一种方式。 这篇文章对您的问题提供了合理的理解(用外行的话):

https://en.bitcoin.it/wiki/Why_a_GPU_mines_faster_than_a_CPU

简而言之:

CPU 内核每个时钟可以执行 4 条 32 位指令(使用 128 位 SSE 指令)或 8 条通过 AVX(256 位),而像 Radeon HD 5970 这样的 GPU 每个时钟可以执行 3200 条 32 位指令(使用它的 3200 个 ALU 或着色器)。 这是每时钟 800(或 AVX 情况下为 400)倍多指令的差异。 截至 2011 年,最快的 CPU 具有多达 6、8 或 12 个内核和更高的频率时钟(2000-3000 MHz 与 Radeon HD 5970 的 725 MHz),但一个 HD5970 仍然比 HD5970 快五倍多四个 2.3GHz 的 12 核 CPU(这也会让您花费大约 4700 美元,而不是 HD5970 的 350 美元)。

GPU 专为特定任务而设计,即渲染需要大量计算的 3D 图形。 因此,某些应用程序将“数字处理”卸载到 GPU,就像大多数现代浏览器一样。 而对于分支功能,任务由 CPU 负责(现在,谁知道他们以后会做什么),因为 CPU 具有更好的“霸主”功能。

#2楼 票数:1 已采纳

GPU 中的每个 SM 都是一个 SIMD 处理器,在 SIMD 的每个通道上执行扭曲的不同线程。 一旦应用程序更受计算限制(一些内存访问)并且没有分支应用程序达到 GPU 的峰值 FLOPS。 这是因为在分支时,GPU 会屏蔽发散的一侧并首先执行另一侧。 两条路径都是串行执行的,因此一些 SIMD 通道处于非活动状态,从而降低了性能。

我在Fung 的论文中包含了一个有用的图,该图可在上述参考文献中公开获取,以显示性能实际上是如何下降的:在此处输入图片说明

图 (a) 显示了一个典型的 GPU 分支发散发生在扭曲内部(本示例中为 4 个线程)。 假设您有以下内核代码:

A:  // some computation
    if(X){
B:      // some computation
        if(Y){
C:          // some computation
        }
        else{
D:          // some computation
        }
E:      // some computation
    }else{
F:      // some computation
    }
G:  // some computation

A 处的线程分为 B 和 F。如 (b) 所示,随着时间的推移,一些 SIMD 通道被禁用,从而降低了性能。 图 (c) 到 (e) 显示了硬件如何串行执行发散路径并管理发散。 有关更多信息,请参阅这篇有用的论文,这是一个很好的起点。

计算受限的应用程序,如矩阵乘法或 N 体模拟,可以很好地映射到 GPU 并返回非常高的性能。 这是因为它们很好地占据了 SIMD 通道,遵循流模型,并且有一些内存访问。

  ask by Stencil translate from so

未解决问题?本站智能推荐:

1回复

调用GPU内核后CPU性能下降

我正在GPU上进行Harris角点检测。 我观察到我的CPU性能异常。 如果通过注释我的内核函数(此函数调用GPU的各个内核)来运行此调用,则以下是我的Main.cpp文件: "Harris_Algo(a,d_a,d_g,dx_My,dy_My,dxdy_My,suppressed,co
1回复

连续仿真-性能调整-GPU / CPU

我为采矿业构建了一个连续的仿真模型(基于状态)。 跟踪设备用于工程和生产目的,其中在发生故障(例如故障,生产事件等)时更新设备状态。使用许多统计分布。 为了便于说明,请参见下面的代码以了解模拟的工作原理。 我正在尝试优化性能。 基本上需要运行数千个“案例”。 我可以根据可用的物理线
1回复

分立GPU可减少内存争用并提高CPU性能

长期以来,我一直怀疑集成GPU的共享RAM会引起内存争用,并显着降低CPU的性能。 特别是在编译器和IDE性能方面。 在添加或卸下独立显卡时,您是否做过任何实验或注意到差异? 您是否知道有关该主题的任何研究? (我找不到任何东西)
4回复

GPU从CPU或CPU写入GPU读取?

我是并行编程的初学者。 我有一个可能看起来很愚蠢的查询但是当我用Google搜索时我没有得到明确的答案。 在GPU计算中,存在一种设备,即GPU和主机,即CPU。 我写了一个简单的hello world程序,它将在gpu上分配一些内存,将两个参数(比如src []和dest [])传递
2回复

为什么GPU上的乘法比CPU慢?

这是我的代码(模拟前馈神经网络): 我不知道如果我做了错误的方式还是什么,我怎么可以改变我的代码表明,GPU的速度更快然后在矩阵乘法CPU?
2回复

theano在CPU和GPU上有不同的结果

我写了一个Theano机器学习程序。 但是在CPU和GPU上我得到了两个绝对不同的结果。 下面是日志。(仅是日志的一小部分) GPU上的结果 在CPU上的结果 损失函数将迅速减小,然后在CPU上收敛到0.2。 但是,损失函数将增加,并最终在GPU上变为NaN。
1回复

CPU与GPU上的MPI-2

我正在使用MPI-2并行化代码。 当我使用8核处理器时,它成功地加快了速度。 我只是想知道如果将GPU用于相同目的而不是CPU会产生什么影响? 根据我到目前为止的研究,OpenMPI与GPU兼容,并且如果处理器间的通讯量比CPU多得多,那么加速就更好。 有没有人尝试过,或者对此有任何
3回复

CPU 和 GPU 内存共享

如果(离散)GPU 有自己的视频 RAM,我必须将我的数据从 RAM 复制到 VRAM 才能使用它们。 但是如果 GPU 与 CPU 集成(例如 AMD Ryzen)并共享内存,我是否仍然需要制作副本,或者它们是否可以交替访问同一个内存块?