大家好,欢迎来到IT知识分享网。
链接:https://www.zhihu.com/question/20978963/answer/86818933
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
谁告诉你 CPU的浮点运算能力比GPU差了
CPU单个核心浮点运算能力比GPU强多了
在不考虑 指令集 缓存 优化的情况下 你光看主频就知道了
GPU核心最高也就1Ghz左右
CPU核心却要3-4Ghz
区别是CPU最多也就十几个核心
GPU动辄几百上千个核心
更别说CPU核心指令集更全面 GPU核心基本只有SIMD指令(因为GPU主要是用于图形处理 向量运算远比标量运算多 并且对CPU来说多一套指令运算单元 就是几个核心的成本 对GPU来说就是多几百上千个核心的成本)
CPU处理一次标量乘法只要一次标量乘法指令
GPU却把标量先转换成向量 然后用一条SIMD指令
CPU每个核心有独立的缓存 GPU基本是所有核心共享一个缓存(GPU主要做图形渲染 所有核心都执行同一份指令 获取同样的数据 CPU主要是执行多个串行任务 每个核心可以处理不同的任务 从不同地方获取不同的数据)
所以CPU单核性能秒GPU单核十条街
CPU每个核心都有独立的优化 分支预测 乱序执行之类的
GPU乱序执行可以有 因为所有核心都干一样的事情 可以共享一份指令 不需要独立的乱序执行 (不过一般不会有 因为这个功能可以直接放到编译器中实现 因为GPU的开发语言少 基本只有GLSL和HLSL 编译器是厂商自己开发的 不像CPU那样 开发语言多如牛毛 各种编译器五花八门 指令集大相径庭 所以才迫切需求这种动态的乱序执行优化)
分支预测肯定不会有 成本上来说分支预测不能共享 每个核心都多一个分支预测的逻辑单元成本太大
关键是根本就不需要 GPU程序一般都很短 本来就可以全部装载到高速缓存中 其次是对于GPU处理的任务而言 分支预测也无意义
GPU的强项是并行运算能力比CPU强(多个不同任务的并行运算GPU也无法胜任 GPU只适合处理单个可并行任务的并行运算) 而不是浮点运算能力强(这个谣言也不知道谁传出来的 非要强调浮点运算 非要说浮点运算的话 不如说大多数老式GPU甚至没有整数运算能力 因为根本没有整数指令 最早设计目的是加速图形渲染 基本都是浮点运算 所以GPU核心的SIMD指令 只有浮点指令 没有整数指令 新型GPU因为不光光用于图形渲染 还想推广到通用计算 就是所谓的GPGPU 所以开始加入整数运算的支持)
GPU完全是为了并行运算设计的
只有可并行 无数据依赖的运算在GPU上才会快
举个简单的例子
CPU的核心就像一个心算高手 并且掌握各种奇技淫巧 一分钟能算100次四则运算
GPU的核心就是一个普通人 一分钟能算10次四则运算
但是 你让10个心算高手合作算10000个四则运算 和 1000个普通人合作算10000个四则运算
你说谁完成的快?
当然是1000个普通人快
(10个心算高手每人算1000个要花10秒 1000个普通人每人算10个只要1秒)
但是如果这10000个四则运算有依赖 就是下一题的条件依赖于上一题的结果
你说谁算的快?
当然是心算高手快 因为一旦有这种强依赖 就只能串行 10个人干和1000个人干并不会比1个人干来得快
(1个心算高手只要花100秒 1个普通人要花1000秒)
还要打个比方的话
一个四核CPU就像4台高级数控机床
一个GPU就像一个全自动流水线
一个全自动流水线 如果你只让他生产一个东西 绝对不会比一台高级数控机床快
它要成批生产 才会快
全自动流水线它只能同时成批生产一种东西
高级数控机床 什么都能生产 并且4台可以同时生产不同的东西
并且流水线上能做的东西 高级数控机床肯定能做
但是反过来 流水线上就不一定能做了
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/34592.html