移动GPU通用计算现状与展望
来源:互联网 发布:淘宝上hm折扣代购真假 编辑:程序博客网 时间:2024/05/24 05:02
GPU通用计算简介
传统上,GPU的应用被局限于处理图形渲染计算任务。随着GPU可编程性的不断提高,利用GPU完成通用计算渐渐活跃起来。将GPU用于图形渲染以外领域的计算称为GPGPU(General-Purpose computing on Graphics Processing,基于GPU的通用计算)。GPGPU计算通常采用CPU+GPU异构模式,由CPU负责执行复杂逻辑处理和事务管理等不适合数据并行的计算,由GPU负责计算密集型的大规模数据并行计算。这种利用GPU强大处理能力和高带宽弥补CPU性能不足的计算方式在发掘了计算机潜在的性能,在成本和性价比方面有显著优势。
GPU计算拥有性价比高,性耗比高,设备易得的优势,在图像视频处理、石油勘探、分子动力学、信号处理、人工智能、数据挖掘、基因测序、密码学等领域得到了广泛应用。在移动计算中,Google在Android 4.2开始使用GPU加速renderscript进行图像处理和图像/视频压缩。Nvidia和ARM则分别使用GPU加速照相处理架构,代替部分ISP功能。
自2010年以来,移动设备GPU的性能快速提高,发展速度远远超过了摩尔定律。
进入2014年,市场上在销售的中高端处理器性能已经达到100GFlosp左右,并且已经发布和即将发布一批搭载Kepler,Mali-T760 MP16等理论性能超过300GFlops GPU的处理器。预计到2015年末,高端移动处理器的性能将达到1TFlops左右。
以下是2014Q1手机/平板常见移动处理器的CPU、GPU及处理能力:
SoC Model
CPU Type
CPU GFlops
GPU Type
GPU GFlops
Qualcomm APQ8064AB
(SnapDragon 600)
4xKrait300
@1.9GHz
60.8
Adreno320
(96ALU)
97.2
Qualcomm APQ8974AB
(SnapDragon 800)
4xKrait400
@1.9GHz
73.6
Adreno330
(128 ALU)
158.4
Nvidia Tegra 4
4xcortex-A15
@1.9GHz
60.8
GeforceULP x 72
96
AppleA6X
2xApple Swift@1.4GHz
22.4
SGX554 MP4
76.8
AppleA7
2xApple 64bit@1.5GHz
48
G6430
(4 Clusters)
115.2
MTK MT6592
8xcortex-A7@1.7GHz
27.2
Mali-450 MP4
41.8
MTK MT8135
2xcortex-A15@1.7GHz + 2xcortex-A7@1.2GHz
32
G6200
40
表 1 2014Q1市场常见移动处理器CPU/GPU性能
以下是2014Q1新发布处理器CPU、GPU及处理能力:
SoC Model
CPU Type
CPU GFlops
GPU Type
GPU GFlops
MTK MT6595
4xA17@2.1+4xA7@1.7
80.8
Adreno330
(128 ALU)
158.4
Intel Z3580
4xMoorefield@2.33GHz
N/A
PowerVR G6430
136
Tegra K1 Quad A15
4xcortex-A15@2.3GHz
73.6
Kepler
364.8
表 2 2014Q1新发布处理器CPU/GPU性能
从表一、表二可以看到,即使以NEON向量处理器计算理论性能,同一SoC上的GPU性能也要超过CPU。而且GPU和CPU的性能差距在高端和较新的处理器上更加明显。事实上,GPU与CPU的处理能力差距比理论峰值还要更大:
目前的ARM架构移动处理器主要通过NEON SIMD指令或者VFP指令集进行浮点运算。在进行相同的操作时,VFP的吞吐量只有NEON的大约四分之一。标准Android操作系统的dalvik虚拟机不支持生成Neon指令,在运行Java时只能使用VFP指令。即使通过NDK或者JNI,如果要调用数学函数或者除法等较为复杂的处理,也需要使用VFP指令集。而GPU的执行单元可以直接执行数学函数,甚至有专门的硬件单元进行超越函数运算。而且,在进行图形/图象处理时,GPU除了运算单元外,纹理采样单元也可以进行一些运算。
GPU的缺点在于执行单元在运行条件指令时,某些情况下需要的时间是几个分支之和,而不是一个分支所需要的时间。另外,只有存在大量数据并行计算时,才能完全发挥GPU性能。因此GPU适合进行分支较少、线程间通信较少的大规模数据并行任务。
移动GPU现状与发展
目前移动GPU主要厂商有:Imagination Technologies、 Qualcomm、ARM、 NVIDIA、 Vivante、Intel。其市场占有率如下表所示:
1H’12
1H’13
Qualcomm
29.3%
32.3%
NVIDIA
4.9%
1.4%
ARM IP
13.5%
18.4%
DMP IP
0.0%
0.5%
Imagination Technologies IP
52.0%
37.6%
Vivante IP
0.3%
9.8%
Total
100.0%
100.0%
表 3 2013年上半年与2012年上半年移动GPU市场占有率
表1中:DMP IP仅见于任天堂3DS游戏机,不在本文讨论之列。2013上半年Intel尚未推出采用自有HD Graphics架构的处理器。
Imagination Technologies的PowerVR系列GPU的IP授权伙伴包括Intel、苹果、联发科、LG、高通、瑞萨、三星、海思、Marvell、索尼、华为等公司。目前使用Power VR系列的移动处理器主要是苹果全系列,三星和intel部分产品。
GPU Name
Chip
Clock
GFlops
SGX530
OMAP 3530
110 MHz
0.88
DM3730
200 MHz
1.6
---
300 MHz
2.4
SGX531
MT6513
MT6573
MT6575M
281 MHz
2.25
SGX531 Ultra
MT6515
MT6575
MT6517
MT6517T
MT6577
MT6577T
MT8317
MT8317T
522 MHz
4.2
SGX535
Apple A4
200 MHz
1.6
Apple A4 (iPad)
250 MHz
2.0
---
300MHz
2.4
SGX540
Exynos 3110
200 MHz
3.2
OMAP 4430
307 MHz
4.9
OMAP 4460
384 MHz
6.1
Atom Z2420
400 MHz
6.4
ATM7021a
RK3168
500 MHz
8.0
SGX543
---
200 MHz
7.2
SGX543 MP2
Apple A5
Apple A5 (iPad2)
200 MHz
250 MHz
14.4
18.0
SGX543 MP3
Apple A6
250 MHz
27.0
SGX543 MP4
Apple A5X
250 MHZ
36.0
SGX544
MT6589M
MT8121
156 MHz
4.9
MT6589
MT8389
286 MHz
9.2
MT8125
300 MHz
9.6
MT6589T
MT8389T
357 MHz
11.4
OMAP 4470
384 MHz
12.3
SGX544 MP2
Atom Z2520
300 MHZ
19.2
Allwinner A31
Allwinner A31s
350 MHZ
22.4
Atom Z2560
400 MHz
25.6
ATM7039
450 MHz
28.8
Atom Z2580
533 MHz
34.1
SGX544 MP3
Exynos 5410
533 MHz
51.1
SGX545
---
300 MHz
4.8
SGX545
Atom Z2460
Atom Z2760
533MHz
8.5
SGX554
---
300 MHz
19.2
SGX554 MP2
---
300 MHz
38.4
SGX554 MP4
Apple A6X
300 MHz
76.8
G6100
(1 Clusters)
---
300 MHz
19.2
G6200
(2 Clusters)
---
300 MHz
38.4
MT8135
??? MHz
???
---
500 MHz
64.0
G6230
(2 Clusters)
---
300 MHz
38.4
G6400
(4 Clusters)
---
300 MHz
76.8
G6430
(4 Clusters)
---
300 MHz
76.8
Apple A7
Apple A7 (iPad Air)
450 MHz
115.2
---
560 MHz
143.4
G6630
(6 Clusters)
---
300 MHz
115.4
---
450 MHz
173.0
---
650 MHz
250
Qualcomm的Adreno系列GPU仅被用于Qualcomm的SnapDragon系列处理器。
GPU Name
Chip
Clock
GFlops
Adreno130
MSM7x01
MSM7x01A
133 MHz
1.2
Adreno200
MSM7225
MSM7625
MSM7227
MSM7627
QSD8250
QSD8650
(Snapdragon S1)
133 MHz
2.1
MSM7225A
MSM7625A
(Snapdragon S1)
200 MHz
3.2
MSM7227A
MSM7627A
(Snapdragon S1)
245 MHz
3.92
Adreno203
MSM8225
MSM8625
(Snapdragon S4 Play)
MSM8225Q
MSM8625Q
(Snapdragon 200)
245 MHz
7.84
Adreno205
MSM7230
MSM7630
MSM8255
MSM8655
APQ8055
(Snapdragon S2)
266 MHz
8.5
Adreno220
MSM8260
MSM8660
APQ8060
(Snapdragon S3)
266MHz
17
Adreno225
MSM8260A
APQ8060A
(Snapdragon S4 Plus)
200 MHz
12.8
MSM8660A
(Snapdragon S4 Plus)
300 MHz
19.2
MSM8960
(Snapdragon S4 Plus)
400 MHz
25.6
Adreno305
MSM8227
MSM8627
(Snapdragon S4 Plus)
MSM8226
MSM8626
MSM8230
MSM8630
MSM8930
MSM8030AB
MSM8230AB
MSM8630AB
MSM8930AB
(Snapdragon 400)
400 MHz
19.2
MSM8228
MSM8928
(Snapdragon 400)
450 MHz
21.6
---
---
---
Adreno306
MSM8916
(Snapdragon 410)
??? MHz
???
Adreno320
(64 ALU)
MSM8960T
APQ8064
APQ8064 1AA
(Snapdragon S4 Pro)
MPQ8064
(Snapdragon S4 Prime)
400 MHZ
57
Adreno320
(96 ALU)
APQ8064T
(Snapdragon 600)
400 MHz
86.4
APQ8064AB
(Snapdragon 600)
450 MHz
97.2
Adreno330
(128 ALU)
MSM8974
APQ8074
(Snapdragon 800)
450 MHz
129.6
MSM8274AB
MSM8974AB
MSM8974AC
(Snapdragon 800)
550 MHz
158.4
---
---
Adreno420
APQ8084
(Snapdragon 805)
500 MHz
???
ARM的mali系列GPU以IP授权的方式见于联发科、三星、海思、全志、瑞芯微、展讯、华为等公司的处理器中。
GPU Name
Chip
Clock
GFlops
Mali-400
---
200 MHz
2
AML8726-M3
250 MHz
2.25
ST-E U8500
275 MHz
2.48
SC7710
SC8810
Allwinner A10
Allwinner A10s
Allwinner A13
300 MHz
2.7
ST-E U8520
Rk2926
RK2928
MT6290
MT8638T
MT6572M
400 MHz
3.6
MT6572
MT8312
MT8382
500 MHz
4.5
---
533 MHz
4.8
Mali-400 MP2
LC1810
300 MHz
5.4
SC6825
SC8825
Allwinner A20
Allwinner A23
350 MHz
6.3
SC7730
SC8830
MT6582M
AML8726-MX
AML8726-MXS
AML8726-MXL
NS115
400 MHz
7.2
MT6582
500 MHz
9.0
Mali-400 MP4
RK3066
Exynos 4210
266 MHz
9.6
SC7735s
SC8735s
SC8835s
Exynos 4212
400 MHz
14.4
Exynos 4412
440 MHz
15.84
Exynos 4412
RK3188
533 MHz
19.2
Mali-450
---
375 MHz
5.6
Mali-450 MP4
AML8726-M803
AML8726-M805
500 MHz
29.8
MT6588
600 MHz
35.8
MT6592
MT8392
V9R1
700 MHz
41.8
Mali-450 MP6
AML8726-M801
AML8726-M802
AML8726-S802
600 MHz
53.8
Mali-450 MP8
---
600 MHz
71.7
Mali-T720
---
600 MHz
10.2
Mali-T720 MP8
---
600 MHz
81.6
Mali-T604
---
500 MHz
17
Mali-T604 MP2
Exynos 5250
500 MHz
34
Mali-T604 MP4
---
600 MHz
81.6
Mali-T628
---
533 MHz
17.06
Mali-T628 MP6
Exynos 5420
533 MHz
102.4
Mali-T760
---
600 MHz
20.4
Mali-T760 MP4
RK3288
600 MHz
81.6
Mali-T760 MP16
---
600 MHZ
326.4
NVIDIA早期推出过Gofroce系列移动GPU,目前已被Tegra系列处理器取代。Tegra1至Tegra4系列使用的是Geforce ULP GPU。Tegra K1则采用了与同时期主流桌面平台相同的Kepler架构GPU。NVIDIA 移动GPU除用于NVIDIA Tegra系列处理器外,也向ARM厂商开放Kepler GPU授权。
GPU Name
Chip
Clock
GFlops
GeforceULP x 8
Tegra 2
(AP20H)
300 MHz
4.8
Tegra 2
(T20)
333 MHz
5.6
Tegra 2
(AP25、T25)
400 MHz
6.7
GeforceULP x 12
Tegra 3
(T30L、AP33)
416 MHz
10
Tegra 3
450 MHz
10.8
Tegra 3
(T30、T33、AP37)
520 MHz
12.5
GeforceULP x 60
Tegra 4i
660 MHz
79.2
GeforceULP x 72
Tegra 4
672 MHz
96.8
KeplerCores x 192
Tegra K-1
950 MHz
365
Vivante GPU以IP授权方式见于华为海思K3V2处理器。
GPU Name
Chip
Clock
GFlops
GC530
PXA920
315 MHz
0.96
GC800
---
450 MHz
3.6
GC800
RK2918
575 MHz
4.6
GC1000
PXA986
PXA988
PXA1088
600 MHz
9.6
GC1000 Plus
ATM7029
630 MHz
10.1
GC2000
i.MAX6
600 MHz
19.2
GC4000
K3V2
480 MHz
30.7
GC4000
---
680 MHz
43.5
GC6400
---
800 MHz
128
GC7000
---
---
---
GC8000
---
---
---
VideoCore1
VC01
---
---
VideoCore2
BCM2702
BCM2705
BCM2722
BCM2724
---
---
VideoCore3
BCM2727
BCM11181
---
---
VideoCore4
BCM2763
BCM2820
BCM2835
BCM11182
BCM11311
BCM21533
BCM21654
BCM21663
BCM21664
BCM21664T
BCM28145
BCM28150
BCM28155
BCM23550
250 MHz
24
Intel自Bay Trail 架构Atom开始使用与桌面CPU相同架构的HD Graphics GPU。
Name
type
EUs
Clock(MHz)
GFlops
HD Graphics
(22nm Bay trail Atom)
Gen 7
4
667
42.7
HD Graphics
(14nm Cherry trail Atom)
Gen 8
16
???
???
下表是同样使用Kepler架构的Tegra K1移动处理器和高端桌面显卡Geforce Titan Black、入门桌面显卡GT650,以及同样适用Intel第七代图形架构的的Bay Trail架构Atom Z3770与Haswell架构Core i7-4770R、Core i3-4330T的对比:
CPU GFlops
GPU GFlops
GPU BandWidth(GB/s)
TDP(W)
Tegra K1 Quad A15
73.6
364.8
17
5
Geforce GTX Titan Black
N/A
5000
336.4
250
GeForce GTX 650
N/A
812.54
80
64
Atom Z3770
70.08
44.03
17.1
<4
Core i3-4330T
192
368
25.6
35
Core i7-4770R
409.6
832
25.6
65
表 4 使用相同GPU架构的桌面与移动处理器对比
注意本表中表中所列TDP (Thermal Design Power,热设计功耗)数据取厂商标称数据,即移动处理器/桌面处理器的典型频率或典型应用场景下全芯片数据,或独立显卡的典型频率下数据。表中所列GFlops为单精度,取典型频率下数据。
由表可见,移动GPU具有以下几个特点:
1. 处理能力较弱。桌面GPU和CPU受芯片面积和TDP限制较小,执行单元数量和频率超过移动处理器。高端移动处理器的GPU处理能力接近中低端集成GPU的水平。
2. 带宽较小。独立GPU拥有独立于内存的显存,可以通过增加显存控制器数量与位宽提高显存带宽。集成GPU的桌面和移动处理器的内存控制器数量一般只有1-2个,并且由CPU和GPU共享带宽,与独立GPU相比有很大差距。
3. 功耗低,单位功耗下性能较强。移动GPU使用了较低的电压和频率,以及漏电较低的工艺,以达到更低的功耗。
GPU通用计算编程语言综述
DirectX 10.0规范前的GPU中的主要可编程单元是顶点着色器和像素着色器。在没有采用统一渲染架构的GPU中,两者在物理上是分离的,数量上的比例也是固定的。一个具体的应用程序很难同时完全利用两种可编程着色器的性能。此外,传统GPU不允许计算单元之间通过片内的存储器进行通信,因此GPGPU也只能采用严格的SIMD模型。不允许数据间的通信,就限制了很多算法,也就制约了传统GPGPU的应用范围和代码效率。
最早的GPGPU开发直接使用了图形学API编程。这种开发方式要求编程人员将数据打包成纹理,将计算任务映射为对纹理的渲染过程,用汇编或者高级着色器语言(如GLSL、Cg、HLSL)编写shader程序,然后通过图形学API(Direct3D、OpenGL)执行。这种“曲线救国”的方式要求编程人员不仅要熟悉自己需要实现的计算和并行算法,还要对图形学硬件和编程接口有深入的了解。
2003年,斯坦福大学的Ian Buck等人对ANSI C进行扩展,开发了基于NVIDIA Cg的Brook源到源编译器。Brook可以将类似C的brook C语言通过brcc编译器编译为Cg代码,隐藏了利用图形学API实现的细节,大大简化了开发过程。但早期的Brook编译效率很低,并且只能使用像素着色器进行运算。受GPU架构限制,Brook也缺乏有效的数据通信机制。AMD/ATI公司在其GPGPU通用计算产品Stream中采用了Brook的改进版本Brook+作为高级开发语言。Brook+的编译器的工作方式与Brook不同,提高了效率。在2009年推出Brook+ 1.3以前,Brook+早期版本与Brook相比在语法和编程模型上没有显著改进,同样缺乏有效的数据通信手段。
2006年NVIDIA推出了第一个专用GPU通用计算编程API CUDA。与传统开发方式相比,CUDA硬件引入了SIMT概念,允许在细粒度上进行通信。CUDA的可编程性和某些应用程序的运行效率比传统GPGPU编程方式高。
2008年6月16日,Khronos的通用计算工作小组成立。5个月后的2008年11月18日,该工作组完成了OpenCL 1.0规范的技术细节。该技术规范在由Khronos成员进行审查之后,于2008年12月8日公开发表[3]。2010年6月14日,OpenCL 1.1 发布。由于性能优化程序高度硬件相关,同样的OpenCL程序在不同的硬件上需要分别优化才能达到最佳性能。
Google在Android 4.1中实验性的加入了renderscript,并在Android 4.2中允许使用GPU加速renderscript。总体而言,renderscript的可编程性与使用openGL基本相当。
目前市场上主流GPU对通用计算API支持如下:
OpenGL ES
DirectX
CUDA
OpenCL
renderscript
SGX554
2.0
9 level
N
1.1
Y
Nvidia Geforce ULP
2.0
9
N
N
Y
Nvidia Kepler
3.0
11
Y
1.2
Y
Adreno3xx
3.0
11
N
1.1
Y
HD Graphics
3.0
11
N
1.1
Y
Mali-T6xx
3.0
11
N
1.1
Y
GC4000
3.0
10
N
1.1
N/A
表 5 2014Q1市场流行GPU架构对图形学和通用计算API支持
目前主流移动操作系统对通用计算API支持如下:
OpenGL ES
DirectX
CUDA
OpenCL
renderscript
iOS 7
Y
N
N
N (native API)
N
Android 4.4
Y
N
N (supported by NVIDIA SDK)
N
Y
Windows 8 RT
Y
Y
Y
N/A
N
表 6 主流操作系统对图形学和通用计算API支持
由表可知,尽管主流硬件都能够支持openCL,但目前主流移动操作系统对专用通用计算API支持程度不佳。最适合的编程方式仍然是使用较为传统的OpenGL ES,这样可以实现良好的可移植性。如果是Android独占应用,可以考虑使用renderscript。在不考虑可移植性的前提下,可以在特定平台上使用CUDA或者OpenCL以获得更高效率和可编程性。
(2015年3月29日补充:iOS上可以考虑使用metal)
结语
移动GPU通用计算呈现以下几个趋势:
1. 移动GPU性能快速提高,绝对性能受到芯片面积、带宽和功耗限制,单位功耗下性能对比桌面GPU具有优势。
2. 移动GPU架构转向统一渲染架构,有些直接使用与桌面GPU相同的架构。移动GPU对图形和通用计算API支持已与桌面GPU同步。
3. 主流移动操作系统对图形学API和GPU通用计算API支持不断完善,但目前在移动平台仍未出现统一的专用GPU通用计算API。通过OpenGL ES进行通用计算是未来数年中可以获得跨操作系统和硬件平台,具有良好可移植性的现实选择。
4. 利用GPU进行移动平台通用计算的软件数量正在增长,目前主要应用领域为图像与视频处理和编解码。未来可能成为热点的模式识别和增强现实应用需要大量计算和渲染,对GPU通用计算有迫切需求。
- 移动GPU通用计算现状与展望
- GPU介绍与通用计算
- GPU通用计算与CUDA
- 网页渲染 - 现状与展望
- 无人机的现状与展望
- GPU及其通用计算
- GPU通用计算概述
- 利用GPU实现通用计算
- 解析GPU通用计算妙用
- GPU通用计算调研报告
- GPU通用计算调研报告
- GPU通用计算调研报告
- GPU通用计算调研报告
- GPU通用计算调研报告
- GPU通用计算调研报告
- GPU通用计算调研报告
- GPU通用计算调研报告
- GPU通用计算调研报告
- 利用栈求逻辑运算表达式的真值
- scrapy
- Uva10054 无向图打印任意欧拉回路
- java 对reids的操作 切片与非切片连接池的应用
- .net新手之学习之路一
- 移动GPU通用计算现状与展望
- spark下测试akka的分布式通讯功能
- JS判断字符串变量是否含有某个字串的方法
- Apache Common HttpClient使用之七种武器
- jedis 中出现ArrayIndexOutOfBoundsException异常的解决方法
- 自定义easy-ui validatebox 如maxLength()等等校验规则
- LeetCode 172: Factorial Trailing Zeroes
- 腾讯2015年3月实习生笔试题
- 2015-03-29-绘图和可视化(3)-绘制地图:图形化显示海地地震危机数据